mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-20 22:40:31 -04:00
New-password endpoints are implemented.
There should be a better way to validate the token.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
44
tests/app/main/views/test_new_password.py
Normal file
44
tests/app/main/views/test_new_password.py
Normal 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)
|
||||
Reference in New Issue
Block a user