mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 07:46:23 -04:00
invite-team-members
This commit is contained in:
@@ -26,7 +26,6 @@ def test_load_service_before_request_handles_404(client_request, mocker):
|
||||
|
||||
|
||||
@pytest.mark.parametrize('url', [
|
||||
'/invitation/MALFORMED_TOKEN',
|
||||
'/new-password/MALFORMED_TOKEN',
|
||||
'/user-profile/email/confirm/MALFORMED_TOKEN',
|
||||
'/verify-email/MALFORMED_TOKEN'
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from flask import url_for
|
||||
from bs4 import BeautifulSoup
|
||||
from unittest.mock import ANY
|
||||
from itsdangerous import SignatureExpired
|
||||
|
||||
import app
|
||||
from app.notify_client.models import InvitedUser
|
||||
@@ -22,8 +21,6 @@ def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(
|
||||
mock_get_service,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
expected_service = service_one['id']
|
||||
expected_permissions = ['send_messages', 'manage_service', 'manage_api_keys']
|
||||
|
||||
@@ -50,8 +47,6 @@ def test_existing_user_with_no_permissions_accept_invite(
|
||||
mock_add_user_to_service,
|
||||
mock_get_service,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
expected_service = service_one['id']
|
||||
sample_invite['permissions'] = ''
|
||||
expected_permissions = []
|
||||
@@ -69,8 +64,6 @@ def test_if_existing_user_accepts_twice_they_redirect_to_sign_in(
|
||||
sample_invite,
|
||||
mock_get_service,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
sample_invite['status'] = 'accepted'
|
||||
invite = InvitedUser(**sample_invite)
|
||||
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
||||
@@ -96,7 +89,6 @@ def test_existing_user_of_service_get_redirected_to_signin(
|
||||
mock_get_user_by_email,
|
||||
mock_accept_invite,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
sample_invite['email_address'] = api_user_active.email_address
|
||||
invite = InvitedUser(**sample_invite)
|
||||
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
||||
@@ -128,8 +120,6 @@ def test_existing_signed_out_user_accept_invite_redirects_to_sign_in(
|
||||
mock_get_service,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
expected_service = service_one['id']
|
||||
expected_permissions = ['send_messages', 'manage_service', 'manage_api_keys']
|
||||
|
||||
@@ -161,8 +151,6 @@ def test_new_user_accept_invite_calls_api_and_redirects_to_registration(
|
||||
mock_get_service,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
expected_redirect_location = 'http://localhost/register-from-invite'
|
||||
|
||||
response = client.get(url_for('main.accept_invite', token='thisisnotarealtoken'))
|
||||
@@ -184,8 +172,6 @@ def test_new_user_accept_invite_calls_api_and_views_registration_page(
|
||||
mock_get_service,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
response = client.get(url_for('main.accept_invite', token='thisisnotarealtoken'), follow_redirects=True)
|
||||
|
||||
mock_check_invite_token.assert_called_with('thisisnotarealtoken')
|
||||
@@ -219,7 +205,6 @@ def test_cancelled_invited_user_accepts_invited_redirect_to_cancelled_invitation
|
||||
mock_get_user,
|
||||
mock_get_service,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
cancelled_invitation = create_sample_invite(mocker, service_one, status='cancelled')
|
||||
mock_check_token_invite(mocker, cancelled_invitation)
|
||||
response = client.get(url_for('main.accept_invite', token='thisisnotarealtoken'))
|
||||
@@ -237,7 +222,7 @@ def test_new_user_accept_invite_completes_new_registration_redirects_to_verify(
|
||||
api_user_active,
|
||||
mock_check_invite_token,
|
||||
mock_dont_get_user_by_email,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_send_verify_code,
|
||||
mock_accept_invite,
|
||||
@@ -246,8 +231,6 @@ def test_new_user_accept_invite_completes_new_registration_redirects_to_verify(
|
||||
mock_get_service,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
expected_service = service_one['id']
|
||||
expected_email = sample_invite['email_address']
|
||||
expected_from_user = service_one['users'][0]
|
||||
@@ -297,7 +280,6 @@ def test_signed_in_existing_user_cannot_use_anothers_invite(
|
||||
mock_accept_invite,
|
||||
mock_get_service,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
invite = InvitedUser(**sample_invite)
|
||||
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
||||
mocker.patch('app.user_api_client.get_users_for_service', return_value=[api_user_active])
|
||||
@@ -324,8 +306,6 @@ def test_accept_invite_does_not_treat_email_addresses_as_case_sensitive(
|
||||
mock_accept_invite,
|
||||
mock_get_user_by_email
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
# the email address of api_user_active is 'test@user.gov.uk'
|
||||
sample_invite['email_address'] = 'TEST@user.gov.uk'
|
||||
invite = InvitedUser(**sample_invite)
|
||||
@@ -345,7 +325,7 @@ def test_new_invited_user_verifies_and_added_to_service(
|
||||
api_user_active,
|
||||
mock_check_invite_token,
|
||||
mock_dont_get_user_by_email,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_send_verify_code,
|
||||
mock_check_verify_code,
|
||||
@@ -363,8 +343,6 @@ def test_new_invited_user_verifies_and_added_to_service(
|
||||
mock_get_usage,
|
||||
mocker,
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
|
||||
# visit accept token page
|
||||
response = client.get(url_for('main.accept_invite', token='thisisnotarealtoken'))
|
||||
assert response.status_code == 302
|
||||
@@ -404,24 +382,6 @@ def test_new_invited_user_verifies_and_added_to_service(
|
||||
assert page.find('h1').text == 'Dashboard'
|
||||
|
||||
|
||||
def test_gives_message_if_token_has_expired(
|
||||
app_,
|
||||
client,
|
||||
mock_check_invite_token,
|
||||
mocker,
|
||||
):
|
||||
check_token = mocker.patch('app.main.views.invites.check_token', side_effect=SignatureExpired('this is too old'))
|
||||
|
||||
response = client.get(url_for('main.accept_invite', token='a really old token'))
|
||||
raw_html = response.data.decode('utf-8')
|
||||
page = BeautifulSoup(raw_html, 'html.parser')
|
||||
|
||||
check_token.assert_called_once_with(ANY, ANY, ANY, 3600 * 24 * 2)
|
||||
assert response.status_code == 400
|
||||
assert 'Your invitation to GOV.UK Notify has expired' in page.find('h1').text
|
||||
assert not mock_check_invite_token.called
|
||||
|
||||
|
||||
def test_existing_user_accepts_and_sets_email_auth(
|
||||
client_request,
|
||||
api_user_active,
|
||||
@@ -434,7 +394,6 @@ def test_existing_user_accepts_and_sets_email_auth(
|
||||
mock_add_user_to_service,
|
||||
mocker
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
sample_invite['email_address'] = api_user_active.email_address
|
||||
|
||||
service_one['permissions'].append('email_auth')
|
||||
@@ -465,7 +424,6 @@ def test_existing_user_doesnt_get_auth_changed_by_service_without_permission(
|
||||
mock_add_user_to_service,
|
||||
mocker
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
sample_invite['email_address'] = api_user_active.email_address
|
||||
|
||||
assert 'email_auth' not in service_one['permissions']
|
||||
@@ -495,7 +453,6 @@ def test_existing_email_auth_user_without_phone_cannot_set_sms_auth(
|
||||
mock_add_user_to_service,
|
||||
mocker
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
sample_invite['email_address'] = api_user_active.email_address
|
||||
|
||||
service_one['permissions'].append('email_auth')
|
||||
@@ -529,7 +486,6 @@ def test_existing_email_auth_user_with_phone_can_set_sms_auth(
|
||||
mock_add_user_to_service,
|
||||
mocker
|
||||
):
|
||||
mocker.patch('app.main.views.invites.check_token')
|
||||
sample_invite['email_address'] = api_user_active.email_address
|
||||
|
||||
service_one['permissions'].append('email_auth')
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
import pytest
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from flask import url_for
|
||||
from flask import url_for, Response
|
||||
|
||||
from datetime import (
|
||||
datetime,
|
||||
timedelta
|
||||
)
|
||||
|
||||
from tests.conftest import (
|
||||
normalize_spaces
|
||||
)
|
||||
from unittest.mock import ANY
|
||||
from app.notify_client.models import InvitedOrgUser
|
||||
|
||||
from notifications_python_client.errors import HTTPError
|
||||
|
||||
|
||||
def test_organisation_page_shows_all_organisations(
|
||||
@@ -151,3 +162,376 @@ def test_organisation_services_show(
|
||||
assert normalize_spaces(
|
||||
page.select('.browse-list-item a')[i]['href']
|
||||
) == '/services/{}'.format(service_id)
|
||||
|
||||
|
||||
def test_view_team_members(
|
||||
logged_in_platform_admin_client,
|
||||
mocker,
|
||||
mock_get_organisation,
|
||||
mock_get_users_for_organisation,
|
||||
mock_get_invited_users_for_organisation,
|
||||
fake_uuid
|
||||
):
|
||||
response = logged_in_platform_admin_client.get(
|
||||
url_for('.manage_org_users', org_id=fake_uuid),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
for i in range(0, 2):
|
||||
assert normalize_spaces(
|
||||
page.select('.user-list-item .heading-small')[i].text
|
||||
) == 'Test User {}'.format(i + 1)
|
||||
|
||||
assert normalize_spaces(
|
||||
page.select('.tick-cross-list-edit-link')[1].text
|
||||
) == 'Cancel invitation'
|
||||
|
||||
|
||||
def test_invite_org_user(
|
||||
logged_in_platform_admin_client,
|
||||
mocker,
|
||||
mock_get_organisation,
|
||||
sample_org_invite,
|
||||
fake_uuid
|
||||
):
|
||||
|
||||
mock_invite_org_user = mocker.patch(
|
||||
'app.org_invite_api_client.create_invite',
|
||||
return_value=InvitedOrgUser(**sample_org_invite)
|
||||
)
|
||||
|
||||
logged_in_platform_admin_client.post(
|
||||
url_for('.invite_org_user', org_id=mock_get_organisation['id']),
|
||||
data={'email_address': 'test@example.gov.uk'}
|
||||
)
|
||||
|
||||
mock_invite_org_user.assert_called_once_with(
|
||||
sample_org_invite['invited_by'],
|
||||
'{}'.format(mock_get_organisation['id']),
|
||||
'test@example.gov.uk',
|
||||
)
|
||||
|
||||
|
||||
def test_invite_org_user_errors_when_same_email_as_inviter(
|
||||
logged_in_platform_admin_client,
|
||||
mocker,
|
||||
mock_get_organisation,
|
||||
sample_org_invite,
|
||||
fake_uuid
|
||||
):
|
||||
new_org_user_data = {
|
||||
'email_address': 'platform@admin.gov.uk',
|
||||
}
|
||||
|
||||
mock_invite_org_user = mocker.patch(
|
||||
'app.org_invite_api_client.create_invite',
|
||||
return_value=InvitedOrgUser(**sample_org_invite)
|
||||
)
|
||||
|
||||
response = logged_in_platform_admin_client.post(
|
||||
url_for('.invite_org_user', org_id=mock_get_organisation['id']),
|
||||
data=new_org_user_data
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
assert mock_invite_org_user.called is False
|
||||
assert normalize_spaces(page.select_one('.error-message').text) == 'You can’t send an invitation to yourself'
|
||||
|
||||
# Broken
|
||||
|
||||
|
||||
def test_accept_invite_with_invalid_token(
|
||||
client,
|
||||
mocker
|
||||
):
|
||||
mocker.patch(
|
||||
'app.org_invite_api_client.check_token',
|
||||
side_effect=HTTPError(Response(status=400), {'result': 'error', 'message': 'default error message'})
|
||||
)
|
||||
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'))
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_accepted_invite_when_user_already_logged_in(
|
||||
logged_in_client,
|
||||
mock_check_org_invite_token
|
||||
):
|
||||
response = logged_in_client.get(
|
||||
url_for('main.accept_org_invite', token='thisisnotarealtoken'),
|
||||
follow_redirects=True
|
||||
)
|
||||
|
||||
assert response.status_code == 403
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
assert 'This invite is for another email address.' in normalize_spaces(page.select_one('.banner-dangerous').text)
|
||||
|
||||
|
||||
def test_cancelled_invite_opened_by_user(
|
||||
client,
|
||||
mock_check_org_cancelled_invite_token,
|
||||
mock_get_organisation,
|
||||
mock_get_user,
|
||||
fake_uuid
|
||||
):
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'), follow_redirects=True)
|
||||
|
||||
assert response.status_code == 200
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
assert normalize_spaces(
|
||||
page.select_one('h1').text
|
||||
) == 'The invitation you were sent has been cancelled'
|
||||
assert normalize_spaces(
|
||||
page.select('main p')[0].text
|
||||
) == 'Test User decided to cancel this invitation.'
|
||||
assert normalize_spaces(
|
||||
page.select('main p')[1].text
|
||||
) == 'If you need access to Org 1, you’ll have to ask them to invite you again.'
|
||||
|
||||
mock_get_user.assert_called_once_with(fake_uuid)
|
||||
mock_get_organisation.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af')
|
||||
|
||||
|
||||
def test_user_invite_already_accepted(
|
||||
client,
|
||||
mock_check_org_accepted_invite_token
|
||||
):
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'))
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for(
|
||||
'main.organisation_dashboard',
|
||||
org_id='596364a0-858e-42c8-9062-a8fe822260af',
|
||||
_external=True
|
||||
)
|
||||
|
||||
|
||||
def test_existing_user_invite_already_is_member_of_organisation(
|
||||
client,
|
||||
mock_check_org_invite_token,
|
||||
mock_get_user_by_email,
|
||||
mock_get_users_for_organisation,
|
||||
mock_accept_org_invite,
|
||||
fake_uuid
|
||||
):
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'))
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for(
|
||||
'main.organisation_dashboard',
|
||||
org_id='596364a0-858e-42c8-9062-a8fe822260af',
|
||||
_external=True
|
||||
)
|
||||
|
||||
mock_accept_org_invite.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af', fake_uuid)
|
||||
mock_get_user_by_email.assert_called_once_with('invited_user@test.gov.uk')
|
||||
mock_get_users_for_organisation.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af')
|
||||
|
||||
|
||||
def test_exisiting_user_invite_not_a_member_of_organisation(
|
||||
client,
|
||||
mock_check_org_invite_token,
|
||||
mock_get_user_by_email,
|
||||
mock_get_users_for_organisation,
|
||||
mock_accept_org_invite,
|
||||
mock_add_user_to_organisation,
|
||||
fake_uuid
|
||||
):
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'))
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for(
|
||||
'main.organisation_dashboard',
|
||||
org_id='596364a0-858e-42c8-9062-a8fe822260af',
|
||||
_external=True
|
||||
)
|
||||
|
||||
mock_accept_org_invite.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af', ANY)
|
||||
mock_get_user_by_email.assert_called_once_with('invited_user@test.gov.uk')
|
||||
mock_get_users_for_organisation.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af')
|
||||
mock_add_user_to_organisation.assert_called_once_with(
|
||||
'596364a0-858e-42c8-9062-a8fe822260af',
|
||||
'6ce466d0-fd6a-11e5-82f5-e0accb9d11a6'
|
||||
)
|
||||
|
||||
|
||||
def test_user_accepts_invite(
|
||||
client,
|
||||
mock_check_org_invite_token,
|
||||
mock_dont_get_user_by_email,
|
||||
mock_get_users_for_organisation,
|
||||
):
|
||||
response = client.get(url_for('main.accept_org_invite', token='thisisnotarealtoken'))
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.register_from_org_invite', _external=True)
|
||||
|
||||
mock_check_org_invite_token.assert_called_once_with('thisisnotarealtoken')
|
||||
mock_dont_get_user_by_email.assert_called_once_with('invited_user@test.gov.uk')
|
||||
mock_get_users_for_organisation.assert_called_once_with('596364a0-858e-42c8-9062-a8fe822260af')
|
||||
|
||||
|
||||
def test_registration_from_org_invite_404s_if_user_not_in_session(
|
||||
client,
|
||||
):
|
||||
response = client.get(url_for('main.register_from_org_invite'))
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.parametrize('data, error', [
|
||||
[{
|
||||
'name': 'Bad Mobile',
|
||||
'mobile_number': 'not good',
|
||||
'password': 'validPassword!'
|
||||
}, 'Must not contain letters or symbols'],
|
||||
[{
|
||||
'name': 'Bad Password',
|
||||
'mobile_number': '+44123412345',
|
||||
'password': 'password'
|
||||
}, 'Choose a password that’s harder to guess'],
|
||||
])
|
||||
def test_registration_from_org_invite_has_bad_data(
|
||||
client,
|
||||
sample_org_invite,
|
||||
data,
|
||||
error
|
||||
):
|
||||
invited_org_user = InvitedOrgUser(**sample_org_invite)
|
||||
with client.session_transaction() as session:
|
||||
session['invited_org_user'] = invited_org_user.serialize()
|
||||
|
||||
response = client.post(url_for('main.register_from_org_invite'), data=data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert error in response.get_data(as_text=True)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('diff_data', [
|
||||
['email_address'],
|
||||
['organisation'],
|
||||
['email_address', 'organisation']
|
||||
])
|
||||
def test_registration_from_org_invite_has_different_email_or_organisation(
|
||||
client,
|
||||
sample_org_invite,
|
||||
diff_data
|
||||
):
|
||||
invited_org_user = InvitedOrgUser(**sample_org_invite)
|
||||
with client.session_transaction() as session:
|
||||
session['invited_org_user'] = invited_org_user.serialize()
|
||||
|
||||
for data in diff_data:
|
||||
session['invited_org_user'][data] = 'different'
|
||||
|
||||
response = client.post(url_for('main.register_from_org_invite'), data={
|
||||
'name': 'Test User',
|
||||
'mobile_number': '+4407700900460',
|
||||
'password': 'validPassword!',
|
||||
'email_address': session['invited_org_user']['email_address'],
|
||||
'organisation': session['invited_org_user']['organisation']
|
||||
})
|
||||
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_org_user_registers_with_email_already_in_use(
|
||||
client,
|
||||
sample_org_invite,
|
||||
mock_email_is_already_in_use,
|
||||
mock_get_user_by_email,
|
||||
mock_accept_org_invite,
|
||||
mock_add_user_to_organisation,
|
||||
mock_send_already_registered_email,
|
||||
mock_register_user
|
||||
):
|
||||
invited_org_user = InvitedOrgUser(**sample_org_invite)
|
||||
with client.session_transaction() as session:
|
||||
session['invited_org_user'] = invited_org_user.serialize()
|
||||
|
||||
response = client.post(url_for('main.register_from_org_invite'), data={
|
||||
'name': 'Test User',
|
||||
'mobile_number': '+4407700900460',
|
||||
'password': 'validPassword!',
|
||||
'email_address': session['invited_org_user']['email_address'],
|
||||
'organisation': session['invited_org_user']['organisation']
|
||||
})
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.verify', _external=True)
|
||||
|
||||
mock_get_user_by_email.assert_called_once_with(
|
||||
session['invited_org_user']['email_address']
|
||||
)
|
||||
assert mock_register_user.called is False
|
||||
assert mock_send_already_registered_email.called is False
|
||||
|
||||
|
||||
def test_org_user_registration(
|
||||
client,
|
||||
sample_org_invite,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_send_verify_code,
|
||||
mock_get_user_by_email,
|
||||
mock_send_verify_email,
|
||||
mock_accept_org_invite,
|
||||
mock_add_user_to_organisation,
|
||||
):
|
||||
invited_org_user = InvitedOrgUser(**sample_org_invite)
|
||||
with client.session_transaction() as session:
|
||||
session['invited_org_user'] = invited_org_user.serialize()
|
||||
|
||||
response = client.post(url_for('main.register_from_org_invite'), data={
|
||||
'name': 'Test User',
|
||||
'email_address': session['invited_org_user']['email_address'],
|
||||
'mobile_number': '+4407700900460',
|
||||
'password': 'validPassword!',
|
||||
'organisation': session['invited_org_user']['organisation']
|
||||
})
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for('main.verify', _external=True)
|
||||
|
||||
mock_get_user_by_email.called is False
|
||||
mock_register_user.assert_called_once_with(
|
||||
'Test User',
|
||||
session['invited_org_user']['email_address'],
|
||||
'+4407700900460',
|
||||
'validPassword!',
|
||||
'sms_auth'
|
||||
)
|
||||
mock_send_verify_code.assert_called_once_with(
|
||||
'6ce466d0-fd6a-11e5-82f5-e0accb9d11a6',
|
||||
'sms',
|
||||
'+4407700900460',
|
||||
)
|
||||
|
||||
|
||||
def test_verified_org_user_redirects_to_dashboard(
|
||||
client,
|
||||
sample_org_invite,
|
||||
mock_check_verify_code,
|
||||
mock_get_user,
|
||||
mock_activate_user,
|
||||
mock_login,
|
||||
):
|
||||
invited_org_user = InvitedOrgUser(**sample_org_invite).serialize()
|
||||
with client.session_transaction() as session:
|
||||
session['expiry_date'] = str(datetime.utcnow() + timedelta(hours=1))
|
||||
session['user_details'] = {"email": invited_org_user['email_address'], "id": invited_org_user['id']}
|
||||
session['organisation_id'] = invited_org_user['organisation']
|
||||
|
||||
response = client.post(url_for('main.verify'), data={'sms_code': '12345'})
|
||||
|
||||
assert response.status_code == 302
|
||||
assert response.location == url_for(
|
||||
'main.organisation_dashboard',
|
||||
org_id=invited_org_user['organisation'],
|
||||
_external=True
|
||||
)
|
||||
|
||||
@@ -48,7 +48,7 @@ def test_register_creates_new_user_and_redirects_to_continue_page(
|
||||
mock_send_verify_code,
|
||||
mock_register_user,
|
||||
mock_get_user_by_email_not_found,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_send_verify_email,
|
||||
mock_login,
|
||||
phone_number_to_register_with,
|
||||
@@ -122,7 +122,7 @@ def test_should_add_user_details_to_session(
|
||||
mock_register_user,
|
||||
mock_get_user,
|
||||
mock_get_user_by_email_not_found,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_send_verify_email,
|
||||
mock_login,
|
||||
):
|
||||
@@ -176,7 +176,7 @@ def test_register_with_existing_email_sends_emails(
|
||||
def test_register_from_invite(
|
||||
client,
|
||||
fake_uuid,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_send_verify_code,
|
||||
mock_accept_invite,
|
||||
@@ -237,7 +237,7 @@ def test_register_from_invite_when_user_registers_in_another_browser(
|
||||
def test_register_from_email_auth_invite(
|
||||
client,
|
||||
sample_invite,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_get_user,
|
||||
mock_send_verify_email,
|
||||
@@ -285,7 +285,7 @@ def test_register_from_email_auth_invite(
|
||||
def test_can_register_email_auth_without_phone_number(
|
||||
client,
|
||||
sample_invite,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
mock_register_user,
|
||||
mock_get_user,
|
||||
mock_send_verify_email,
|
||||
|
||||
@@ -30,6 +30,7 @@ def test_should_redirect_after_name_change(
|
||||
logged_in_client,
|
||||
api_user_active,
|
||||
mock_update_user_attribute,
|
||||
mock_email_is_not_already_in_use
|
||||
):
|
||||
new_name = 'New Name'
|
||||
data = {'new_name': new_name}
|
||||
@@ -54,7 +55,7 @@ def test_should_show_email_page(
|
||||
def test_should_redirect_after_email_change(
|
||||
logged_in_client,
|
||||
mock_login,
|
||||
mock_is_email_unique,
|
||||
mock_email_is_not_already_in_use,
|
||||
):
|
||||
data = {'email_address': 'new_notify@notify.gov.uk'}
|
||||
response = logged_in_client.post(
|
||||
|
||||
Reference in New Issue
Block a user