Return all required org and services info for user

The admin app now needs to know a few extra things about orgs and
services in order to list them. At the moment it does this by making
multiple API calls.

This commit adds extra fields to the existing response. Once the admin
app is using this fields we’ll be able to remove:
- `reponse['services_without_organisations']`
- `reponse['organisations']['services']`
This commit is contained in:
Chris Hill-Scott
2019-06-12 10:34:15 +01:00
parent d19dbe5b61
commit b6fdb269e4
2 changed files with 145 additions and 69 deletions

View File

@@ -835,38 +835,63 @@ def test_get_orgs_and_services_nests_services(admin_request, sample_user):
resp = admin_request.get('user.get_organisations_and_services_for_user', user_id=sample_user.id)
assert resp == {
'organisations': [
{
'name': org1.name,
'id': str(org1.id),
'services': [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
},
{
'name': service2.name,
'id': str(service2.id),
'restricted': False,
}
]
},
{
'name': org2.name,
'id': str(org2.id),
'services': []
}
],
'services_without_organisations': [
{
'name': service3.name,
'id': str(service3.id),
'restricted': False,
}
]
assert set(resp.keys()) == {
'organisations',
'services_without_organisations',
'services',
}
assert resp['organisations'] == [
{
'name': org1.name,
'id': str(org1.id),
'services': [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
},
{
'name': service2.name,
'id': str(service2.id),
'restricted': False,
}
],
'count_of_live_services': 2,
},
{
'name': org2.name,
'id': str(org2.id),
'services': [],
'count_of_live_services': 0,
},
]
assert resp['services_without_organisations'] == [
{
'name': service3.name,
'id': str(service3.id),
'restricted': False,
}
]
assert resp['services'] == [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
'organisation': str(org1.id),
},
{
'name': service2.name,
'id': str(service2.id),
'restricted': False,
'organisation': str(org1.id),
},
{
'name': service3.name,
'id': str(service3.id),
'restricted': False,
'organisation': None,
},
]
def test_get_orgs_and_services_only_returns_active(admin_request, sample_user):
@@ -890,28 +915,52 @@ def test_get_orgs_and_services_only_returns_active(admin_request, sample_user):
resp = admin_request.get('user.get_organisations_and_services_for_user', user_id=sample_user.id)
assert resp == {
'organisations': [
{
'name': org1.name,
'id': str(org1.id),
'services': [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
}
]
}
],
'services_without_organisations': [
{
'name': service4.name,
'id': str(service4.id),
'restricted': False,
}
]
assert set(resp.keys()) == {
'organisations',
'services_without_organisations',
'services',
}
assert resp['organisations'] == [
{
'name': org1.name,
'id': str(org1.id),
'services': [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
}
],
'count_of_live_services': 1,
}
]
assert resp['services_without_organisations'] == [
{
'name': service4.name,
'id': str(service4.id),
'restricted': False,
}
]
assert resp['services'] == [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
'organisation': str(org1.id)
},
{
'name': service3.name,
'id': str(service3.id),
'restricted': False,
'organisation': str(org2.id)
},
{
'name': service4.name,
'id': str(service4.id),
'restricted': False,
'organisation': None,
},
]
def test_get_orgs_and_services_only_shows_users_orgs_and_services(admin_request, sample_user):
@@ -932,23 +981,37 @@ def test_get_orgs_and_services_only_shows_users_orgs_and_services(admin_request,
resp = admin_request.get('user.get_organisations_and_services_for_user', user_id=sample_user.id)
assert resp == {
'organisations': [
{
'name': org2.name,
'id': str(org2.id),
'services': []
}
],
# service1 belongs to org1, but the user doesn't know about org1
'services_without_organisations': [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
}
]
assert set(resp.keys()) == {
'organisations',
'services_without_organisations',
'services',
}
assert resp['organisations'] == [
{
'name': org2.name,
'id': str(org2.id),
'services': [],
'count_of_live_services': 0,
}
]
# service1 belongs to org1, but the user doesn't know about org1
assert resp['services_without_organisations'] == [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
}
]
# 'services' always returns the org_id no matter whether the user
# belongs to that org or not
assert resp['services'] == [
{
'name': service1.name,
'id': str(service1.id),
'restricted': False,
'organisation': str(org1.id),
}
]
def test_find_users_by_email_finds_user_by_partial_email(notify_db, client):