from django.core import mail from django.urls import reverse from ..testutils import AuthenticatedUserTestCase class OptionsViewsTests(AuthenticatedUserTestCase): def test_lander_view_returns_200(self): """/options has no show stoppers""" response = self.client.get(reverse('misago:options')) self.assertEqual(response.status_code, 200) def test_form_view_returns_200(self): """/options/some-form has no show stoppers""" response = self.client.get(reverse('misago:options-form', kwargs={ 'form_name': 'some-fake-form' })) self.assertEqual(response.status_code, 200) class ConfirmChangeEmailTests(AuthenticatedUserTestCase): def setUp(self): super(ConfirmChangeEmailTests, self).setUp() link = '/api/users/%s/change-email/' % self.user.pk response = self.client.post(link, data={ 'new_email': 'n3w@email.com', 'password': self.USER_PASSWORD }) self.assertEqual(response.status_code, 200) for line in [l.strip() for l in mail.outbox[0].body.splitlines()]: if line.startswith('http://'): self.link = line.strip() break def test_invalid_token(self): """invalid token is rejected""" response = self.client.get( reverse('misago:options-confirm-email-change', kwargs={ 'token': 'invalid' })) self.assertContains(response, "Change confirmation link is invalid.", status_code=400) def test_change_email(self): """valid token changes email""" response = self.client.get(self.link) self.assertContains(response, "your e-mail has been changed") self.reload_user() self.assertEqual(self.user.email, 'n3w@email.com') class ConfirmChangePasswordTests(AuthenticatedUserTestCase): def setUp(self): super(ConfirmChangePasswordTests, self).setUp() link = '/api/users/%s/change-password/' % self.user.pk response = self.client.post(link, data={ 'new_password': 'n3wp4ssword', 'password': self.USER_PASSWORD }) self.assertEqual(response.status_code, 200) for line in [l.strip() for l in mail.outbox[0].body.splitlines()]: if line.startswith('http://'): self.link = line.strip() break def test_invalid_token(self): """invalid token is rejected""" response = self.client.get( reverse('misago:options-confirm-password-change', kwargs={ 'token': 'invalid' })) self.assertContains(response, "Change confirmation link is invalid.", status_code=400) def test_change_password(self): """valid token changes password""" response = self.client.get(self.link) self.assertContains(response, "your password has been changed") self.reload_user() self.assertFalse(self.user.check_password(self.USER_PASSWORD)) self.assertTrue(self.user.check_password('n3wp4ssword'))