Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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)