Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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"
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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'], {})
Exemplo n.º 5
0
    def test_get(self):
        request = RequestFactory().get('/')

        view = views.VoucherAddView.as_view()
        response = view(request)

        self.assertEqual(response.status_code, 302)
Exemplo n.º 6
0
    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,
                }
            }])
Exemplo n.º 7
0
 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)
Exemplo n.º 8
0
 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")
Exemplo n.º 9
0
 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")
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
 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")
Exemplo n.º 12
0
    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',
                },
            }])
Exemplo n.º 13
0
    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': '',
                },
            }])
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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))
Exemplo n.º 16
0
    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,
                                 },
                             }])
Exemplo n.º 17
0
    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,
                                 },
                             }])
Exemplo n.º 18
0
    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,
                                 }
                             }])
Exemplo n.º 19
0
    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'], {})
Exemplo n.º 20
0
 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())