mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
[WIP] Post does not need any data
Invites rest module can use invited user object instead of dict.
This commit is contained in:
@@ -17,13 +17,13 @@ from app import (
|
|||||||
def accept_invite(token):
|
def accept_invite(token):
|
||||||
try:
|
try:
|
||||||
invited_user = invite_api_client.accept_invite(token)
|
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:
|
if existing_user:
|
||||||
user_api_client.add_user_to_service(invited_user['service'],
|
user_api_client.add_user_to_service(invited_user.service,
|
||||||
existing_user.id,
|
existing_user.id)
|
||||||
invited_user)
|
|
||||||
return redirect(url_for('main.service_dashboard', service_id=invited_user['service']))
|
return redirect(url_for('main.service_dashboard', service_id=invited_user.service))
|
||||||
else:
|
else:
|
||||||
# TODO implement registration flow for new users
|
# TODO implement registration flow for new users
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
from notifications_python_client.notifications import BaseAPIClient
|
from notifications_python_client.notifications import BaseAPIClient
|
||||||
from notifications_python_client.errors import HTTPError
|
from notifications_python_client.errors import HTTPError
|
||||||
|
|
||||||
@@ -86,7 +88,7 @@ class UserApiClient(BaseAPIClient):
|
|||||||
resp = self.get(endpoint)
|
resp = self.get(endpoint)
|
||||||
return [User(data) for data in resp['data']]
|
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)
|
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)
|
return User(resp['data'], max_failed_login_count=self.max_failed_login_count)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Manage users – GOV.UK Notify
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
{{ boolean_field(item.has_permissions('send_messages')) }}
|
{{ boolean_field(item.has_permissions('send_messages')) }}
|
||||||
{{ boolean_field(item.has_permissions('manage_service')) }}
|
{{ 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') %}
|
{% call field(align='right') %}
|
||||||
<a href="{{ url_for('.edit_user', service_id=service_id, user_id=item.id)}}">Change</a>
|
<a href="{{ url_for('.edit_user', service_id=service_id, user_id=item.id)}}">Change</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
from flask import url_for
|
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_,
|
def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(app_,
|
||||||
service_one,
|
service_one,
|
||||||
|
api_user_active,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
mock_accept_invite,
|
mock_accept_invite,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_add_user_to_service):
|
mock_add_user_to_service):
|
||||||
|
|
||||||
expected_service = service_one['id']
|
expected_service = service_one['id']
|
||||||
expected_from_user = service_one['users'][0]
|
|
||||||
expected_redirect_location = 'http://localhost/services/{}/dashboard'.format(expected_service)
|
expected_redirect_location = 'http://localhost/services/{}/dashboard'.format(expected_service)
|
||||||
|
|
||||||
with app_.test_request_context():
|
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_accept_invite.assert_called_with('thisisnotarealtoken')
|
||||||
mock_get_user_by_email.assert_called_with('invited_user@test.gov.uk')
|
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.status_code == 302
|
||||||
assert response.location == expected_redirect_location
|
assert response.location == expected_redirect_location
|
||||||
|
|||||||
@@ -595,12 +595,12 @@ def mock_get_invites_for_service(mocker, service_one, sample_invite):
|
|||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def mock_accept_invite(mocker, sample_invite):
|
def mock_accept_invite(mocker, sample_invite):
|
||||||
def _accept_token(token):
|
def _accept_token(token):
|
||||||
return sample_invite
|
return InvitedUser(**sample_invite)
|
||||||
return mocker.patch('app.invite_api_client.accept_invite', side_effect=_accept_token)
|
return mocker.patch('app.invite_api_client.accept_invite', side_effect=_accept_token)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def mock_add_user_to_service(mocker, service_one):
|
def mock_add_user_to_service(mocker, service_one, api_user_active):
|
||||||
def _add_user(service_id, user_id, invitation):
|
def _add_user(service_id, user_id):
|
||||||
return api_user_active
|
return api_user_active
|
||||||
return mocker.patch('app.user_api_client.add_user_to_service', side_effect=_add_user)
|
return mocker.patch('app.user_api_client.add_user_to_service', side_effect=_add_user)
|
||||||
|
|||||||
Reference in New Issue
Block a user