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.

test_wishlists.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase, override_settings
  3. from django.urls import reverse
  4. from oscar.apps.wishlists.models import WishList, WishListSharedEmail
  5. from oscar.test.factories import WishListFactory
  6. from oscar.test.testcases import WebTestCase
  7. User = get_user_model()
  8. class WishListPrivateTestCase(TestCase):
  9. def setUp(self):
  10. super().setUp()
  11. self.user = User.objects.create(
  12. email="test@example.com", password="testpassword"
  13. )
  14. self.wishlist = WishListFactory(owner=self.user, visibility=WishList.PRIVATE)
  15. self.wishlist_shared_url = self.wishlist.get_shared_url()
  16. def test_private_wishlist_detail_owner(self):
  17. self.client.force_login(self.user)
  18. response = self.client.get(self.wishlist_shared_url)
  19. self.assertEqual(response.status_code, 200)
  20. def test_private_wishlist_detail_logged_out_user(self):
  21. response = self.client.get(self.wishlist_shared_url)
  22. self.assertEqual(response.status_code, 403)
  23. def test_private_wishlist_detail_shared_email(self):
  24. WishListSharedEmail.objects.create(
  25. wishlist=self.wishlist, email="test2@example.com"
  26. )
  27. response = self.client.get(self.wishlist_shared_url)
  28. self.assertEqual(
  29. response.status_code,
  30. 403,
  31. "The response should be 403 because the visibility is set to private.",
  32. )
  33. def test_private_wishlist_is_sharable(self):
  34. self.assertFalse(self.wishlist.is_shareable)
  35. class WishListPublicTestCase(TestCase):
  36. def setUp(self):
  37. super().setUp()
  38. self.user = User.objects.create(
  39. email="test@example.com", password="testpassword"
  40. )
  41. self.wishlist = WishListFactory(owner=self.user, visibility=WishList.PUBLIC)
  42. self.wishlist_shared_url = self.wishlist.get_shared_url()
  43. def test_public_wishlist_detail_owner(self):
  44. self.client.force_login(self.user)
  45. response = self.client.get(self.wishlist_shared_url)
  46. self.assertEqual(response.status_code, 200)
  47. def test_public_wishlist_detail_logged_out_user(self):
  48. response = self.client.get(self.wishlist_shared_url)
  49. self.assertEqual(response.status_code, 200)
  50. def test_public_wishlist_detail_shared_email(self):
  51. WishListSharedEmail.objects.create(
  52. wishlist=self.wishlist, email="test2@example.com"
  53. )
  54. response = self.client.get(self.wishlist_shared_url)
  55. self.assertEqual(response.status_code, 200)
  56. def test_public_wishlist_is_sharable(self):
  57. self.assertTrue(self.wishlist.is_shareable)
  58. class WishListSharedTestCase(WebTestCase):
  59. def setUp(self):
  60. super().setUp()
  61. self.wishlist_user = User.objects.create(
  62. email="test@example.com", password="testpassword"
  63. )
  64. self.wishlist = WishListFactory(
  65. owner=self.wishlist_user, visibility=WishList.SHARED
  66. )
  67. self.wishlist_shared_url = self.wishlist.get_shared_url()
  68. def test_shared_wishlist_detail_owner(self):
  69. self.client.force_login(self.wishlist_user)
  70. response = self.client.get(self.wishlist_shared_url)
  71. self.assertEqual(response.status_code, 200)
  72. def test_shared_wishlist_detail_logged_out_user(self):
  73. response = self.client.get(self.wishlist_shared_url)
  74. self.assertEqual(response.status_code, 302)
  75. def test_shared_wishlist_detail_shared_email(self):
  76. WishListSharedEmail.objects.create(
  77. wishlist=self.wishlist, email="test2@example.com"
  78. )
  79. user = User.objects.create(
  80. email="test2@example.com", password="testpassword", username="test2"
  81. )
  82. self.client.force_login(user)
  83. response = self.client.get(self.wishlist_shared_url)
  84. self.assertEqual(response.status_code, 200)
  85. def test_shared_wishlist_detail_non_shared_logged_in_user(self):
  86. # Create and set a user that has no access to the wishlist
  87. non_shared_user = User.objects.create(
  88. email="anotheruser@example.com",
  89. password="testpassword",
  90. username="anotheruser",
  91. )
  92. self.client.force_login(non_shared_user)
  93. response = self.client.get(self.wishlist_shared_url)
  94. self.assertEqual(response.status_code, 403)
  95. @override_settings(LOGIN_URL=reverse("customer:login"))
  96. def test_shared_wishlist_detail_non_authenticated_user(self):
  97. user = User.objects.create(email="test2@example.com", username="test2")
  98. user.set_password("testpassword")
  99. user.save()
  100. WishListSharedEmail.objects.create(
  101. wishlist=self.wishlist, email="test2@example.com"
  102. )
  103. # Set user to None (non authenticated user)
  104. self.user = None
  105. response = self.get(self.wishlist_shared_url)
  106. self.assertIsRedirect(response)
  107. form = response.follow().forms["login_form"]
  108. form["login-username"] = "test2@example.com"
  109. form["login-password"] = "testpassword"
  110. response = form.submit("login_submit").follow()
  111. self.assertEqual(response.request.path, self.wishlist_shared_url)
  112. def test_shared_wishlist_is_sharable(self):
  113. self.assertTrue(self.wishlist.is_shareable)