You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_voucher_form.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from datetime import timedelta
  2. import pytest
  3. from django import test
  4. from django.utils import timezone
  5. from oscar.apps.dashboard.vouchers import forms
  6. from oscar.test.factories.offer import RangeFactory
  7. class TestVoucherForm(test.TestCase):
  8. def test_doesnt_crash_on_empty_date_fields(self):
  9. """
  10. There was a bug fixed in 02b3644 where the voucher form would raise an
  11. exception (instead of just failing validation) when being called with
  12. empty fields. This tests exists to prevent a regression.
  13. """
  14. data = {
  15. 'code': '',
  16. 'name': '',
  17. 'start_date': '',
  18. 'end_date': '',
  19. 'benefit_range': '',
  20. 'benefit_type': 'Percentage',
  21. 'usage': 'Single use',
  22. }
  23. form = forms.VoucherForm(data=data)
  24. try:
  25. form.is_valid()
  26. except Exception as e:
  27. import traceback
  28. self.fail(
  29. "Exception raised while validating voucher form: %s\n\n%s" % (
  30. e.message, traceback.format_exc()))
  31. @pytest.mark.django_db
  32. class TestVoucherSetForm:
  33. def test_valid_form(self):
  34. a_range = RangeFactory(includes_all_products=True)
  35. start = timezone.now()
  36. end = start + timedelta(days=1)
  37. data = {
  38. 'name': 'test',
  39. 'code_length': 12,
  40. 'description': 'test',
  41. 'start_datetime': start,
  42. 'end_datetime': end,
  43. 'count': 10,
  44. 'benefit_range': a_range.pk,
  45. 'benefit_type': 'Percentage',
  46. 'benefit_value': 10,
  47. }
  48. form = forms.VoucherSetForm(data=data)
  49. assert form.is_valid()
  50. instance = form.save()
  51. assert instance.count == instance.vouchers.count()
  52. assert instance.start_datetime == start
  53. assert instance.end_datetime == end