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_user.py 5.1KB

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