| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733 |
- import json
-
- import pytest
- from django.contrib.messages import get_messages
- from django.test import TestCase
- from django.urls import reverse
- from freezegun import freeze_time
-
- from oscar.apps.dashboard.offers import views as offer_views
- from oscar.apps.dashboard.ranges import views as range_views
- from oscar.apps.offer.custom import create_benefit, create_condition
- from oscar.core.loading import get_model
- from oscar.test.factories.catalogue import ProductFactory
- from oscar.test.factories.offer import ConditionalOfferFactory, RangeFactory
- from oscar.test.factories.voucher import VoucherFactory
- from tests._site.model_tests_app.models import (
- CustomBenefitModel, CustomConditionModel)
- from tests.fixtures import RequestFactory
-
- Range = get_model('offer', 'Range')
- ConditionalOffer = get_model('offer', 'ConditionalOffer')
- Benefit = get_model('offer', 'Benefit')
- Condition = get_model('offer', 'Condition')
-
-
- @pytest.fixture
- def many_ranges():
- for i in range(0, 30):
- RangeFactory()
- return Range.objects.all()
-
-
- @pytest.fixture
- def many_offers():
- for i in range(0, 30):
- ConditionalOfferFactory(
- name='Test offer %d' % i
- )
-
-
- @pytest.fixture
- def range_with_products():
- productrange = RangeFactory()
- for i in range(0, 30):
- product = ProductFactory()
- productrange.add_product(product)
- return productrange
-
-
- @pytest.mark.django_db
- class TestDashboardOffers:
-
- def test_range_list_view(self, rf, many_ranges):
- request = rf.get('/')
- view = range_views.RangeListView.as_view()
- response = view(request)
- # if these are missing the pagination is broken
- assert response.context_data['paginator']
- assert response.context_data['page_obj']
- assert response.status_code == 200
-
- def test_offer_list_view(self, rf, many_offers):
- request = rf.get('/')
- view = offer_views.OfferListView.as_view()
- response = view(request)
- # if these are missing the pagination is broken
- assert response.context_data['paginator']
- assert response.context_data['page_obj']
- assert response.status_code == 200
-
- def test_offer_delete_view_for_voucher_offer_without_vouchers(self):
- offer = ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)
-
- view = offer_views.OfferDeleteView.as_view()
-
- request = RequestFactory().get('/')
- response = view(request, pk=offer.pk)
- assert response.status_code == 200
-
- request = RequestFactory().post('/')
- response = view(request, pk=offer.pk)
- assert response.status_code == 302
- assert response.url == reverse('dashboard:offer-list')
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('success', "Offer deleted!")
- assert not ConditionalOffer.objects.exists()
-
- def test_offer_delete_view_for_voucher_offer_with_vouchers(self):
- offer = ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)
- VoucherFactory().offers.add(offer)
-
- view = offer_views.OfferDeleteView.as_view()
-
- request = RequestFactory().get('/')
- response = view(request, pk=offer.pk)
- assert response.status_code == 302
- assert response.url == reverse('dashboard:offer-detail', kwargs={'pk': offer.pk})
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
- 'warning', "This offer can only be deleted if it has no vouchers attached to it")
-
- request = RequestFactory().post('/')
- response = view(request, pk=offer.pk)
- assert response.status_code == 302
- assert response.url == reverse('dashboard:offer-detail', kwargs={'pk': offer.pk})
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
- 'warning', "This offer can only be deleted if it has no vouchers attached to it")
- assert ConditionalOffer.objects.exists()
-
- def test_range_product_list_view(self, rf, range_with_products):
- view = range_views.RangeProductListView.as_view()
- pk = range_with_products.pk
-
- request = rf.get('/')
- response = view(request, pk=pk)
- # if these are missing the pagination is broken
- assert response.context_data['paginator']
- assert response.context_data['page_obj']
- assert response.status_code == 200
-
-
- class TestCreateOfferWizardStepView(TestCase):
-
- def setUp(self):
- range_ = RangeFactory()
-
- self.metadata_form_kwargs_session_data = {
- 'data': {
- 'name': 'Test offer',
- 'slug': '',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.SITE,
- 'exclusive': True,
- 'status': ConditionalOffer.OPEN,
- 'condition': None,
- 'benefit': None,
- 'priority': 0,
- 'start_datetime': None,
- 'end_datetime': None,
- 'max_global_applications': None,
- 'max_user_applications': None,
- 'max_basket_applications': None,
- 'max_discount': None,
- 'total_discount': '0.00',
- 'num_applications': 0,
- 'num_orders': 0,
- 'redirect_url': '',
- 'date_created': None,
- },
- }
- self.metadata_obj_session_data = [{
- 'model': 'offer.conditionaloffer',
- 'pk': None,
- 'fields': {
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.SITE,
- },
- }]
- self.benefit_form_kwargs_session_data = {
- 'data': {
- 'range': range_.pk,
- 'type': Benefit.PERCENTAGE,
- 'value': '10',
- 'max_affected_items': None,
- 'custom_benefit': '',
- },
- }
- self.benefit_obj_session_data = [{
- 'model': 'offer.benefit',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Benefit.PERCENTAGE,
- 'value': '10',
- 'max_affected_items': None,
- 'proxy_class': None,
- },
- }]
- self.condition_form_kwargs_session_data = {
- 'data': {
- 'range': range_.pk,
- 'type': Condition.COUNT,
- 'value': '10',
- 'custom_condition': '',
- },
- }
- self.condition_obj_session_data = [{
- 'model': 'offer.condition',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Condition.COUNT,
- 'value': '10',
- 'proxy_class': None,
- },
- }]
-
- def test_offer_meta_data_view(self):
- request = RequestFactory().post('/', data={
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.SITE,
- })
- response = offer_views.OfferMetaDataView.as_view()(request)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-benefit'))
- self.assertJSONEqual(request.session['offer_wizard']['metadata'], {
- 'data': {
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.SITE,
- },
- })
- self.assertJSONEqual(request.session['offer_wizard']['metadata_obj'], [{
- 'model': 'offer.conditionaloffer',
- 'pk': None,
- 'fields': {
- 'name': 'Test offer',
- 'slug': '',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.SITE,
- 'exclusive': True,
- 'status': ConditionalOffer.OPEN,
- 'condition': None,
- 'benefit': None,
- 'priority': 0,
- 'start_datetime': None,
- 'end_datetime': None,
- 'max_global_applications': None,
- 'max_user_applications': None,
- 'max_basket_applications': None,
- 'max_discount': None,
- 'total_discount': '0.00',
- 'num_applications': 0,
- 'num_orders': 0,
- 'redirect_url': '',
- 'date_created': None,
- },
- }])
-
- def test_offer_benefit_view_with_built_in_benefit_type(self):
- range_ = RangeFactory()
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'type': Benefit.PERCENTAGE,
- 'value': 10,
- })
- request.session['offer_wizard'] = {
- 'metadata': json.dumps(self.metadata_form_kwargs_session_data),
- 'metadata_obj': json.dumps(self.metadata_obj_session_data),
- }
- response = offer_views.OfferBenefitView.as_view()(request)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-condition'))
- self.assertJSONEqual(request.session['offer_wizard']['metadata'], self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['metadata_obj'], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit'], {
- 'data': {
- 'range': range_.pk,
- 'type': Benefit.PERCENTAGE,
- 'value': '10',
- 'max_affected_items': None,
- 'custom_benefit': '',
- },
- })
- self.assertJSONEqual(request.session['offer_wizard']['benefit_obj'], [{
- 'model': 'offer.benefit',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Benefit.PERCENTAGE,
- 'value': '10',
- 'max_affected_items': None,
- 'proxy_class': None,
- },
- }])
-
- def test_offer_benefit_view_with_custom_benefit_type(self):
- benefit = create_benefit(CustomBenefitModel)
-
- request = RequestFactory().post('/', data={
- 'custom_benefit': benefit.pk,
- })
- request.session['offer_wizard'] = {
- 'metadata': json.dumps(self.metadata_form_kwargs_session_data),
- 'metadata_obj': json.dumps(self.metadata_obj_session_data),
- }
- response = offer_views.OfferBenefitView.as_view()(request)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-condition'))
- self.assertJSONEqual(request.session['offer_wizard']['metadata'], self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['metadata_obj'], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit'], {
- 'data': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'max_affected_items': None,
- 'custom_benefit': str(benefit.pk),
- },
- })
- self.assertJSONEqual(request.session['offer_wizard']['benefit_obj'], [{
- 'model': 'offer.benefit',
- 'pk': benefit.pk,
- 'fields': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'max_affected_items': None,
- 'proxy_class': benefit.proxy_class,
- }
- }])
-
- def test_offer_condition_view_with_built_in_condition_type(self):
- range_ = RangeFactory()
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'type': Condition.COUNT,
- 'value': 10,
- })
- request.session['offer_wizard'] = {
- 'metadata': json.dumps(self.metadata_form_kwargs_session_data),
- 'metadata_obj': json.dumps(self.metadata_obj_session_data),
- 'benefit': json.dumps(self.benefit_form_kwargs_session_data),
- 'benefit_obj': json.dumps(self.benefit_obj_session_data),
- }
- response = offer_views.OfferConditionView.as_view()(request)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-restrictions'))
- self.assertJSONEqual(request.session['offer_wizard']['metadata'], self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['metadata_obj'], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit'], self.benefit_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit_obj'], self.benefit_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['condition'], {
- 'data': {
- 'range': range_.pk,
- 'type': Condition.COUNT,
- 'value': '10',
- 'custom_condition': '',
- },
- })
- self.assertJSONEqual(request.session['offer_wizard']['condition_obj'], [{
- 'model': 'offer.condition',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Condition.COUNT,
- 'value': '10',
- 'proxy_class': None,
- },
- }])
-
- def test_offer_condition_view_with_custom_condition_type(self):
- range_ = RangeFactory()
- condition = create_condition(CustomConditionModel)
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'custom_condition': condition.pk,
- })
- request.session['offer_wizard'] = {
- 'metadata': json.dumps(self.metadata_form_kwargs_session_data),
- 'metadata_obj': json.dumps(self.metadata_obj_session_data),
- 'benefit': json.dumps(self.benefit_form_kwargs_session_data),
- 'benefit_obj': json.dumps(self.benefit_obj_session_data),
- }
- response = offer_views.OfferConditionView.as_view()(request)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-restrictions'))
- self.assertJSONEqual(request.session['offer_wizard']['metadata'], self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['metadata_obj'], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit'], self.benefit_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['benefit_obj'], self.benefit_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard']['condition'], {
- 'data': {
- 'range': range_.pk,
- 'type': '',
- 'value': None,
- 'custom_condition': str(condition.pk),
- },
- })
- self.assertJSONEqual(request.session['offer_wizard']['condition_obj'], [{
- 'model': 'offer.condition',
- 'pk': condition.pk,
- 'fields': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'proxy_class': condition.proxy_class,
- }
- }])
-
- def test_offer_restrictions_view(self):
- request = RequestFactory().post('/', data={
- 'priority': 0,
- })
- request.session['offer_wizard'] = {
- 'metadata': json.dumps(self.metadata_form_kwargs_session_data),
- 'metadata_obj': json.dumps(self.metadata_obj_session_data),
- 'benefit': json.dumps(self.benefit_form_kwargs_session_data),
- 'benefit_obj': json.dumps(self.benefit_obj_session_data),
- 'condition': json.dumps(self.condition_form_kwargs_session_data),
- 'condition_obj': json.dumps(self.condition_obj_session_data),
- }
- response = offer_views.OfferRestrictionsView.as_view()(request)
-
- offer = ConditionalOffer.objects.get()
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-detail', kwargs={'pk': offer.pk}))
- self.assertEqual([(m.level_tag, str(m.message)) for m in get_messages(request)][0],
- ('success', "Offer '%s' created!" % offer.name))
- self.assertEqual(request.session['offer_wizard'], {})
-
-
- @freeze_time('2021-04-23 14:00:00')
- class TestUpdateOfferWizardStepView(TestCase):
-
- def setUp(self):
- self.offer = ConditionalOfferFactory()
- self.metadata_form_kwargs_key = 'metadata%s' % self.offer.pk
- self.metadata_obj_key = 'metadata%s_obj' % self.offer.pk
- self.benefit_form_kwargs_key = 'benefit%s' % self.offer.pk
- self.benefit_obj_key = 'benefit%s_obj' % self.offer.pk
- self.condition_form_kwargs_key = 'condition%s' % self.offer.pk
- self.condition_obj_key = 'condition%s_obj' % self.offer.pk
- range_ = RangeFactory()
-
- self.metadata_form_kwargs_session_data = {
- 'data': {
- 'name': 'Test offer',
- 'slug': self.offer.slug,
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.VOUCHER,
- 'exclusive': True,
- 'status': ConditionalOffer.OPEN,
- 'condition': self.offer.condition.pk,
- 'benefit': self.offer.benefit.pk,
- 'priority': 0,
- 'start_datetime': None,
- 'end_datetime': None,
- 'max_global_applications': None,
- 'max_user_applications': None,
- 'max_basket_applications': None,
- 'max_discount': None,
- 'total_discount': '0.00',
- 'num_applications': 0,
- 'num_orders': 0,
- 'redirect_url': '',
- 'date_created': '2021-04-23T14:00:00Z',
- },
- }
- self.metadata_obj_session_data = [{
- 'model': 'offer.conditionaloffer',
- 'pk': None,
- 'fields': {
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.VOUCHER,
- },
- }]
- self.benefit_form_kwargs_session_data = {
- 'data': {
- 'range': range_.pk,
- 'type': Benefit.FIXED,
- 'value': '2000',
- 'max_affected_items': 2,
- 'custom_benefit': '',
- },
- }
- self.benefit_obj_session_data = [{
- 'model': 'offer.benefit',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Benefit.FIXED,
- 'value': '2000',
- 'max_affected_items': 2,
- 'proxy_class': '',
- },
- }]
- self.condition_form_kwargs_session_data = {
- 'data': {
- 'range': range_.pk,
- 'type': Condition.VALUE,
- 'value': '2000',
- 'custom_condition': '',
- },
- }
- self.condition_obj_session_data = [{
- 'model': 'offer.condition',
- 'pk': None,
- 'fields': {
- 'range': range_.pk,
- 'type': Condition.VALUE,
- 'value': '2000',
- 'proxy_class': '',
- },
- }]
-
- def test_offer_meta_data_view(self):
- request = RequestFactory().post('/', data={
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.VOUCHER,
- })
- response = offer_views.OfferMetaDataView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-benefit', kwargs={'pk': self.offer.pk}))
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_form_kwargs_key], {
- 'data': {
- 'name': 'Test offer',
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.VOUCHER,
- },
- })
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_obj_key], [{
- 'model': 'offer.conditionaloffer',
- 'pk': self.offer.pk,
- 'fields': {
- 'name': 'Test offer',
- 'slug': self.offer.slug,
- 'description': 'Test description',
- 'offer_type': ConditionalOffer.VOUCHER,
- 'exclusive': True,
- 'status': ConditionalOffer.OPEN,
- 'condition': self.offer.condition.pk,
- 'benefit': self.offer.benefit.pk,
- 'priority': 0,
- 'start_datetime': None,
- 'end_datetime': None,
- 'max_global_applications': None,
- 'max_user_applications': None,
- 'max_basket_applications': None,
- 'max_discount': None,
- 'total_discount': '0.00',
- 'num_applications': 0,
- 'num_orders': 0,
- 'redirect_url': '',
- 'date_created': '2021-04-23T14:00:00Z',
- },
- }])
-
- def test_offer_benefit_view_with_built_in_benefit_type(self):
- range_ = RangeFactory()
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'type': Benefit.FIXED,
- 'value': 2000,
- })
- request.session['offer_wizard'] = {
- self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data),
- self.metadata_obj_key: json.dumps(self.metadata_obj_session_data),
- }
- response = offer_views.OfferBenefitView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-condition', kwargs={'pk': self.offer.pk}))
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_form_kwargs_key],
- self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_obj_key], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_form_kwargs_key], {
- 'data': {
- 'range': range_.pk,
- 'type': Benefit.FIXED,
- 'value': '2000',
- 'max_affected_items': None,
- 'custom_benefit': '',
- },
- })
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_obj_key], [{
- 'model': 'offer.benefit',
- 'pk': self.offer.benefit.pk,
- 'fields': {
- 'range': range_.pk,
- 'type': Benefit.FIXED,
- 'value': '2000',
- 'max_affected_items': None,
- 'proxy_class': '',
- },
- }])
-
- def test_offer_benefit_view_with_custom_benefit_type(self):
- benefit = create_benefit(CustomBenefitModel)
-
- request = RequestFactory().post('/', data={
- 'custom_benefit': benefit.pk,
- })
- request.session['offer_wizard'] = {
- self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data),
- self.metadata_obj_key: json.dumps(self.metadata_obj_session_data),
- }
- response = offer_views.OfferBenefitView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-condition', kwargs={'pk': self.offer.pk}))
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_form_kwargs_key],
- self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_obj_key], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_form_kwargs_key], {
- 'data': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'max_affected_items': None,
- 'custom_benefit': str(benefit.pk),
- },
- })
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_obj_key], [{
- 'model': 'offer.benefit',
- 'pk': benefit.pk,
- 'fields': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'max_affected_items': None,
- 'proxy_class': benefit.proxy_class,
- }
- }])
-
- def test_offer_condition_view_with_built_in_condition_type(self):
- range_ = RangeFactory()
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'type': Condition.VALUE,
- 'value': 2000,
- })
- request.session['offer_wizard'] = {
- self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data),
- self.metadata_obj_key: json.dumps(self.metadata_obj_session_data),
- self.benefit_form_kwargs_key: json.dumps(self.benefit_form_kwargs_session_data),
- self.benefit_obj_key: json.dumps(self.benefit_obj_session_data),
- }
- response = offer_views.OfferConditionView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-restrictions', kwargs={'pk': self.offer.pk}))
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_form_kwargs_key],
- self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_obj_key], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_form_kwargs_key],
- self.benefit_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_obj_key], self.benefit_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.condition_form_kwargs_key], {
- 'data': {
- 'range': range_.pk,
- 'type': Condition.VALUE,
- 'value': '2000',
- 'custom_condition': '',
- },
- })
- self.assertJSONEqual(request.session['offer_wizard'][self.condition_obj_key], [{
- 'model': 'offer.condition',
- 'pk': self.offer.condition.pk,
- 'fields': {
- 'range': range_.pk,
- 'type': Condition.VALUE,
- 'value': '2000',
- 'proxy_class': '',
- },
- }])
-
- def test_offer_condition_view_with_custom_condition_type(self):
- range_ = RangeFactory()
- condition = create_condition(CustomConditionModel)
-
- request = RequestFactory().post('/', data={
- 'range': range_.pk,
- 'custom_condition': condition.pk,
- })
- request.session['offer_wizard'] = {
- self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data),
- self.metadata_obj_key: json.dumps(self.metadata_obj_session_data),
- self.benefit_form_kwargs_key: json.dumps(self.benefit_form_kwargs_session_data),
- self.benefit_obj_key: json.dumps(self.benefit_obj_session_data),
- }
- response = offer_views.OfferConditionView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-restrictions', kwargs={'pk': self.offer.pk}))
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_form_kwargs_key],
- self.metadata_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.metadata_obj_key], self.metadata_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_form_kwargs_key],
- self.benefit_form_kwargs_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.benefit_obj_key], self.benefit_obj_session_data)
- self.assertJSONEqual(request.session['offer_wizard'][self.condition_form_kwargs_key], {
- 'data': {
- 'range': range_.pk,
- 'type': '',
- 'value': None,
- 'custom_condition': str(condition.pk),
- },
- })
- self.assertJSONEqual(request.session['offer_wizard'][self.condition_obj_key], [{
- 'model': 'offer.condition',
- 'pk': condition.pk,
- 'fields': {
- 'range': None,
- 'type': '',
- 'value': None,
- 'proxy_class': condition.proxy_class,
- }
- }])
-
- def test_offer_restrictions_view(self):
- request = RequestFactory().post('/', data={
- 'priority': 0,
- })
- request.session['offer_wizard'] = {
- self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data),
- self.metadata_obj_key: json.dumps(self.metadata_obj_session_data),
- self.benefit_form_kwargs_key: json.dumps(self.benefit_form_kwargs_session_data),
- self.benefit_obj_key: json.dumps(self.benefit_obj_session_data),
- self.condition_form_kwargs_key: json.dumps(self.condition_form_kwargs_session_data),
- self.condition_obj_key: json.dumps(self.condition_obj_session_data),
- }
- response = offer_views.OfferRestrictionsView.as_view(update=True)(request, pk=self.offer.pk)
-
- self.offer.refresh_from_db()
- self.assertEqual(response.status_code, 302)
- self.assertEqual(response.url, reverse('dashboard:offer-detail', kwargs={'pk': self.offer.pk}))
- self.assertEqual([(m.level_tag, str(m.message)) for m in get_messages(request)][0],
- ('success', "Offer '%s' updated" % self.offer.name))
- self.assertEqual(request.session['offer_wizard'], {})
|