Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

test_user.py 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. from django.core import mail
  2. from django.urls import reverse, reverse_lazy
  3. from django.utils.translation import gettext_lazy as _
  4. from webtest import AppError
  5. from oscar.apps.customer.models import ProductAlert
  6. from oscar.core.compat import get_user_model
  7. from oscar.test.factories import ProductAlertFactory, UserFactory
  8. from oscar.test.testcases import WebTestCase
  9. User = get_user_model()
  10. class IndexViewTests(WebTestCase):
  11. is_staff = True
  12. active_users_ids = []
  13. inactive_users_ids = []
  14. csrf_checks = False
  15. def setUp(self):
  16. super().setUp()
  17. for i in range(1, 25):
  18. UserFactory(is_active=True)
  19. for i in range(1, 25):
  20. UserFactory(is_active=False)
  21. user_queryset = User.objects.all()
  22. self.active_users_ids = user_queryset.filter(is_active=True).values_list('id', flat=True)
  23. self.inactive_users_ids = user_queryset.filter(is_active=False).values_list('id', flat=True)
  24. def test_user_list_view(self):
  25. response = self.get(reverse('dashboard:users-index'))
  26. self.assertInContext(response, 'users')
  27. def test_make_active(self):
  28. params = {'action': 'make_active',
  29. 'selected_user': self.inactive_users_ids}
  30. response = self.post(reverse('dashboard:users-index'), params=params)
  31. ex_inactive = User.objects.get(id=self.inactive_users_ids[10])
  32. self.assertIsRedirect(response)
  33. self.assertTrue(ex_inactive.is_active)
  34. def test_make_inactive(self):
  35. params = {'action': 'make_inactive',
  36. 'selected_user': self.active_users_ids}
  37. response = self.post(reverse('dashboard:users-index'), params=params)
  38. ex_active = User.objects.get(id=self.active_users_ids[10])
  39. self.assertIsRedirect(response)
  40. self.assertFalse(ex_active.is_active)
  41. class DetailViewTests(WebTestCase):
  42. is_staff = True
  43. def test_user_detail_view(self):
  44. response = self.get(
  45. reverse('dashboard:user-detail', kwargs={'pk': self.user.pk}))
  46. self.assertInContext(response, 'user')
  47. self.assertIsOk(response)
  48. class TestDetailViewForStaffUser(WebTestCase):
  49. is_staff = True
  50. def setUp(self):
  51. self.customer = UserFactory(
  52. username='jane', email='jane@example.org', password='password')
  53. super().setUp()
  54. def test_password_reset_url_only_available_via_post(self):
  55. try:
  56. reset_url = reverse(
  57. 'dashboard:user-password-reset',
  58. kwargs={'pk': self.customer.id}
  59. )
  60. self.get(reset_url)
  61. except AppError as e:
  62. self.assertIn('405', e.args[0])
  63. def test_admin_can_reset_user_passwords(self):
  64. customer_page_url = reverse(
  65. 'dashboard:user-detail',
  66. kwargs={'pk': self.customer.id}
  67. )
  68. customer_page = self.get(customer_page_url)
  69. reset_form = customer_page.forms['password_reset_form']
  70. response = reset_form.submit()
  71. # Check that the staff user is redirected back to the customer page
  72. self.assertRedirects(response, customer_page_url)
  73. # Check that the reset email has been sent
  74. self.assertEqual(len(mail.outbox), 1)
  75. self.assertIn("Resetting your password", mail.outbox[0].subject)
  76. # Check that success message shows up
  77. self.assertContains(
  78. response.follow(),
  79. _("A password reset email has been sent")
  80. )
  81. class SearchTests(WebTestCase):
  82. is_staff = True
  83. url = reverse_lazy('dashboard:users-index')
  84. def setUp(self):
  85. UserFactory(
  86. username='lars', email='lars@example.org', first_name='Lars', last_name='van der Berg')
  87. UserFactory(
  88. username='owen', email='owen@example.org', first_name='Owen', last_name='Davies')
  89. UserFactory(
  90. username='robalan', email='robalan@example.org', first_name='Rob Alan', last_name='Lewis'
  91. )
  92. super().setUp()
  93. def _search_by_form_args(self, form_args):
  94. response = self.get(self.url)
  95. search_form = response.forms[0]
  96. for field_name, val in form_args.items():
  97. search_form[field_name] = val
  98. search_response = search_form.submit('search')
  99. data = search_response.context['users'].data
  100. return data
  101. def test_user_name_2_parts(self):
  102. data = self._search_by_form_args({'name': 'Owen Davies'})
  103. self.assertEqual(len(data), 1)
  104. self.assertEqual(data[0].email, 'owen@example.org')
  105. self.assertEqual(data[0].first_name, 'Owen')
  106. self.assertEqual(data[0].last_name, 'Davies')
  107. def test_user_name_3_parts(self):
  108. data = self._search_by_form_args({'name': 'Rob Alan Lewis'})
  109. self.assertEqual(len(data), 1)
  110. self.assertEqual(data[0].email, 'robalan@example.org')
  111. self.assertEqual(data[0].first_name, 'Rob Alan')
  112. self.assertEqual(data[0].last_name, 'Lewis')
  113. def test_user_name_4_parts(self):
  114. data = self._search_by_form_args({'name': 'Lars van der Berg'})
  115. self.assertEqual(len(data), 1)
  116. self.assertEqual(data[0].email, 'lars@example.org')
  117. self.assertEqual(data[0].first_name, 'Lars')
  118. self.assertEqual(data[0].last_name, 'van der Berg')
  119. class ProductAlertListViewTestCase(WebTestCase):
  120. is_staff = True
  121. def test_list_view_get_queryset_ordering(self):
  122. ProductAlertFactory.create_batch(3)
  123. response = self.get(reverse('dashboard:user-alert-list'))
  124. self.assertEqual(
  125. list(response.context['alerts']),
  126. list(ProductAlert.objects.order_by('-date_created'))
  127. )
  128. def test_list_view_status_filtering(self):
  129. ProductAlertFactory.create_batch(3, status=ProductAlert.CANCELLED)
  130. ProductAlertFactory.create_batch(2, status=ProductAlert.ACTIVE)
  131. response = self.get(reverse('dashboard:user-alert-list'), params={'status': ProductAlert.ACTIVE})
  132. self.assertEqual(len(response.context['alerts']), 2)