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.

range_tests.py 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. from django.contrib.messages.constants import SUCCESS, WARNING
  2. from django.core.urlresolvers import reverse
  3. from django.test import TestCase
  4. from oscar.apps.dashboard.ranges import forms
  5. from oscar.apps.offer.models import Range, RangeProductFileUpload
  6. from oscar.test.factories import create_product
  7. from oscar.test.testcases import WebTestCase
  8. from webtest.forms import Upload
  9. class RangeProductFormTests(TestCase):
  10. def setUp(self):
  11. self.range = Range.objects.create(name='dummy')
  12. def tearDown(self):
  13. Range.objects.all().delete()
  14. def submit_form(self, data):
  15. return forms.RangeProductForm(self.range, data)
  16. def test_either_query_or_file_must_be_submitted(self):
  17. form = self.submit_form({'query': ''})
  18. self.assertFalse(form.is_valid())
  19. def test_non_match_becomes_error(self):
  20. form = self.submit_form({'query': '123123'})
  21. self.assertFalse(form.is_valid())
  22. def test_matching_query_is_valid(self):
  23. create_product(partner_sku='123123')
  24. form = self.submit_form({'query': '123123'})
  25. self.assertTrue(form.is_valid())
  26. def test_passing_form_return_product_list(self):
  27. product = create_product(partner_sku='123123')
  28. form = self.submit_form({'query': '123123'})
  29. form.is_valid()
  30. self.assertEqual(1, len(form.get_products()))
  31. self.assertEqual(product.id, form.get_products()[0].id)
  32. def test_missing_skus_are_available(self):
  33. create_product(partner_sku='123123')
  34. form = self.submit_form({'query': '123123, 123xxx'})
  35. form.is_valid()
  36. self.assertEqual(1, len(form.get_missing_skus()))
  37. self.assertTrue('123xxx' in form.get_missing_skus())
  38. def test_only_dupes_is_invalid(self):
  39. product = create_product(partner_sku='123123')
  40. self.range.add_product(product)
  41. form = self.submit_form({'query': '123123'})
  42. self.assertFalse(form.is_valid())
  43. def test_dupe_skus_are_available(self):
  44. product = create_product(partner_sku='123123')
  45. create_product(partner_sku='123124')
  46. self.range.add_product(product)
  47. form = self.submit_form({'query': '123123, 123124'})
  48. self.assertTrue(form.is_valid())
  49. self.assertTrue('123123' in form.get_duplicate_skus())
  50. class RangeProductViewTest(WebTestCase):
  51. is_staff = True
  52. def setUp(self):
  53. super(RangeProductViewTest, self).setUp()
  54. self.range = Range.objects.create(name='dummy')
  55. self.url = reverse('dashboard:range-products', args=(self.range.id,))
  56. self.product1 = create_product(
  57. title='Product 1', partner_sku='123123', partner_name='Partner 1'
  58. )
  59. self.product2 = create_product(
  60. title='Product 2', partner_sku='123123', partner_name='Partner 2'
  61. )
  62. self.product3 = create_product(partner_sku='456')
  63. self.product4 = create_product(partner_sku='789')
  64. def test_upload_file_with_skus(self):
  65. range_products_page = self.get(self.url)
  66. form = range_products_page.form
  67. form['file_upload'] = Upload('new_skus.txt', b'456')
  68. form.submit().follow()
  69. all_products = self.range.all_products()
  70. self.assertEqual(len(all_products), 1)
  71. self.assertTrue(self.product3 in all_products)
  72. range_product_file_upload = RangeProductFileUpload.objects.get()
  73. self.assertEqual(range_product_file_upload.range, self.range)
  74. self.assertEqual(range_product_file_upload.num_new_skus, 1)
  75. self.assertEqual(range_product_file_upload.status, RangeProductFileUpload.PROCESSED)
  76. self.assertEqual(range_product_file_upload.size, 3)
  77. def test_dupe_skus_warning(self):
  78. self.range.add_product(self.product3)
  79. range_products_page = self.get(self.url)
  80. form = range_products_page.forms[0]
  81. form['query'] = '456'
  82. response = form.submit()
  83. self.assertEqual(list(response.context['messages']), [])
  84. self.assertEqual(
  85. response.context['form'].errors['query'],
  86. ['The products with SKUs or UPCs matching 456 are already in this range']
  87. )
  88. form = response.forms[0]
  89. form['query'] = '456, 789'
  90. response = form.submit().follow()
  91. messages = list(response.context['messages'])
  92. self.assertEqual(len(messages), 2)
  93. self.assertEqual(messages[0].level, SUCCESS)
  94. self.assertEqual(messages[0].message, '1 product added to range')
  95. self.assertEqual(messages[1].level, WARNING)
  96. self.assertEqual(
  97. messages[1].message,
  98. 'The products with SKUs or UPCs matching 456 are already in this range'
  99. )
  100. def test_missing_skus_warning(self):
  101. range_products_page = self.get(self.url)
  102. form = range_products_page.form
  103. form['query'] = '321'
  104. response = form.submit()
  105. self.assertEqual(list(response.context['messages']), [])
  106. self.assertEqual(
  107. response.context['form'].errors['query'],
  108. ['No products exist with a SKU or UPC matching 321']
  109. )
  110. form = range_products_page.form
  111. form['query'] = '456, 321'
  112. response = form.submit().follow()
  113. messages = list(response.context['messages'])
  114. self.assertEqual(len(messages), 2)
  115. self.assertEqual(messages[0].level, SUCCESS)
  116. self.assertEqual(messages[0].message, '1 product added to range')
  117. self.assertEqual(messages[1].level, WARNING)
  118. self.assertEqual(
  119. messages[1].message, 'No product(s) were found with SKU or UPC matching 321'
  120. )
  121. def test_same_skus_within_different_products_warning_query(self):
  122. range_products_page = self.get(self.url)
  123. form = range_products_page.form
  124. form['query'] = '123123'
  125. response = form.submit().follow()
  126. messages = list(response.context['messages'])
  127. self.assertEqual(len(messages), 2)
  128. self.assertEqual(messages[1].level, WARNING)
  129. self.assertEqual(
  130. messages[1].message, 'There are more than one product with SKU 123123'
  131. )
  132. def test_same_skus_within_different_products_warning_file_upload(self):
  133. range_products_page = self.get(self.url)
  134. form = range_products_page.form
  135. form['file_upload'] = Upload('skus.txt', b'123123')
  136. response = form.submit().follow()
  137. messages = list(response.context['messages'])
  138. self.assertEqual(len(messages), 2)
  139. self.assertEqual(messages[1].level, WARNING)
  140. self.assertEqual(
  141. messages[1].message, 'There are more than one product with SKU 123123'
  142. )