| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import datetime
-
- import pytest
- from django.utils import timezone
- from django.utils.datastructures import MultiValueDict
-
- from oscar.apps.dashboard.vouchers import forms
- from oscar.core.loading import get_model
- from oscar.test.factories.offer import (
- BenefitFactory, ConditionalOfferFactory, ConditionFactory, RangeFactory)
- from oscar.test.factories.voucher import VoucherSetFactory
-
- ConditionalOffer = get_model('offer', 'ConditionalOffer')
- Voucher = get_model('voucher', 'Voucher')
-
-
- @pytest.mark.django_db
- 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
-
-
- @pytest.mark.django_db
- def test_voucher_set_form_update_with_unchanged_count():
- tzinfo = timezone.get_current_timezone()
- voucher_set = VoucherSetFactory(name="Dummy name",
- count=5,
- code_length=12,
- description="Dummy description",
- start_datetime=datetime.datetime(2021, 2, 1, tzinfo=tzinfo),
- end_datetime=datetime.datetime(2021, 2, 28, tzinfo=tzinfo))
- voucher = voucher_set.vouchers.first()
- assert voucher.usage == Voucher.MULTI_USE
- new_offers = [ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER),
- ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)]
- data = {
- 'name': "New name",
- 'code_length': 10,
- 'description': "New description",
- 'start_datetime': datetime.datetime(2021, 3, 1, tzinfo=tzinfo),
- 'end_datetime': datetime.datetime(2021, 3, 31, tzinfo=tzinfo),
- 'count': voucher_set.count,
- 'usage': Voucher.SINGLE_USE,
- 'offers': new_offers,
- }
- form = forms.VoucherSetForm(data, instance=voucher_set)
- assert form.is_valid(), form.errors
- voucher_set = form.save()
- assert voucher_set.vouchers.count() == 5
- for i, v in enumerate(voucher_set.vouchers.order_by('date_created')):
- assert v.name == "New name - %d" % (i + 1)
- assert len(v.code) == 14 # The code is not modified
- assert v.start_datetime == datetime.datetime(2021, 3, 1, tzinfo=tzinfo)
- assert v.end_datetime == datetime.datetime(2021, 3, 31, tzinfo=tzinfo)
- assert v.usage == Voucher.SINGLE_USE
- assert list(v.offers.all()) == new_offers
-
-
- @pytest.mark.django_db
- def test_voucher_set_form_update_with_changed_count():
- tzinfo = timezone.get_current_timezone()
- voucher_set = VoucherSetFactory(name="Dummy name",
- count=5,
- code_length=12,
- description="Dummy description",
- start_datetime=datetime.datetime(2021, 2, 1, tzinfo=tzinfo),
- end_datetime=datetime.datetime(2021, 2, 28, tzinfo=tzinfo))
- voucher = voucher_set.vouchers.first()
- assert voucher.usage == Voucher.MULTI_USE
- new_offers = [ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER),
- ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)]
- data = {
- 'name': "New name",
- 'code_length': 10,
- 'description': "New description",
- 'start_datetime': datetime.datetime(2021, 3, 1, tzinfo=tzinfo),
- 'end_datetime': datetime.datetime(2021, 3, 31, tzinfo=tzinfo),
- 'count': 10,
- 'usage': Voucher.SINGLE_USE,
- 'offers': new_offers,
- }
- form = forms.VoucherSetForm(data, instance=voucher_set)
- assert form.is_valid(), form.errors
- voucher_set = form.save()
- voucher_set.refresh_from_db()
- assert voucher_set.count == 10 # "count" is updated
- assert voucher_set.vouchers.count() == 10
- for i, v in enumerate(voucher_set.vouchers.order_by('date_created')):
- assert v.name == "New name - %d" % (i + 1)
- if i < 5:
- # Original vouchers
- assert len(v.code) == 14 # The code is not modified
- else:
- # New vouchers
- assert len(v.code) == 12
- assert v.start_datetime == datetime.datetime(2021, 3, 1, tzinfo=tzinfo)
- assert v.end_datetime == datetime.datetime(2021, 3, 31, tzinfo=tzinfo)
- assert v.usage == Voucher.SINGLE_USE
- assert list(v.offers.all()) == new_offers
|