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 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from django.core.urlresolvers import reverse
  2. from oscar.test import testcases, factories
  3. from oscar.apps.offer import models
  4. class TestAnAdmin(testcases.WebTestCase):
  5. # New version of offer tests buy using WebTest
  6. is_staff = True
  7. def setUp(self):
  8. super(TestAnAdmin, self).setUp()
  9. self.range = models.Range.objects.create(
  10. name="All products", includes_all_products=True)
  11. def test_can_create_an_offer(self):
  12. list_page = self.get(reverse('dashboard:offer-list'))
  13. metadata_page = list_page.click('Create new offer')
  14. metadata_form = metadata_page.form
  15. metadata_form['name'] = "Test offer"
  16. benefit_page = metadata_form.submit().follow()
  17. benefit_form = benefit_page.form
  18. benefit_form['range'] = self.range.id
  19. benefit_form['type'] = "Percentage"
  20. benefit_form['value'] = "25"
  21. condition_page = benefit_form.submit().follow()
  22. condition_form = condition_page.form
  23. condition_form['range'] = self.range.id
  24. condition_form['type'] = "Count"
  25. condition_form['value'] = "3"
  26. restrictions_page = condition_form.submit().follow()
  27. restrictions_page.form.submit()
  28. offers = models.ConditionalOffer.objects.all()
  29. self.assertEqual(1, len(offers))
  30. offer = offers[0]
  31. self.assertEqual("Test offer", offer.name)
  32. self.assertEqual(3, offer.condition.value)
  33. self.assertEqual(25, offer.benefit.value)
  34. def test_can_update_an_existing_offer(self):
  35. factories.create_offer(name="Offer A")
  36. list_page = self.get(reverse('dashboard:offer-list'))
  37. detail_page = list_page.click('Offer A')
  38. metadata_page = detail_page.click(linkid="edit_metadata")
  39. metadata_form = metadata_page.form
  40. metadata_form['name'] = "Offer A+"
  41. benefit_page = metadata_form.submit().follow()
  42. benefit_form = benefit_page.form
  43. condition_page = benefit_form.submit().follow()
  44. condition_form = condition_page.form
  45. restrictions_page = condition_form.submit().follow()
  46. restrictions_page.form.submit()
  47. models.ConditionalOffer.objects.get(name="Offer A+")
  48. def test_can_jump_to_intermediate_step_for_existing_offer(self):
  49. offer = factories.create_offer()
  50. url = reverse('dashboard:offer-condition',
  51. kwargs={'pk': offer.id})
  52. self.assertEqual(200, self.get(url).status_code)
  53. def test_cannot_jump_to_intermediate_step(self):
  54. for url_name in ('dashboard:offer-condition',
  55. 'dashboard:offer-benefit',
  56. 'dashboard:offer-restrictions'):
  57. response = self.get(reverse(url_name))
  58. self.assertEqual(302, response.status_code)
  59. def test_can_suspend_an_offer(self):
  60. # Create an offer
  61. offer = factories.create_offer()
  62. self.assertFalse(offer.is_suspended)
  63. detail_page = self.get(reverse('dashboard:offer-detail',
  64. kwargs={'pk': offer.pk}))
  65. form = detail_page.forms['status_form']
  66. form.submit('suspend')
  67. reloaded_offer = models.ConditionalOffer.objects.get(pk=offer.pk)
  68. self.assertTrue(reloaded_offer.is_suspended)
  69. def test_can_reinstate_a_suspended_offer(self):
  70. # Create a suspended offer
  71. offer = factories.create_offer()
  72. offer.suspend()
  73. self.assertTrue(offer.is_suspended)
  74. detail_page = self.get(reverse('dashboard:offer-detail',
  75. kwargs={'pk': offer.pk}))
  76. form = detail_page.forms['status_form']
  77. form.submit('unsuspend')
  78. reloaded_offer = models.ConditionalOffer.objects.get(pk=offer.pk)
  79. self.assertFalse(reloaded_offer.is_suspended)