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.

offer_tests.py 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import datetime
  2. from django.core.urlresolvers import reverse
  3. from django.test import TestCase
  4. from oscar.test import ClientTestCase
  5. from oscar.apps.offer.models import Range, ConditionalOffer, Condition, Benefit
  6. from oscar.apps.dashboard.offers.forms import MetaDataForm
  7. class ViewTests(ClientTestCase):
  8. is_staff = True
  9. def test_pages_exist(self):
  10. urls = [reverse('dashboard:offer-list'),
  11. reverse('dashboard:offer-metadata'),
  12. ]
  13. for url in urls:
  14. self.assertIsOk(self.client.get(url))
  15. class MetadataFormTests(TestCase):
  16. def test_dates_must_be_cronological(self):
  17. start_date = datetime.date(2012, 1, 1)
  18. end_date = datetime.date(2011, 1, 1)
  19. post = {'name': 'dummy',
  20. 'description': 'dummy',
  21. 'start_date': start_date,
  22. 'end_date': end_date,}
  23. form = MetaDataForm(post)
  24. self.assertFalse(form.is_valid())
  25. class OfferCreationTests(ClientTestCase):
  26. is_staff = True
  27. def setUp(self):
  28. super(OfferCreationTests, self).setUp()
  29. self.range = Range.objects.create(name='All products',
  30. includes_all_products=True)
  31. def tearDown(self):
  32. ConditionalOffer.objects.all().delete()
  33. def test_happy_path(self):
  34. # Metadata
  35. response = self.client.post(reverse('dashboard:offer-metadata'),
  36. {'name': 'my offer',
  37. 'description': 'offers are nice',
  38. 'start_date': '2012-01-01',
  39. 'end_date': '2013-01-01'})
  40. self.assertIsRedirect(response, reverse('dashboard:offer-condition'))
  41. # Condition
  42. response = self.client.post(reverse('dashboard:offer-condition'),
  43. {'range': self.range.id,
  44. 'type': 'Count',
  45. 'value': '3',})
  46. self.assertIsRedirect(response, reverse('dashboard:offer-benefit'))
  47. # Benefit
  48. response = self.client.post(reverse('dashboard:offer-benefit'),
  49. {'range': self.range.id,
  50. 'type': 'Multibuy',
  51. 'value': '1',})
  52. self.assertIsRedirect(response, reverse('dashboard:offer-preview'))
  53. # Preview
  54. response = self.client.post(reverse('dashboard:offer-preview'), {})
  55. self.assertIsRedirect(response, reverse('dashboard:offer-list'))
  56. offers = ConditionalOffer.objects.all()
  57. self.assertEqual(1, len(offers))
  58. offer = offers[0]
  59. self.assertEqual('my offer', offer.name)
  60. def test_cannot_jump_to_condition_step(self):
  61. response = self.client.get(reverse('dashboard:offer-condition'))
  62. self.assertIsRedirect(response)
  63. class OfferUpdatingTests(ClientTestCase):
  64. is_staff = True
  65. def setUp(self):
  66. super(OfferUpdatingTests, self).setUp()
  67. self.range = Range.objects.create(name='All products',
  68. includes_all_products=True)
  69. condition = Condition.objects.create(range=self.range,
  70. type='Count',
  71. value=3)
  72. benefit = Benefit.objects.create(range=self.range,
  73. type='Multibuy',
  74. value=1)
  75. start_date = datetime.date(2012, 1, 1)
  76. end_date = datetime.date(2013, 1, 1)
  77. self.offer = ConditionalOffer.objects.create(name='my offer',
  78. description='something',
  79. start_date=start_date,
  80. end_date=end_date,
  81. condition=condition,
  82. benefit=benefit)
  83. def tearDown(self):
  84. ConditionalOffer.objects.all().delete()
  85. def test_happy_path(self):
  86. metadata_url = reverse('dashboard:offer-metadata', kwargs={'pk': self.offer.id})
  87. response = self.client.get(metadata_url)
  88. self.assertTrue('my offer' in response.content)
  89. response = self.client.post(metadata_url,
  90. {'name': 'my new offer',
  91. 'description': 'something',
  92. 'start_date': '2012-01-01',
  93. 'end_date': '2013-01-01'})
  94. self.assertIsRedirect(response)
  95. condition_url = reverse('dashboard:offer-condition', kwargs={'pk': self.offer.id})
  96. response = self.client.post(condition_url,
  97. {'range': self.range.id,
  98. 'type': 'Count',
  99. 'value': '3',})
  100. self.assertIsRedirect(response)
  101. benefit_url = reverse('dashboard:offer-benefit', kwargs={'pk': self.offer.id})
  102. response = self.client.post(benefit_url,
  103. {'range': self.range.id,
  104. 'type': 'Multibuy',
  105. 'value': '1',})
  106. self.assertIsRedirect(response)
  107. preview_url = reverse('dashboard:offer-preview', kwargs={'pk': self.offer.id})
  108. response = self.client.get(preview_url)
  109. self.assertTrue('my new offer' in response.content)
  110. response = self.client.post(preview_url)
  111. self.assertIsRedirect(response)
  112. offer = ConditionalOffer.objects.get(id=self.offer.id)
  113. self.assertEqual('my new offer', offer.name)
  114. def test_can_jump_to_condition_step(self):
  115. response = self.client.get(reverse('dashboard:offer-condition',
  116. kwargs={'pk': self.offer.id}))
  117. self.assertIsOk(response)