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

test_offer.py 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. from django.urls import reverse
  2. from django.utils import timezone
  3. from oscar.test import testcases, factories
  4. from oscar.apps.offer import models
  5. class TestAnAdmin(testcases.WebTestCase):
  6. # New version of offer tests buy using WebTest
  7. is_staff = True
  8. def setUp(self):
  9. super().setUp()
  10. self.range = models.Range.objects.create(
  11. name="All products", includes_all_products=True)
  12. def test_can_create_an_offer(self):
  13. list_page = self.get(reverse('dashboard:offer-list'))
  14. metadata_page = list_page.click('Create new offer')
  15. metadata_form = metadata_page.form
  16. metadata_form['name'] = "Test offer"
  17. benefit_page = metadata_form.submit().follow()
  18. benefit_form = benefit_page.form
  19. benefit_form['range'] = self.range.id
  20. benefit_form['type'] = "Percentage"
  21. benefit_form['value'] = "25"
  22. condition_page = benefit_form.submit().follow()
  23. condition_form = condition_page.form
  24. condition_form['range'] = self.range.id
  25. condition_form['type'] = "Count"
  26. condition_form['value'] = "3"
  27. restrictions_page = condition_form.submit().follow()
  28. restrictions_page.form.submit()
  29. offers = models.ConditionalOffer.objects.all()
  30. self.assertEqual(1, len(offers))
  31. offer = offers[0]
  32. self.assertEqual("Test offer", offer.name)
  33. self.assertEqual(3, offer.condition.value)
  34. self.assertEqual(25, offer.benefit.value)
  35. def test_offer_list_page(self):
  36. offer = factories.create_offer(name="Offer A")
  37. list_page = self.get(reverse('dashboard:offer-list'))
  38. form = list_page.forms[0]
  39. form['name'] = "I do not exist"
  40. res = form.submit()
  41. self.assertTrue("No offers found" in res.text)
  42. form['name'] = "Offer A"
  43. res = form.submit()
  44. self.assertFalse("No offers found" in res.text)
  45. form['is_active'] = True
  46. res = form.submit()
  47. self.assertFalse("No offers found" in res.text)
  48. yesterday = timezone.now() - timezone.timedelta(days=1)
  49. offer.end_datetime = yesterday
  50. offer.save()
  51. form['is_active'] = True
  52. res = form.submit()
  53. self.assertTrue("No offers found" in res.text)
  54. def test_can_update_an_existing_offer(self):
  55. factories.create_offer(name="Offer A")
  56. list_page = self.get(reverse('dashboard:offer-list'))
  57. detail_page = list_page.click('Offer A')
  58. metadata_page = detail_page.click(linkid="edit_metadata")
  59. metadata_form = metadata_page.form
  60. metadata_form['name'] = "Offer A+"
  61. benefit_page = metadata_form.submit().follow()
  62. benefit_form = benefit_page.form
  63. condition_page = benefit_form.submit().follow()
  64. condition_form = condition_page.form
  65. restrictions_page = condition_form.submit().follow()
  66. restrictions_page.form.submit()
  67. models.ConditionalOffer.objects.get(name="Offer A+")
  68. def test_can_update_an_existing_offer_save_directly(self):
  69. # see if we can save the offer directly without completing all
  70. # steps
  71. offer = factories.create_offer(name="Offer A")
  72. name_and_description_page = self.get(
  73. reverse('dashboard:offer-metadata', kwargs={'pk': offer.pk}))
  74. res = name_and_description_page.form.submit('save').follow()
  75. self.assertEqual(200, res.status_code)
  76. def test_can_jump_to_intermediate_step_for_existing_offer(self):
  77. offer = factories.create_offer()
  78. url = reverse('dashboard:offer-condition',
  79. kwargs={'pk': offer.id})
  80. self.assertEqual(200, self.get(url).status_code)
  81. def test_cannot_jump_to_intermediate_step(self):
  82. for url_name in ('dashboard:offer-condition',
  83. 'dashboard:offer-benefit',
  84. 'dashboard:offer-restrictions'):
  85. response = self.get(reverse(url_name))
  86. self.assertEqual(302, response.status_code)
  87. def test_can_suspend_an_offer(self):
  88. # Create an offer
  89. offer = factories.create_offer()
  90. self.assertFalse(offer.is_suspended)
  91. detail_page = self.get(reverse('dashboard:offer-detail',
  92. kwargs={'pk': offer.pk}))
  93. form = detail_page.forms['status_form']
  94. form.submit('suspend')
  95. offer.refresh_from_db()
  96. self.assertTrue(offer.is_suspended)
  97. def test_can_reinstate_a_suspended_offer(self):
  98. # Create a suspended offer
  99. offer = factories.create_offer()
  100. offer.suspend()
  101. self.assertTrue(offer.is_suspended)
  102. detail_page = self.get(reverse('dashboard:offer-detail',
  103. kwargs={'pk': offer.pk}))
  104. form = detail_page.forms['status_form']
  105. form.submit('unsuspend')
  106. offer.refresh_from_db()
  107. self.assertFalse(offer.is_suspended)
  108. def test_can_change_offer_priority(self):
  109. offer = factories.create_offer()
  110. restrictions_page = self.get(reverse('dashboard:offer-restrictions', kwargs={'pk': offer.pk}))
  111. restrictions_page.form['priority'] = '12'
  112. restrictions_page.form.submit()
  113. offer.refresh_from_db()
  114. self.assertEqual(offer.priority, 12)
  115. def test_jump_back_to_incentive_step_for_new_offer(self):
  116. list_page = self.get(reverse('dashboard:offer-list'))
  117. metadata_page = list_page.click('Create new offer')
  118. metadata_form = metadata_page.form
  119. metadata_form['name'] = "Test offer"
  120. benefit_page = metadata_form.submit().follow()
  121. benefit_form = benefit_page.form
  122. benefit_form['range'] = self.range.id
  123. benefit_form['type'] = "Percentage"
  124. benefit_form['value'] = "25"
  125. benefit_form.submit()
  126. benefit_page = self.get(reverse('dashboard:offer-benefit'))
  127. # Accessing through context because WebTest form does not include an 'errors' field
  128. benefit_form = benefit_page.context['form']
  129. self.assertFalse('range' in benefit_form.errors)
  130. self.assertEqual(len(benefit_form.errors), 0)
  131. def test_jump_back_to_condition_step_for_new_offer(self):
  132. list_page = self.get(reverse('dashboard:offer-list'))
  133. metadata_page = list_page.click('Create new offer')
  134. metadata_form = metadata_page.form
  135. metadata_form['name'] = "Test offer"
  136. benefit_page = metadata_form.submit().follow()
  137. benefit_form = benefit_page.form
  138. benefit_form['range'] = self.range.id
  139. benefit_form['type'] = "Percentage"
  140. benefit_form['value'] = "25"
  141. condition_page = benefit_form.submit().follow()
  142. condition_form = condition_page.form
  143. condition_form['range'] = self.range.id
  144. condition_form['type'] = "Count"
  145. condition_form['value'] = "3"
  146. condition_form.submit()
  147. condition_page = self.get(reverse('dashboard:offer-condition'))
  148. self.assertFalse('range' in condition_page.errors)
  149. self.assertEqual(len(condition_page.errors), 0)
  150. def test_jump_to_incentive_step_for_existing_offer(self):
  151. offer = factories.create_offer()
  152. url = reverse('dashboard:offer-benefit', kwargs={'pk': offer.id})
  153. condition_page = self.get(url)
  154. self.assertFalse('range' in condition_page.errors)
  155. self.assertEqual(len(condition_page.errors), 0)
  156. def test_jump_to_condition_step_for_existing_offer(self):
  157. offer = factories.create_offer()
  158. url = reverse('dashboard:offer-condition', kwargs={'pk': offer.id})
  159. condition_page = self.get(url)
  160. self.assertFalse('range' in condition_page.errors)
  161. self.assertEqual(len(condition_page.errors), 0)