[WIP] Post does not need any data

Invites rest module can use invited user object instead
of dict.
This commit is contained in:
Adam Shimali
2016-03-01 17:23:23 +00:00
parent 5f3c72729e
commit 5f02d4cefe
5 changed files with 20 additions and 13 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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') %}
<a href="{{ url_for('.edit_user', service_id=service_id, user_id=item.id)}}">Change</a>
{% endcall %}

View File

@@ -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

View File

@@ -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)