diff --git a/app/main/views/invites.py b/app/main/views/invites.py index 4b271e29c..c9052303d 100644 --- a/app/main/views/invites.py +++ b/app/main/views/invites.py @@ -17,13 +17,13 @@ from app import ( def accept_invite(token): try: invited_user = invite_api_client.accept_invite(token) - existing_user = user_api_client.get_user_by_email(invited_user['email_address']) + existing_user = user_api_client.get_user_by_email(invited_user.email_address) if existing_user: - user_api_client.add_user_to_service(invited_user['service'], - existing_user.id, - invited_user) - return redirect(url_for('main.service_dashboard', service_id=invited_user['service'])) + user_api_client.add_user_to_service(invited_user.service, + existing_user.id) + + return redirect(url_for('main.service_dashboard', service_id=invited_user.service)) else: # TODO implement registration flow for new users abort(404) diff --git a/app/notify_client/user_api_client.py b/app/notify_client/user_api_client.py index 5bb744a91..b1054f769 100644 --- a/app/notify_client/user_api_client.py +++ b/app/notify_client/user_api_client.py @@ -1,3 +1,5 @@ +import json + from notifications_python_client.notifications import BaseAPIClient from notifications_python_client.errors import HTTPError @@ -86,7 +88,7 @@ class UserApiClient(BaseAPIClient): resp = self.get(endpoint) return [User(data) for data in resp['data']] - def add_user_to_service(self, service_id, user_id, invited_user): + def add_user_to_service(self, service_id, user_id): endpoint = '/service/{}/users/{}'.format(service_id, user_id) - resp = self.post(endpoint, data=invited_user) + resp = self.post(endpoint) return User(resp['data'], max_failed_login_count=self.max_failed_login_count) diff --git a/app/templates/views/manage-users.html b/app/templates/views/manage-users.html index b3adee4be..44a0b39e5 100644 --- a/app/templates/views/manage-users.html +++ b/app/templates/views/manage-users.html @@ -45,7 +45,7 @@ Manage users – GOV.UK Notify {% endcall %} {{ boolean_field(item.has_permissions('send_messages')) }} {{ boolean_field(item.has_permissions('manage_service')) }} - {{ boolean_field(item.has_permissions('api_keys')) }} + {{ boolean_field(item.has_permissions('manage_api_keys')) }} {% call field(align='right') %} Change {% endcall %} diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index 8c52400c4..54b527d93 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -1,15 +1,20 @@ from flask import url_for +from app.notify_client.models import InvitedUser +from notifications_python_client.errors import HTTPError + +import pytest + def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(app_, service_one, + api_user_active, sample_invite, mock_accept_invite, mock_get_user_by_email, mock_add_user_to_service): expected_service = service_one['id'] - expected_from_user = service_one['users'][0] expected_redirect_location = 'http://localhost/services/{}/dashboard'.format(expected_service) with app_.test_request_context(): @@ -19,7 +24,7 @@ def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(app_, mock_accept_invite.assert_called_with('thisisnotarealtoken') mock_get_user_by_email.assert_called_with('invited_user@test.gov.uk') - mock_add_user_to_service.assert_called_with(expected_service, expected_from_user, sample_invite) + mock_add_user_to_service.assert_called_with(expected_service, api_user_active.id) assert response.status_code == 302 assert response.location == expected_redirect_location diff --git a/tests/conftest.py b/tests/conftest.py index b04b81e14..acd163be9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -595,12 +595,12 @@ def mock_get_invites_for_service(mocker, service_one, sample_invite): @pytest.fixture(scope='function') def mock_accept_invite(mocker, sample_invite): def _accept_token(token): - return sample_invite + return InvitedUser(**sample_invite) return mocker.patch('app.invite_api_client.accept_invite', side_effect=_accept_token) @pytest.fixture(scope='function') -def mock_add_user_to_service(mocker, service_one): - def _add_user(service_id, user_id, invitation): +def mock_add_user_to_service(mocker, service_one, api_user_active): + def _add_user(service_id, user_id): return api_user_active return mocker.patch('app.user_api_client.add_user_to_service', side_effect=_add_user)