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.

user_tests.py 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from django.core.urlresolvers import reverse
  2. from django.core import mail
  3. from django_dynamic_fixture import get
  4. from django.utils.translation import ugettext_lazy as _
  5. from oscar.test.testcases import ClientTestCase, WebTestCase
  6. from oscar.apps.dashboard.users.views import IndexView
  7. from oscar.core.compat import get_user_model
  8. from webtest import AppError
  9. User = get_user_model()
  10. class IndexViewTests(ClientTestCase):
  11. is_staff = True
  12. active_users_ids = []
  13. inactive_users_ids = []
  14. def setUp(self):
  15. super(IndexViewTests, self).setUp()
  16. for i in range(1, 25):
  17. get(User, is_active=True)
  18. for i in range(1, 25):
  19. get(User, 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.client.get(reverse('dashboard:users-index'))
  25. self.assertInContext(response, 'user_list')
  26. self.assertEquals(len(response.context['user_list']), IndexView.paginate_by)
  27. def test_make_active(self):
  28. params = {'action': 'make_active',
  29. 'selected_user': self.inactive_users_ids}
  30. response = self.client.post(reverse('dashboard:users-index'), 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.client.post(reverse('dashboard:users-index'), 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(ClientTestCase):
  42. is_staff = True
  43. def test_user_detail_view(self):
  44. response = self.client.get(reverse('dashboard:user-detail', kwargs={'pk': 1}))
  45. self.assertInContext(response, 'user')
  46. self.assertIsOk(response)
  47. class TestDetailViewForStaffUser(WebTestCase):
  48. is_staff = True
  49. def setUp(self):
  50. self.customer = get(User, username='jane',
  51. email='jane@example.org',
  52. password='password')
  53. super(TestDetailViewForStaffUser, self).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.assertEquals(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. )