Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

test_wishlists.py 9.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. # -*- coding: utf-8 -*-
  2. from django.urls import reverse_lazy
  3. from oscar.core.loading import get_model
  4. from oscar.test.factories import WishListFactory, create_product
  5. from oscar.test.testcases import WebTestCase
  6. WishList = get_model('wishlists', 'WishList')
  7. class WishListTestMixin(object):
  8. is_anonymous = False
  9. def setUp(self):
  10. super().setUp()
  11. self.product = create_product()
  12. class TestProductDetailPage(WishListTestMixin, WebTestCase):
  13. def test_allows_a_product_to_be_added_to_wishlist(self):
  14. # Click add to wishlist button
  15. detail_page = self.get(self.product.get_absolute_url())
  16. form = detail_page.forms['add_to_wishlist_form']
  17. response = form.submit()
  18. self.assertIsRedirect(response)
  19. # Check a wishlist has been created
  20. wishlists = self.user.wishlists.all()
  21. self.assertEqual(1, len(wishlists))
  22. lines = wishlists[0].lines.all()
  23. self.assertEqual(1, len(lines))
  24. self.assertEqual(self.product, lines[0].product)
  25. class TestMoveProductToAnotherWishList(WishListTestMixin, WebTestCase):
  26. def setUp(self):
  27. super().setUp()
  28. self.wishlist1 = WishListFactory(owner=self.user)
  29. self.wishlist2 = WishListFactory(owner=self.user)
  30. def test_move_product_to_another_wishlist_already_containing_it(self):
  31. self.wishlist1.add(self.product)
  32. line1 = self.wishlist1.lines.get(product=self.product)
  33. self.wishlist2.add(self.product)
  34. url = reverse_lazy('customer:wishlists-move-product-to-another', kwargs={'key': self.wishlist1.key,
  35. 'line_pk': line1.pk,
  36. 'to_key': self.wishlist2.key})
  37. self.get(url)
  38. self.assertEqual(self.wishlist1.lines.filter(product=self.product).count(), 1)
  39. self.assertEqual(self.wishlist2.lines.filter(product=self.product).count(), 1)
  40. def test_move_product_to_another_wishlist(self):
  41. self.wishlist1.add(self.product)
  42. line1 = self.wishlist1.lines.get(product=self.product)
  43. url = reverse_lazy('customer:wishlists-move-product-to-another', kwargs={'key': self.wishlist1.key,
  44. 'line_pk': line1.pk,
  45. 'to_key': self.wishlist2.key})
  46. self.get(url)
  47. self.assertEqual(self.wishlist1.lines.filter(product=self.product).count(), 0)
  48. self.assertEqual(self.wishlist2.lines.filter(product=self.product).count(), 1)
  49. # Test WishList doesnt contain line and return 404
  50. self.assertEqual(self.get(url, expect_errors=True).status_code, 404)
  51. class TestWishListRemoveProduct(WishListTestMixin, WebTestCase):
  52. def setUp(self):
  53. super().setUp()
  54. self.wishlist = WishListFactory(owner=self.user)
  55. self.wishlist.add(self.product)
  56. self.line = self.wishlist.lines.get(product=self.product)
  57. def test_remove_wishlist_line(self):
  58. delete_wishlist_line_url = reverse_lazy(
  59. 'customer:wishlists-remove-product', kwargs={'key': self.wishlist.key, 'line_pk': self.line.pk}
  60. )
  61. self.get(delete_wishlist_line_url).forms[0].submit()
  62. # Test WishList doesnt contain line and return 404
  63. self.assertEqual(self.get(delete_wishlist_line_url, expect_errors=True).status_code, 404)
  64. def test_remove_wishlist_product(self):
  65. delete_wishlist_product_url = reverse_lazy(
  66. 'customer:wishlists-remove-product', kwargs={'key': self.wishlist.key, 'product_pk': self.line.product.id}
  67. )
  68. self.get(delete_wishlist_product_url).forms[0].submit()
  69. # Test WishList doesnt contain line and return 404
  70. self.assertEqual(self.get(delete_wishlist_product_url, expect_errors=True).status_code, 404)
  71. class TestWishListCreateView(WishListTestMixin, WebTestCase):
  72. def test_create_private_wishlist(self):
  73. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  74. page = self.get(create_wishlist_url)
  75. self.assertEqual(self.user.wishlists.count(), 0)
  76. form = page.form
  77. form["name"] = expected_name = "Private wish list"
  78. form["visibility"] = expected_visibility = WishList.PRIVATE
  79. form.submit()
  80. self.assertEqual(self.user.wishlists.count(), 1)
  81. wishlist = self.user.wishlists.first()
  82. self.assertEqual(wishlist.name, expected_name)
  83. self.assertEqual(wishlist.visibility, expected_visibility)
  84. def test_create_public_wishlist(self):
  85. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  86. page = self.get(create_wishlist_url)
  87. self.assertEqual(self.user.wishlists.count(), 0)
  88. form = page.form
  89. form["name"] = expected_name = "Public wish list"
  90. form["visibility"] = expected_visibility = WishList.PUBLIC
  91. form.submit()
  92. self.assertEqual(self.user.wishlists.count(), 1)
  93. wishlist = self.user.wishlists.first()
  94. self.assertEqual(wishlist.name, expected_name)
  95. self.assertEqual(wishlist.visibility, expected_visibility)
  96. def test_create_shared_wishlist(self):
  97. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  98. page = self.get(create_wishlist_url)
  99. self.assertEqual(self.user.wishlists.count(), 0)
  100. form = page.form
  101. form["name"] = expected_name = "Shared wish list"
  102. form["visibility"] = expected_visibility = WishList.SHARED
  103. form["shared_emails-0-email"] = shared_email_1 = "test@example.com"
  104. form["shared_emails-1-email"] = shared_email_2 = "test2@example.com"
  105. form.submit()
  106. self.assertEqual(self.user.wishlists.count(), 1)
  107. wishlist = self.user.wishlists.first()
  108. self.assertEqual(wishlist.name, expected_name)
  109. self.assertEqual(wishlist.visibility, expected_visibility)
  110. self.assertEqual(wishlist.shared_emails.count(), 2)
  111. shared_emails = wishlist.shared_emails.filter(email__in=[shared_email_1, shared_email_2])
  112. self.assertEqual(shared_emails.count(), 2)
  113. def test_create_private_wishlist_with_shared_emails(self):
  114. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  115. page = self.get(create_wishlist_url)
  116. form = page.form
  117. form["name"] = "Private wish list"
  118. form["visibility"] = WishList.PRIVATE
  119. form["shared_emails-0-email"] = "test@example.com"
  120. form["shared_emails-1-email"] = "test2@example.com"
  121. response = form.submit().follow()
  122. self.assertTrue("The shared accounts won't be able to access your wishlist "
  123. "because the visiblity is set to private." in response)
  124. def test_create_public_wishlist_with_shared_emails(self):
  125. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  126. page = self.get(create_wishlist_url)
  127. form = page.form
  128. form["name"] = "Public wish list"
  129. form["visibility"] = WishList.PUBLIC
  130. form["shared_emails-0-email"] = "test@example.com"
  131. form["shared_emails-1-email"] = "test2@example.com"
  132. response = form.submit().follow()
  133. self.assertTrue("You have added shared accounts to your wishlist but the visiblity "
  134. "is public, this means everyone with a link has access to it." in response)
  135. def test_create_wishlist_no_name(self):
  136. create_wishlist_url = reverse_lazy("customer:wishlists-create")
  137. page = self.get(create_wishlist_url)
  138. self.assertEqual(self.user.wishlists.count(), 0)
  139. form = page.form
  140. form["name"] = ""
  141. form["visibility"] = WishList.PUBLIC
  142. response = form.submit()
  143. self.assertEqual(self.user.wishlists.count(), 0)
  144. self.assertTrue("This field is required." in response)
  145. class TestWishListUpdateView(WishListTestMixin, WebTestCase):
  146. def setUp(self):
  147. super().setUp()
  148. self.wishlist = WishListFactory(owner=self.user, name="Test wishlist")
  149. def test_change_name(self):
  150. wishlist_update_url = reverse_lazy('customer:wishlists-update', kwargs={'key': self.wishlist.key})
  151. page = self.get(wishlist_update_url)
  152. self.assertEqual(self.wishlist.name, "Test wishlist")
  153. form = page.form
  154. form["name"] = new_wishlist_name = "Changed wishlist name"
  155. form.submit()
  156. self.wishlist.refresh_from_db()
  157. self.assertEqual(self.wishlist.name, new_wishlist_name)
  158. def test_change_visibility(self):
  159. wishlist_update_url = reverse_lazy('customer:wishlists-update', kwargs={'key': self.wishlist.key})
  160. page = self.get(wishlist_update_url)
  161. self.assertEqual(self.wishlist.visibility, WishList.PRIVATE)
  162. form = page.form
  163. form["visibility"] = new_wishlist_visibility = WishList.PUBLIC
  164. form.submit()
  165. self.wishlist.refresh_from_db()
  166. self.assertEqual(self.wishlist.visibility, new_wishlist_visibility)
  167. def test_add_shared_email(self):
  168. wishlist_update_url = reverse_lazy('customer:wishlists-update', kwargs={'key': self.wishlist.key})
  169. page = self.get(wishlist_update_url)
  170. self.assertEqual(self.wishlist.shared_emails.count(), 0)
  171. form = page.form
  172. form["shared_emails-0-email"] = shared_email_1 = "test@example.com"
  173. form["shared_emails-1-email"] = shared_email_2 = "test2@example.com"
  174. form.submit()
  175. self.wishlist.refresh_from_db()
  176. self.assertEqual(self.wishlist.shared_emails.count(), 2)
  177. shared_emails = self.wishlist.shared_emails.filter(email__in=[shared_email_1, shared_email_2])
  178. self.assertEqual(shared_emails.count(), 2)