Ejemplo n.º 1
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,
                }
            }])
Ejemplo n.º 2
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': '',
                },
            }])
Ejemplo n.º 3
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,
                                 },
                             }])
Ejemplo n.º 4
0
def test_voucherform_set_create():
    a_range = RangeFactory(includes_all_products=True)
    data = MultiValueDict({
        'name': ['10% Discount'],
        'code_length': ['10'],
        'count': ['10'],
        'description': ['This is a 10% discount for mailing X'],
        'start_datetime': ['2014-10-01'],
        'end_datetime': ['2018-10-01'],
        'benefit_range': [a_range.pk],
        'benefit_type': ['Percentage'],
        'benefit_value': ['10'],
    })
    form = forms.VoucherSetForm(data)
    assert form.is_valid(), form.errors
    voucher_set = form.save()
    assert voucher_set.vouchers.count() == 10
Ejemplo n.º 5
0
def test_voucher_set_form_create():
    a_range = RangeFactory(includes_all_products=True)
    offer = ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER,
                                    benefit=BenefitFactory(range=a_range),
                                    condition=ConditionFactory(range=a_range,
                                                               value=1))
    data = MultiValueDict({
        'name': ['10% Discount'],
        'code_length': ['10'],
        'count': ['10'],
        'description': ['This is a 10% discount for mailing X'],
        'start_datetime': ['2014-10-01'],
        'end_datetime': ['2018-10-01'],
        'usage': [Voucher.MULTI_USE],
        'offers': [offer.pk],
    })
    form = forms.VoucherSetForm(data)
    assert form.is_valid(), form.errors
    voucher_set = form.save()
    assert voucher_set.vouchers.count() == 10
    def test_valid_form(self):
        a_range = RangeFactory(includes_all_products=True)

        start = timezone.now()
        end = start + timedelta(days=1)
        data = {
            'name': 'test',
            'code_length': 12,
            'description': 'test',
            'start_datetime': start,
            'end_datetime': end,
            'count': 10,
            'benefit_range': a_range.pk,
            'benefit_type': 'Percentage',
            'benefit_value': 10,
        }
        form = forms.VoucherSetForm(data=data)
        assert form.is_valid()
        instance = form.save()
        assert instance.count == instance.vouchers.count()
        assert instance.start_datetime == start
        assert instance.end_datetime == end
Ejemplo n.º 7
0
    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': '',
            },
        }]
Ejemplo n.º 8
0
def range_with_products():
    productrange = RangeFactory()
    for i in range(0, 30):
        product = ProductFactory()
        productrange.add_product(product)
    return productrange
Ejemplo n.º 9
0
def many_ranges():
    for i in range(0, 30):
        RangeFactory()
    return Range.objects.all()
Ejemplo n.º 10
0
    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,
            },
        }]