Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

test_forms.py 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import datetime
  2. import pytest
  3. from django.utils import timezone
  4. from django.utils.datastructures import MultiValueDict
  5. from oscar.apps.dashboard.vouchers import forms
  6. from oscar.core.loading import get_model
  7. from oscar.test.factories.offer import (
  8. BenefitFactory, ConditionalOfferFactory, ConditionFactory, RangeFactory)
  9. from oscar.test.factories.voucher import VoucherSetFactory
  10. ConditionalOffer = get_model('offer', 'ConditionalOffer')
  11. Voucher = get_model('voucher', 'Voucher')
  12. @pytest.mark.django_db
  13. def test_voucher_set_form_create():
  14. a_range = RangeFactory(
  15. includes_all_products=True
  16. )
  17. offer = ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER,
  18. benefit=BenefitFactory(range=a_range),
  19. condition=ConditionFactory(range=a_range, value=1))
  20. data = MultiValueDict({
  21. 'name': ['10% Discount'],
  22. 'code_length': ['10'],
  23. 'count': ['10'],
  24. 'description': ['This is a 10% discount for mailing X'],
  25. 'start_datetime': ['2014-10-01'],
  26. 'end_datetime': ['2018-10-01'],
  27. 'usage': [Voucher.MULTI_USE],
  28. 'offers': [offer.pk],
  29. })
  30. form = forms.VoucherSetForm(data)
  31. assert form.is_valid(), form.errors
  32. voucher_set = form.save()
  33. assert voucher_set.vouchers.count() == 10
  34. @pytest.mark.django_db
  35. def test_voucher_set_form_update_with_unchanged_count():
  36. tzinfo = timezone.get_current_timezone()
  37. voucher_set = VoucherSetFactory(name="Dummy name",
  38. count=5,
  39. code_length=12,
  40. description="Dummy description",
  41. start_datetime=datetime.datetime(2021, 2, 1, tzinfo=tzinfo),
  42. end_datetime=datetime.datetime(2021, 2, 28, tzinfo=tzinfo))
  43. voucher = voucher_set.vouchers.first()
  44. assert voucher.usage == Voucher.MULTI_USE
  45. new_offers = [ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER),
  46. ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)]
  47. data = {
  48. 'name': "New name",
  49. 'code_length': 10,
  50. 'description': "New description",
  51. 'start_datetime': datetime.datetime(2021, 3, 1, tzinfo=tzinfo),
  52. 'end_datetime': datetime.datetime(2021, 3, 31, tzinfo=tzinfo),
  53. 'count': voucher_set.count,
  54. 'usage': Voucher.SINGLE_USE,
  55. 'offers': new_offers,
  56. }
  57. form = forms.VoucherSetForm(data, instance=voucher_set)
  58. assert form.is_valid(), form.errors
  59. voucher_set = form.save()
  60. assert voucher_set.vouchers.count() == 5
  61. for i, v in enumerate(voucher_set.vouchers.order_by('date_created')):
  62. assert v.name == "New name - %d" % (i + 1)
  63. assert len(v.code) == 14 # The code is not modified
  64. assert v.start_datetime == datetime.datetime(2021, 3, 1, tzinfo=tzinfo)
  65. assert v.end_datetime == datetime.datetime(2021, 3, 31, tzinfo=tzinfo)
  66. assert v.usage == Voucher.SINGLE_USE
  67. assert list(v.offers.all()) == new_offers
  68. @pytest.mark.django_db
  69. def test_voucher_set_form_update_with_changed_count():
  70. tzinfo = timezone.get_current_timezone()
  71. voucher_set = VoucherSetFactory(name="Dummy name",
  72. count=5,
  73. code_length=12,
  74. description="Dummy description",
  75. start_datetime=datetime.datetime(2021, 2, 1, tzinfo=tzinfo),
  76. end_datetime=datetime.datetime(2021, 2, 28, tzinfo=tzinfo))
  77. voucher = voucher_set.vouchers.first()
  78. assert voucher.usage == Voucher.MULTI_USE
  79. new_offers = [ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER),
  80. ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER)]
  81. data = {
  82. 'name': "New name",
  83. 'code_length': 10,
  84. 'description': "New description",
  85. 'start_datetime': datetime.datetime(2021, 3, 1, tzinfo=tzinfo),
  86. 'end_datetime': datetime.datetime(2021, 3, 31, tzinfo=tzinfo),
  87. 'count': 10,
  88. 'usage': Voucher.SINGLE_USE,
  89. 'offers': new_offers,
  90. }
  91. form = forms.VoucherSetForm(data, instance=voucher_set)
  92. assert form.is_valid(), form.errors
  93. voucher_set = form.save()
  94. voucher_set.refresh_from_db()
  95. assert voucher_set.count == 10 # "count" is updated
  96. assert voucher_set.vouchers.count() == 10
  97. for i, v in enumerate(voucher_set.vouchers.order_by('date_created')):
  98. assert v.name == "New name - %d" % (i + 1)
  99. if i < 5:
  100. # Original vouchers
  101. assert len(v.code) == 14 # The code is not modified
  102. else:
  103. # New vouchers
  104. assert len(v.code) == 12
  105. assert v.start_datetime == datetime.datetime(2021, 3, 1, tzinfo=tzinfo)
  106. assert v.end_datetime == datetime.datetime(2021, 3, 31, tzinfo=tzinfo)
  107. assert v.usage == Voucher.SINGLE_USE
  108. assert list(v.offers.all()) == new_offers