New-password endpoints are implemented.

There should be a better way to validate the token.
This commit is contained in:
Rebecca Law
2016-01-06 17:37:07 +00:00
parent f94966154d
commit b5901a1ac7
9 changed files with 104 additions and 36 deletions

View File

@@ -1,16 +1,12 @@
import uuid
from app.main.dao import password_reset_token_dao
from app.models import PasswordResetToken
from tests.app.main import create_test_user
def test_should_insert_and_return_token(notifications_admin, notifications_admin_db, notify_db_session):
user = create_test_user('active')
token_id = uuid.uuid4()
reset_token = PasswordResetToken(token=str(token_id),
user_id=user.id)
password_reset_token_dao.insert(reset_token)
saved_token = password_reset_token_dao.get_token(str(token_id))
assert saved_token.token == str(token_id)
token_id = str(uuid.uuid4())
password_reset_token_dao.insert(token=token_id, user_id=user.id)
saved_token = password_reset_token_dao.get_token(token_id)
assert saved_token.token == token_id

View File

@@ -1,5 +1,3 @@
import uuid
from tests.app.main import create_test_user
@@ -23,8 +21,7 @@ def test_should_have_validate_error_when_email_does_not_exist(notifications_admi
def test_should_redirect_to_password_reset_sent(notifications_admin,
notifications_admin_db,
mocker,
notify_db_session,
):
notify_db_session):
_set_up_mocker(mocker)
create_test_user('active')
response = notifications_admin.test_client().post('/forgot-password',
@@ -35,5 +32,4 @@ def test_should_redirect_to_password_reset_sent(notifications_admin,
def _set_up_mocker(mocker):
mocker.patch("app.admin_api_client.send_sms")
mocker.patch("app.admin_api_client.send_email")

View File

@@ -0,0 +1,44 @@
from datetime import datetime, timedelta
from app.main.dao import password_reset_token_dao, users_dao
from app.models import PasswordResetToken
from tests.app.main import create_test_user
from app.main.encryption import check_hash
def test_should_render_new_password_template(notifications_admin, notifications_admin_db, notify_db_session):
with notifications_admin.test_request_context():
with notifications_admin.test_client() as client:
user = create_test_user('active')
password_reset_token_dao.insert('some_token', user.id)
response = client.get('/new-password/some_token')
assert response.status_code == 200
assert ' You can now create a new password for your account.' in response.get_data(as_text=True)
def test_should_redirect_to_two_factor_when_password_reset_is_successful(notifications_admin, notifications_admin_db,
notify_db_session):
with notifications_admin.test_request_context():
with notifications_admin.test_client() as client:
user = create_test_user('active')
password_reset_token_dao.insert('some_token', user.id)
response = client.post('/new-password/some_token',
data={'new_password': 'a-new_password'})
assert response.status_code == 302
assert response.location == 'http://localhost/two-factor'
saved_user = users_dao.get_user_by_id(user.id)
assert check_hash('a-new_password', saved_user.password)
def test_should_return_validation_error_that_token_is_expired(notifications_admin, notifications_admin_db,
notify_db_session):
with notifications_admin.test_request_context():
with notifications_admin.test_client() as client:
user = create_test_user('active')
expired_token = PasswordResetToken(id=1, token='some_token', user_id=user.id,
expiry_date=datetime.now() + timedelta(hours=-2))
password_reset_token_dao.insert_token(expired_token)
response = client.post('/new-password/some_token',
data={'new_password': 'a-new_password'})
assert response.status_code == 200
assert 'token is invalid' in response.get_data(as_text=True)