Newer
Older
from django.core import mail
from django.urls import reverse
from opentech.apply.utils.testing.tests import BaseViewTestCase
from .factories import (
OAuthUserFactory,
StaffFactory,
SuperUserFactory,
UserFactory,
)
@override_settings(ROOT_URLCONF='opentech.apply.urls')
class BaseTestProfielView(TestCase):
@classmethod
def setUpTestData(cls):
cls.url = reverse('users:account')
class TestProfileView(BaseTestProfielView):
def setUp(self):
self.user = UserFactory()
self.client.force_login(self.user)
def test_cant_acces_if_not_logged_in(self):
response = self.client.get(self.url, follow=True)
# Initial redirect will be via to https through a 301
self.assertRedirects(response, reverse('users_public:login') + '?next=' + self.url, status_code=301)
def test_includes_change_password(self):
response = self.client.get(self.url, follow=True)
self.assertContains(response, reverse('users:password_change'))
def test_doesnt_includes_change_password_for_oauth(self):
self.client.force_login(OAuthUserFactory())
response = self.client.get(self.url, follow=True)
self.assertNotContains(response, reverse('users:password_change'))
response = self.client.get(self.url, follow=True)
self.assertNotContains(response, 'Slack name')
class TestStaffProfileView(BaseTestProfielView):
def setUp(self):
self.staff = StaffFactory()
self.client.force_login(self.staff)
def test_can_set_slack_name(self):
response = self.client.get(self.url, follow=True)
self.assertContains(response, 'Slack name')
class TestPasswordReset(BaseViewTestCase):
user_factory = UserFactory
url_name = 'users:{}'
base_view_name = 'password_reset'
def test_recieves_email(self):
response = self.post_page(None, data={'email': self.user.email})
self.assertRedirects(response, self.url(None, view_name='password_reset_done'))
self.assertEqual(len(mail.outbox), 1)
self.assertIn('https://testserver/account/password/reset/confirm', mail.outbox[0].body)
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
@override_settings(ROOT_URLCONF='opentech.apply.urls')
class TestBecome(TestCase):
def setUp(self):
self.staff = StaffFactory()
self.user = UserFactory()
self.superuser = SuperUserFactory()
def become_request(self, user, target):
self.client.force_login(user)
url = reverse('users:become')
response = self.client.post(url, {'user': target.pk}, follow=True, secure=True)
return response
def test_staff_can_become_user(self):
response = self.become_request(self.staff, self.user)
self.assertEqual(response.status_code, 200)
def test_staff_cannot_become_superuser(self):
response = self.become_request(self.staff, self.superuser)
self.assertEqual(response.status_code, 403)
def test_superuser_can_become_staff(self):
response = self.become_request(self.superuser, self.staff)
self.assertEqual(response.status_code, 200)
def test_superuser_cannot_become_superuser(self):
other_superuser = SuperUserFactory()
response = self.become_request(self.superuser, other_superuser)
self.assertEqual(response.status_code, 403)
def test_user_cannot_become_staff(self):
response = self.become_request(self.user, self.staff)
self.assertEqual(response.status_code, 403)
def test_user_cannot_become_other_user(self):
other_user = UserFactory()
response = self.become_request(self.user, other_user)
self.assertEqual(response.status_code, 403)
def test_user_cannot_become_superuser(self):
response = self.become_request(self.user, self.superuser)
self.assertEqual(response.status_code, 403)