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]
Exemplo n.º 2
0
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"]))