aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-12-08 08:32:26 +0300
committerFrederick Muriuki Muriithi2022-12-08 08:35:42 +0300
commitb408d90f52766861071b6fefe01f8bf9d213432e (patch)
tree0a410830acdec6e3e25b33bb16a4255d15074fc5 /tests
parent836924e7dccddaceb036fe3a312ca6811ccf2228 (diff)
downloadgenenetwork3-b408d90f52766861071b6fefe01f8bf9d213432e.tar.gz
auth: test for `user_resources` function (incomplete)
* gn3/auth/authorisation/resources.py: dummy `user_resources` function * tests/unit/auth/conftest.py: (incomplete): Add some fixtures for testing the `user_resources` function * tests/unit/auth/test_resources.py: test the `user_resources` function
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/auth/conftest.py62
-rw-r--r--tests/unit/auth/test_resources.py22
2 files changed, 80 insertions, 4 deletions
diff --git a/tests/unit/auth/conftest.py b/tests/unit/auth/conftest.py
index e582640..649fad4 100644
--- a/tests/unit/auth/conftest.py
+++ b/tests/unit/auth/conftest.py
@@ -9,6 +9,8 @@ from yoyo.migrations import Migration, MigrationList
from gn3.auth import db
from gn3.auth.authentication.users import User
from gn3.auth.authorisation.groups import Group
+from gn3.auth.authorisation.resources import Resource, ResourceCategory
+
from gn3.migrations import apply_migrations, rollback_migrations
@pytest.fixture(scope="session")
@@ -54,16 +56,21 @@ def migrations_up_to(migration, migrations_dir):
index = [mig.path for mig in migrations].index(migration)
return MigrationList(migrations[0:index])
+TEST_GROUPS = (
+ Group(uuid.UUID("9988c21d-f02f-4d45-8966-22c968ac2fbf"), "TheTestGroup"),
+ Group(uuid.UUID("e37d59d7-c05e-4d67-b479-81e627d8d634"), "TheTestGroup"))
+
@pytest.fixture(scope="function")
def test_group(conn_after_auth_migrations):# pylint: disable=[redefined-outer-name]
"""Fixture: setup a test group."""
query = "INSERT INTO groups(group_id, group_name) VALUES (?, ?)"
- group_id = uuid.UUID("9988c21d-f02f-4d45-8966-22c968ac2fbf")
- group_name = "TheTestGroup"
with db.cursor(conn_after_auth_migrations) as cursor:
- cursor.execute(query, (str(group_id), group_name))
+ cursor.executemany(
+ query, tuple(
+ (str(group.group_id), group.group_name)
+ for group in TEST_GROUPS))
- yield (conn_after_auth_migrations, Group(group_id, group_name))
+ yield (conn_after_auth_migrations, TEST_GROUPS[0])
TEST_USERS = (
User(uuid.UUID("ecb52977-3004-469e-9428-2a1856725c7f"), "group@lead.er",
@@ -121,3 +128,50 @@ def test_users_in_group(test_group, test_users):# pylint: disable=[redefined-out
cursor.executemany(
"DELETE FROM group_users WHERE group_id=? AND user_id=?",
query_params)
+
+TEST_RESOURCES = (
+ Resource(TEST_GROUPS[0], uuid.UUID("26ad1668-29f5-439d-b905-84d551f85955"),
+ "ResourceG01R01",
+ ResourceCategory(uuid.UUID("48056f84-a2a6-41ac-8319-0e1e212cba2a"),
+ "genotype", "Genotype Dataset"),
+ True),
+ Resource(TEST_GROUPS[0], uuid.UUID("2130aec0-fefd-434d-92fd-9ca342348b2d"),
+ "ResourceG01R02",
+ ResourceCategory(uuid.UUID("548d684b-d4d1-46fb-a6d3-51a56b7da1b3"),
+ "phenotype", "Phenotype (Publish) Dataset"),
+ False),
+ Resource(TEST_GROUPS[0], uuid.UUID("e9a1184a-e8b4-49fb-b713-8d9cbeea5b83"),
+ "ResourceG01R03",
+ ResourceCategory(uuid.UUID("fad071a3-2fc8-40b8-992b-cdefe7dcac79"),
+ "mrna", "mRNA Dataset"),
+ False),
+ Resource(TEST_GROUPS[1], uuid.UUID("14496a1c-c234-49a2-978c-8859ea274054"),
+ "ResourceG02R01",
+ ResourceCategory(uuid.UUID("48056f84-a2a6-41ac-8319-0e1e212cba2a"),
+ "genotype", "Genotype Dataset"),
+ False),
+ Resource(TEST_GROUPS[1], uuid.UUID("04ad9e09-94ea-4390-8a02-11f92999806b"),
+ "ResourceG02R02",
+ ResourceCategory(uuid.UUID("fad071a3-2fc8-40b8-992b-cdefe7dcac79"),
+ "mrna", "mRNA Dataset"),
+ True))
+
+@pytest.fixture(scope="function")
+def test_resources(test_group):# pylint: disable=[redefined-outer-name]
+ """fixture: setup test resources in the database"""
+ conn, _group = test_group
+ with db.cursor(conn) as cursor:
+ cursor.executemany(
+ "INSERT INTO resources VALUES (?,?,?,?,?)",
+ ((str(res.group.group_id), str(res.resource_id), res.resource_name,
+ str(res.resource_category.resource_category_id),
+ 1 if res.public else 0) for res in TEST_RESOURCES))
+ return (conn, TEST_RESOURCES)
+
+@pytest.fixture(scope="function")
+def fixture_user_resources(test_users_in_group, test_resources):# pylint: disable=[redefined-outer-name, unused-argument]
+ """fixture: link users to roles and resources"""
+ conn, _resources = test_resources
+ ## TODO: setup user roles
+ ## TODO: attach user roles to specific resources
+ return conn
diff --git a/tests/unit/auth/test_resources.py b/tests/unit/auth/test_resources.py
index 6dc0e98..88edc77 100644
--- a/tests/unit/auth/test_resources.py
+++ b/tests/unit/auth/test_resources.py
@@ -51,3 +51,25 @@ def test_public_resources(test_resources):
conn, _res = test_resources
assert sorted(public_resources(conn), key=SORTKEY) == sorted(tuple(
res for res in conftest.TEST_RESOURCES if res.public), key=SORTKEY)
+
+PUBLIC_RESOURCES = sorted(conftest.TEST_RESOURCES, key=SORTKEY)
+
+@pytest.mark.skip # REMOVE THIS LINE!!!
+@pytest.mark.unit_test
+@pytest.mark.parametrize(
+ "user,expected",
+ tuple(zip(
+ conftest.TEST_USERS,
+ (sorted(conftest.TEST_RESOURCES, key=SORTKEY),
+ sorted(res for res in conftest.TEST_RESOURCES
+ if str(res.resource_id) not in
+ ("2130aec0-fefd-434d-92fd-9ca342348b2d",
+ "14496a1c-c234-49a2-978c-8859ea274054")),
+ PUBLIC_RESOURCES, PUBLIC_RESOURCES))))
+def test_user_resources(fixture_user_resources, user, expected):
+ """
+ GIVEN: some resources in the database
+ WHEN: a particular user's resources are requested
+ THEN: list only the resources for which the user can access
+ """
+ assert user_resources(fixture_user_resources, user) == expected