aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/auth/test_roles.py
blob: 21d8e868394317d4bc3cedfb50140c565f254633 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""Test functions dealing with group management."""
import uuid

import pytest

from gn3.auth import db
from gn3.auth.authorisation.privileges import Privilege
from gn3.auth.authorisation.roles 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"
}

uuid_fn = lambda : uuid.UUID("d32611e3-07fc-4564-b56c-786c6db6de2b")

PRIVILEGES = (
    Privilege(uuid.UUID("7f261757-3211-4f28-a43f-a09b800b164d"),
              "view-resource"),
    Privilege(uuid.UUID("2f980855-959b-4339-b80e-25d1ec286e21"),
              "edit-resource"))

@pytest.mark.unit_test
@pytest.mark.parametrize(
    "user,expected", tuple(zip(conftest.TEST_USERS, (
        Role(
            uuid.UUID("d32611e3-07fc-4564-b56c-786c6db6de2b"), "a_test_role",
            PRIVILEGES), create_role_failure, create_role_failure,
        create_role_failure, create_role_failure))))
def test_create_role(# pylint: disable=[too-many-arguments]
        fxtr_app, auth_testdb_path, mocker, fxtr_users, user, expected):# pylint: disable=[unused-argument]
    """
    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
    """
    mocker.patch("gn3.auth.authorisation.roles.uuid4", uuid_fn)
    with fxtr_app.app_context() as flask_context:
        flask_context.g.user = user
        with db.connection(auth_testdb_path) as conn, db.cursor(conn) as cursor:
            the_role = create_role(cursor, "a_test_role", PRIVILEGES)
            assert the_role == expected

@pytest.mark.unit_test
@pytest.mark.parametrize(
    "user,expected",
    (zip(TEST_USERS,
         ((Role(
             role_id=uuid.UUID('a0e67630-d502-4b9f-b23f-6805d0f30e30'),
             role_name='group-leader',
             privileges=(
                 Privilege(
                     privilege_id=uuid.UUID('13ec2a94-4f1a-442d-aad2-936ad6dd5c57'),
                     privilege_name='delete-group'),
                 Privilege(
                     privilege_id=uuid.UUID('1c59eff5-9336-4ed2-a166-8f70d4cb012e'),
                     privilege_name='delete-role'),
                 Privilege(
                     privilege_id=uuid.UUID('221660b1-df05-4be1-b639-f010269dbda9'),
                     privilege_name='create-role'),
                 Privilege(
                     privilege_id=uuid.UUID('2f980855-959b-4339-b80e-25d1ec286e21'),
                     privilege_name='edit-resource'),
                 Privilege(
                     privilege_id=uuid.UUID('3ebfe79c-d159-4629-8b38-772cf4bc2261'),
                     privilege_name='view-group'),
                 Privilege(
                     privilege_id=uuid.UUID('5103cc68-96f8-4ebb-83a4-a31692402c9b'),
                     privilege_name='assign-role'),
                 Privilege(
                     privilege_id=uuid.UUID('52576370-b3c7-4e6a-9f7e-90e9dbe24d8f'),
                     privilege_name='edit-group'),
                 Privilege(
                     privilege_id=uuid.UUID('7bcca363-cba9-4169-9e31-26bdc6179b28'),
                     privilege_name='edit-role'),
                 Privilege(
                     privilege_id=uuid.UUID('7f261757-3211-4f28-a43f-a09b800b164d'),
                     privilege_name='view-resource'),
                 Privilege(
                     privilege_id=uuid.UUID('aa25b32a-bff2-418d-b0a2-e26b4a8f089b'),
                     privilege_name='create-resource'),
                 Privilege(
                     privilege_id=uuid.UUID('ae4add8c-789a-4d11-a6e9-a306470d83d9'),
                     privilege_name='add-group-member'),
                 Privilege(
                     privilege_id=uuid.UUID('d2a070fd-e031-42fb-ba41-d60cf19e5d6d'),
                     privilege_name='delete-resource'),
                 Privilege(
                     privilege_id=uuid.UUID('d4afe2b3-4ca0-4edd-b37d-966535b5e5bd'),
                     privilege_name='transfer-group-leadership'),
             Privilege(
                 privilege_id=uuid.UUID('f1bd3f42-567e-4965-9643-6d1a52ddee64'),
                 privilege_name='remove-group-member'))),
           Role(
               role_id=uuid.UUID("ade7e6b0-ba9c-4b51-87d0-2af7fe39a347"),
               role_name="group-creator",
               privileges=(
                   Privilege(
                       privilege_id=uuid.UUID('4842e2aa-38b9-4349-805e-0a99a9cf8bff'),
                       privilege_name='create-group'),))),
          tuple(), tuple(), tuple()))))
def test_user_roles(fxtr_group_user_roles, user, expected):
    """
    GIVEN: an authenticated user
    WHEN: we request the user's privileges
    THEN: return **ALL** the privileges attached to the user
    """
    assert user_roles(fxtr_group_user_roles, user) == expected