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_voucher_update_view_for_voucher_in_set(self): vs = voucher.VoucherSetFactory(count=10) v = vs.vouchers.first() view = views.VoucherUpdateView.as_view() request = RequestFactory().get('/') response = view(request, pk=v.pk) assert response.status_code == 302 assert response.url == reverse('dashboard:voucher-set-update', kwargs={'pk': vs.pk}) assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ( 'warning', "The voucher can only be edited as part of its set") data = { 'code': v.code, 'name': "New name", 'start_datetime': v.start_datetime, 'end_datetime': v.end_datetime, 'usage': v.usage, 'offers': [v.offers], } request = RequestFactory().post('/', data=data) response = view(request, pk=v.pk) assert response.status_code == 302 assert response.url == reverse('dashboard:voucher-set-update', kwargs={'pk': vs.pk}) assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ( 'warning', "The voucher can only be edited as part of its set") v.refresh_from_db() assert v.name != "New name"
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_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'], {})
def test_get(self): request = RequestFactory().get('/') view = views.VoucherAddView.as_view() response = view(request) self.assertEqual(response.status_code, 302)
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_default_shipping_address(self): user_address = factories.UserAddressFactory( country=self.country, user=self.user, is_default_for_shipping=True ) request = RequestFactory().get(self.url, user=self.user) view = views.BasketView(request=request) self.assertEquals(view.get_default_shipping_address(), user_address)
def test_voucher_set_delete_view(self): vs = voucher.VoucherSetFactory(count=10) assert VoucherSet.objects.count() == 1 assert Voucher.objects.count() == 10 request = RequestFactory().post('/') response = views.VoucherSetDeleteView.as_view()(request, pk=vs.pk) assert VoucherSet.objects.count() == 0 assert Voucher.objects.count() == 0 assert response.status_code == 302 assert response.url == reverse('dashboard:voucher-set-list') assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher set deleted")
def test_voucher_delete_view_for_voucher_in_set(self): vs = voucher.VoucherSetFactory(count=10) assert Voucher.objects.count() == 10 request = RequestFactory().post('/') response = views.VoucherDeleteView.as_view()(request, pk=vs.vouchers.first().pk) vs.refresh_from_db() assert vs.count == 9 # "count" is updated assert Voucher.objects.count() == 9 assert response.status_code == 302 assert response.url == reverse('dashboard:voucher-set-detail', kwargs={'pk': vs.pk}) assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher deleted")
def test_post_with_missing_voucher(self): """ If the voucher is missing, verify the view queues a message and redirects. """ pk = '12345' view = views.VoucherRemoveView.as_view() request = RequestFactory().post('/') request.basket.save() response = view(request, pk=pk) self.assertEqual(response.status_code, 302) actual = list(get_messages(request))[-1].message expected = "No voucher found with id '{}'".format(pk) self.assertEqual(actual, expected)
def test_voucher_delete_view(self): v = voucher.VoucherFactory() v.offers.add(ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)) assert Voucher.objects.count() == 1 assert ConditionalOffer.objects.count() == 1 request = RequestFactory().post('/') response = views.VoucherDeleteView.as_view()(request, pk=v.pk) assert Voucher.objects.count() == 0 # Related offer is not deleted assert ConditionalOffer.objects.count() == 1 assert response.status_code == 302 assert response.url == reverse('dashboard:voucher-list') assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher deleted")
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_post_valid(self): voucher = VoucherFactory(num_basket_additions=5) data = {'code': voucher.code} request = RequestFactory().post('/', data=data) request.basket.save() request.basket.vouchers.add(voucher) view = views.VoucherRemoveView.as_view() response = view(request, pk=voucher.pk) self.assertEqual(response.status_code, 302) voucher = voucher.__class__.objects.get(pk=voucher.pk) self.assertEqual(voucher.num_basket_additions, 4)
def test_post_valid(self): voucher = factories.VoucherFactory() self.assertTrue(voucher.is_active()) data = { 'code': voucher.code } request = RequestFactory().post('/', data=data) request.basket.save() view = views.VoucherAddView.as_view() response = view(request) self.assertEqual(response.status_code, 302) voucher = voucher.__class__.objects.get(pk=voucher.pk) self.assertEqual(voucher.num_basket_additions, 1, msg=self._get_voucher_message(request))
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_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_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_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'], {})
def test_default_shipping_address_for_anonymous_user(self): request = RequestFactory().get(self.url) view = views.BasketView(request=request) self.assertIsNone(view.get_default_shipping_address())