"""Test functions dealing with group management."""
from uuid import UUID
import pytest
from gn_auth.auth.db import sqlite3 as db
from gn_auth.auth.errors import AuthorisationError
from gn_auth.auth.authorisation.privileges import Privilege
from gn_auth.auth.authorisation.roles.models import Role, user_roles, create_role
from tests.unit.auth import conftest
from tests.unit.auth.fixtures import TEST_USERS
create_role_failure = {
"status": "error",
"message": "Unauthorised: Could not create role"
}
PRIVILEGES = (
Privilege("group:resource:view-resource",
"view a resource and use it in computations"),
Privilege("group:resource:edit-resource", "edit/update a resource"))
@pytest.mark.unit_test
@pytest.mark.parametrize(
"user,expected", tuple(zip(conftest.TEST_USERS[1:], (
create_role_failure, create_role_failure, create_role_failure))))
def test_create_role_raises_exception_for_unauthorised_users(# pylint: disable=[too-many-arguments, unused-argument]
fxtr_app,
auth_testdb_path,
mocker,
fxtr_users,
fxtr_oauth2_clients,
user,
expected
):
"""
GIVEN: an authenticated user
WHEN: the user attempts to create a role
THEN: verify they are only able to create the role if they have the
appropriate privileges
"""
_conn, clients = fxtr_oauth2_clients
mocker.patch("gn_auth.auth.authorisation.roles.models.uuid4", conftest.uuid_fn)
mocker.patch(
"gn_auth.auth.authorisation.checks.require_oauth.acquire",
conftest.get_tokeniser(
user,
tuple(client for client in clients if client.user == user)[0]))
with db.connection(auth_testdb_path) as conn, db.cursor(conn) as cursor:
with pytest.raises(AuthorisationError):
create_role(cursor, "a_test_role", PRIVILEGES)
# This might still be incomplete, especially regarding resource roles.
@pytest.mark.unit_test
@pytest.mark.parametrize(
"user,expected",
(zip(TEST_USERS,
(({"resource_id": UUID("2130aec0-fefd-434d-92fd-9ca342348b2d"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (Role(
role_id=UUID("89819f84-6346-488b-8955-86062e9eedb7"),
role_name="resource_editor",
user_editable=True,
privileges=(
Privilege(
privilege_id="group:resource:edit-resource",
privilege_description="edit/update a resource"),
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"))),)},
{"resource_id": UUID("26ad1668-29f5-439d-b905-84d551f85955"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (
Role(
role_id=UUID("89819f84-6346-488b-8955-86062e9eedb7"),
role_name="resource_editor",
user_editable=True,
privileges=(
Privilege(
privilege_id="group:resource:edit-resource",
privilege_description="edit/update a resource"),
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"))),
Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description=(
"view a resource and use it in computations")),)))},
{"resource_id": UUID("e9a1184a-e8b4-49fb-b713-8d9cbeea5b83"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (Role(
role_id=UUID("89819f84-6346-488b-8955-86062e9eedb7"),
role_name="resource_editor",
user_editable=True,
privileges=(
Privilege(
privilege_id="group:resource:edit-resource",
privilege_description="edit/update a resource"),
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"))),)},
{"resource_id": UUID("38d1807d-105f-44a7-8327-7e2d973b6d8d"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (Role(
role_id=UUID("a0e67630-d502-4b9f-b23f-6805d0f30e30"),
role_name="group-leader",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:create-resource",
privilege_description="Create a resource object"),
Privilege(
privilege_id="group:resource:delete-resource",
privilege_description="Delete a resource"),
Privilege(
privilege_id="group:resource:edit-resource",
privilege_description="edit/update a resource"),
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),
Privilege(
privilege_id="group:user:add-group-member",
privilege_description="Add a user to a group"),
Privilege(
privilege_id="group:user:remove-group-member",
privilege_description="Remove a user from a group"),
Privilege(
privilege_id="system:group:delete-group",
privilege_description="Delete a group"),
Privilege(
privilege_id="system:group:edit-group",
privilege_description="Edit the details of a group"),
Privilege(
privilege_id="system:group:transfer-group-leader",
privilege_description=(
"Transfer leadership of the group to some other member")),
Privilege(
privilege_id="system:group:view-group",
privilege_description="View the details of a group"),
Privilege(
privilege_id="system:user:list",
privilege_description="List users in the system"))),)},
{"resource_id": UUID("0248b289-b277-4eaa-8c94-88a434d14b6e"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)},
{"resource_id": UUID("04ad9e09-94ea-4390-8a02-11f92999806b"),
"user_id": UUID("ecb52977-3004-469e-9428-2a1856725c7f"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)}),
({"resource_id": UUID("2130aec0-fefd-434d-92fd-9ca342348b2d"),
"user_id": UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
"roles": (Role(
role_id=UUID("89819f84-6346-488b-8955-86062e9eedb7"),
role_name="resource_editor",
user_editable=True,
privileges=(
Privilege(
privilege_id="group:resource:edit-resource",
privilege_description="edit/update a resource"),
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"))),)
},
{"resource_id": UUID("0248b289-b277-4eaa-8c94-88a434d14b6e"),
"user_id": UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
},
{"resource_id": UUID("04ad9e09-94ea-4390-8a02-11f92999806b"),
"user_id": UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
},
{"resource_id": UUID("26ad1668-29f5-439d-b905-84d551f85955"),
"user_id": UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
}),
({"resource_id": UUID("0248b289-b277-4eaa-8c94-88a434d14b6e"),
"user_id": UUID("ae9c6245-0966-41a5-9a5e-20885a96bea7"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
},
{"resource_id": UUID("04ad9e09-94ea-4390-8a02-11f92999806b"),
"user_id": UUID("ae9c6245-0966-41a5-9a5e-20885a96bea7"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
},
{"resource_id": UUID("26ad1668-29f5-439d-b905-84d551f85955"),
"user_id": UUID("ae9c6245-0966-41a5-9a5e-20885a96bea7"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
}),
({"resource_id": UUID("0248b289-b277-4eaa-8c94-88a434d14b6e"),
"user_id": UUID("9a0c7ce5-2f40-4e78-979e-bf3527a59579"),
"roles": (
Role(
role_id=UUID("ade7e6b0-ba9c-4b51-87d0-2af7fe39a347"),
role_name="group-creator",
user_editable=False,
privileges=(
Privilege(
privilege_id="system:group:create-group",
privilege_description="Create a group"),)),
Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)))
},
{"resource_id": UUID("04ad9e09-94ea-4390-8a02-11f92999806b"),
"user_id": UUID("9a0c7ce5-2f40-4e78-979e-bf3527a59579"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description="view a resource and use it in computations"),)),)
},
{"resource_id": UUID("26ad1668-29f5-439d-b905-84d551f85955"),
"user_id": UUID("9a0c7ce5-2f40-4e78-979e-bf3527a59579"),
"roles": (Role(
role_id=UUID("fd88bfed-d869-4969-87f2-67c4e8446ecb"),
role_name="public-view",
user_editable=False,
privileges=(
Privilege(
privilege_id="group:resource:view-resource",
privilege_description=(
"view a resource and use it in computations")),)),)})))))
def test_user_roles(
fxtr_resource_user_roles,
user,
expected
):
"""
GIVEN: an authenticated user
WHEN: we request the user's privileges
THEN: return **ALL** the privileges attached to the user
"""
conn, *_others = fxtr_resource_user_roles
assert user_roles(conn, user) == expected