| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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
|