def test_reset_password(client, mailoutbox, settings): user = UserFactory( is_active=False, reset_password_token=User.generate_token(), reset_password_request_date=timezone.now(), ) new_password = user.reset_password_token payload = dict( token=user.reset_password_token, password=new_password, ) response = client.post(reverse('users:reset_password'), payload) assert response.status_code == 200 user.refresh_from_db() response = response.json() assert user.pk == response['user']['pk'] assert user.is_active is True assert user.check_password(new_password) is True assert 'access_token' in response assert 'refresh_token' in response assert len(mailoutbox) == 1 msg = mailoutbox[0] assert msg.subject == 'Your {site_name} password has been changed'.format( site_name=settings.SITE_NAME) assert msg.to == [user.email]
class ChangePasswordTests(TestCase): def setUp(self): self.user_password = "******" self.user = UserFactory() def test_change_user_password_view_should_change_user_password_on_post(self): data = {"old_password": self.user_password, "new_password1": "newuserpasswd", "new_password2": "newuserpasswd"} self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 302) self.assertTrue(self.user.check_password(data["new_password1"])) def test_change_user_password_view_should_not_change_user_password_when_old_password_is_incorrect(self): data = {"old_password": "******", "new_password1": "newuserpasswd", "new_password2": "newuserpasswd"} self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 200) self.assertFalse(self.user.check_password(data["new_password1"])) self.assertFalse(self.user.check_password(data["old_password"])) self.assertTrue(self.user.check_password(self.user_password)) def test_change_user_password_view_should_not_change_user_password_when_new_passwords_does_not_match(self): data = { "old_password": self.user_password, "new_password1": "newuserpasswd", "new_password2": "notthesamenewuserpasswd", } self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 200) # Replacement between "’" and "'" it is caused because in response # we got "’" but from strings hardcoded in `strings.py` we got "'" self.assertEqual( response.context["form"].errors.get("new_password2")[0].replace("’", "'"), ValidationErrorText.VALIDATION_ERROR_SIGNUP_PASSWORD_MESSAGE, ) self.assertFalse(self.user.check_password(data["new_password1"])) self.assertTrue(self.user.check_password(data["old_password"]))