aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-12-12 10:04:10 +0300
committerFrederick Muriuki Muriithi2022-12-12 13:28:14 +0300
commit8d728774bfc5371c61b483cb5470f45456de028b (patch)
treedee6570ca7bf9279c9bf97cdf5d1eed37fe22764 /tests/unit
parentf0aea560d2bbbaf4050a531d2769b1726b5b4cb6 (diff)
downloadgenenetwork3-8d728774bfc5371c61b483cb5470f45456de028b.tar.gz
tests: Reorganise fixtures
Split the fixtures into separate modules for easier management * tests/unit/auth/conftest.py: Import all from the `fixtures` package. Delete all fixtures from the file * tests/unit/auth/fixtures/__init__.py: new `fixtures` package * tests/unit/auth/fixtures/group_fixtures.py: new groups fixtures module * tests/unit/auth/fixtures/migration_fixtures.py: new migrations fixtures module * tests/unit/auth/fixtures/resource_fixtures.py: new resources fixtures module * tests/unit/auth/fixtures/role_fixtures.py: new roles fixtures module * tests/unit/auth/fixtures/user_fixtures.py: new users fixtures module
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/auth/conftest.py179
-rw-r--r--tests/unit/auth/fixtures/__init__.py7
-rw-r--r--tests/unit/auth/fixtures/group_fixtures.py44
-rw-r--r--tests/unit/auth/fixtures/migration_fixtures.py51
-rw-r--r--tests/unit/auth/fixtures/resource_fixtures.py56
-rw-r--r--tests/unit/auth/fixtures/role_fixtures.py9
-rw-r--r--tests/unit/auth/fixtures/user_fixtures.py43
7 files changed, 212 insertions, 177 deletions
diff --git a/tests/unit/auth/conftest.py b/tests/unit/auth/conftest.py
index 649fad4..7082910 100644
--- a/tests/unit/auth/conftest.py
+++ b/tests/unit/auth/conftest.py
@@ -1,177 +1,2 @@
-"""Fixtures for auth tests."""
-import uuid
-
-import pytest
-from yoyo.backends import DatabaseBackend
-from yoyo import get_backend, read_migrations
-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")
-def auth_testdb_path(test_app_config): # pylint: disable=redefined-outer-name
- """Get the test application's auth database file"""
- return test_app_config["AUTH_DB"]
-
-@pytest.fixture(scope="session")
-def auth_migrations_dir(test_app_config): # pylint: disable=redefined-outer-name
- """Get the test application's auth database file"""
- return test_app_config["AUTH_MIGRATIONS"]
-
-def apply_single_migration(backend: DatabaseBackend, migration: Migration):# pylint: disable=[redefined-outer-name]
- """Utility to apply a single migration"""
- apply_migrations(backend, MigrationList([migration]))
-
-def rollback_single_migration(backend: DatabaseBackend, migration: Migration):# pylint: disable=[redefined-outer-name]
- """Utility to rollback a single migration"""
- rollback_migrations(backend, MigrationList([migration]))
-
-@pytest.fixture(scope="session")
-def backend(auth_testdb_path):# pylint: disable=redefined-outer-name
- """Fixture: retrieve yoyo backend for auth database"""
- return get_backend(f"sqlite:///{auth_testdb_path}")
-
-@pytest.fixture(scope="session")
-def all_migrations(auth_migrations_dir): # pylint: disable=redefined-outer-name
- """Retrieve all the migrations"""
- return read_migrations(auth_migrations_dir)
-
-@pytest.fixture(scope="function")
-def conn_after_auth_migrations(backend, auth_testdb_path, all_migrations): # pylint: disable=redefined-outer-name
- """Run all migrations and return a connection to the database after"""
- apply_migrations(backend, all_migrations)
- with db.connection(auth_testdb_path) as conn:
- yield conn
-
- rollback_migrations(backend, all_migrations)
-
-def migrations_up_to(migration, migrations_dir):
- """Run all the migration before `migration`."""
- migrations = read_migrations(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 (?, ?)"
- with db.cursor(conn_after_auth_migrations) as cursor:
- cursor.executemany(
- query, tuple(
- (str(group.group_id), group.group_name)
- for group in TEST_GROUPS))
-
- yield (conn_after_auth_migrations, TEST_GROUPS[0])
-
-TEST_USERS = (
- User(uuid.UUID("ecb52977-3004-469e-9428-2a1856725c7f"), "group@lead.er",
- "Group Leader"),
- User(uuid.UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
- "group@mem.ber01", "Group Member 01"),
- User(uuid.UUID("ae9c6245-0966-41a5-9a5e-20885a96bea7"),
- "group@mem.ber02", "Group Member 02"),
- User(uuid.UUID("9a0c7ce5-2f40-4e78-979e-bf3527a59579"),
- "unaff@iliated.user", "Unaffiliated User"))
-
-@pytest.fixture(scope="function")
-def test_users(conn_after_auth_migrations):# pylint: disable=[redefined-outer-name]
- """Fixture: setup test users."""
- query = "INSERT INTO users(user_id, email, name) VALUES (?, ?, ?)"
- query_user_roles = "INSERT INTO user_roles(user_id, role_id) VALUES (?, ?)"
- test_user_roles = (
- ("ecb52977-3004-469e-9428-2a1856725c7f",
- "a0e67630-d502-4b9f-b23f-6805d0f30e30"),)
- with db.cursor(conn_after_auth_migrations) as cursor:
- cursor.executemany(query, (
- (str(user.user_id), user.email, user.name) for user in TEST_USERS))
- cursor.executemany(query_user_roles, test_user_roles)
-
- yield (conn_after_auth_migrations, TEST_USERS)
-
- with db.cursor(conn_after_auth_migrations) as cursor:
- cursor.executemany(
- "DELETE FROM user_roles WHERE user_id=?",
- (("ecb52977-3004-469e-9428-2a1856725c7f",),))
- cursor.executemany(
- "DELETE FROM users WHERE user_id=?",
- (("ecb52977-3004-469e-9428-2a1856725c7f",),
- ("21351b66-8aad-475b-84ac-53ce528451e3",),
- ("ae9c6245-0966-41a5-9a5e-20885a96bea7",),
- ("9a0c7ce5-2f40-4e78-979e-bf3527a59579",)))
-
-@pytest.fixture(scope="function")
-def test_users_in_group(test_group, test_users):# pylint: disable=[redefined-outer-name]
- """Link the users to the groups."""
- conn = test_group[0]
- group = test_group[1]
- users = test_users[1]
- query_params = tuple(
- (str(group.group_id), str(user.user_id)) for user in users
- if user.email not in ("unaff@iliated.user",))
- with db.cursor(conn) as cursor:
- cursor.executemany(
- "INSERT INTO group_users(group_id, user_id) VALUES (?, ?)",
- query_params)
-
- yield (conn, group, users)
-
- with db.cursor(conn) as cursor:
- 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
+"""Module for fixtures and test utilities"""
+from .fixtures import * # pylint: disable=[wildcard-import,unused-wildcard-import]
diff --git a/tests/unit/auth/fixtures/__init__.py b/tests/unit/auth/fixtures/__init__.py
new file mode 100644
index 0000000..7adae3f
--- /dev/null
+++ b/tests/unit/auth/fixtures/__init__.py
@@ -0,0 +1,7 @@
+"""pytest's conftest as a module."""
+from .role_fixtures import *
+from .user_fixtures import *
+from .group_fixtures import *
+from .resource_fixtures import *
+# from .privilege_fixtures import *
+from .migration_fixtures import *
diff --git a/tests/unit/auth/fixtures/group_fixtures.py b/tests/unit/auth/fixtures/group_fixtures.py
new file mode 100644
index 0000000..a106ef4
--- /dev/null
+++ b/tests/unit/auth/fixtures/group_fixtures.py
@@ -0,0 +1,44 @@
+"""Fixtures and utilities for group-related tests"""
+import uuid
+
+import pytest
+
+from gn3.auth import db
+from gn3.auth.authorisation.groups import Group
+
+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 (?, ?)"
+ with db.cursor(conn_after_auth_migrations) as cursor:
+ cursor.executemany(
+ query, tuple(
+ (str(group.group_id), group.group_name)
+ for group in TEST_GROUPS))
+
+ yield (conn_after_auth_migrations, TEST_GROUPS[0])
+
+@pytest.fixture(scope="function")
+def test_users_in_group(test_group, test_users):# pylint: disable=[redefined-outer-name]
+ """Link the users to the groups."""
+ conn = test_group[0]
+ group = test_group[1]
+ users = test_users[1]
+ query_params = tuple(
+ (str(group.group_id), str(user.user_id)) for user in users
+ if user.email not in ("unaff@iliated.user",))
+ with db.cursor(conn) as cursor:
+ cursor.executemany(
+ "INSERT INTO group_users(group_id, user_id) VALUES (?, ?)",
+ query_params)
+
+ yield (conn, group, users)
+
+ with db.cursor(conn) as cursor:
+ cursor.executemany(
+ "DELETE FROM group_users WHERE group_id=? AND user_id=?",
+ query_params)
diff --git a/tests/unit/auth/fixtures/migration_fixtures.py b/tests/unit/auth/fixtures/migration_fixtures.py
new file mode 100644
index 0000000..3e511b1
--- /dev/null
+++ b/tests/unit/auth/fixtures/migration_fixtures.py
@@ -0,0 +1,51 @@
+"""Fixtures and utilities for migration-related tests"""
+import pytest
+from yoyo.backends import DatabaseBackend
+from yoyo import get_backend, read_migrations
+from yoyo.migrations import Migration, MigrationList
+
+from gn3.auth import db
+from gn3.migrations import apply_migrations, rollback_migrations
+
+@pytest.fixture(scope="session")
+def auth_testdb_path(test_app_config): # pylint: disable=redefined-outer-name
+ """Get the test application's auth database file"""
+ return test_app_config["AUTH_DB"]
+
+@pytest.fixture(scope="session")
+def auth_migrations_dir(test_app_config): # pylint: disable=redefined-outer-name
+ """Get the test application's auth database file"""
+ return test_app_config["AUTH_MIGRATIONS"]
+
+def apply_single_migration(backend: DatabaseBackend, migration: Migration):# pylint: disable=[redefined-outer-name]
+ """Utility to apply a single migration"""
+ apply_migrations(backend, MigrationList([migration]))
+
+def rollback_single_migration(backend: DatabaseBackend, migration: Migration):# pylint: disable=[redefined-outer-name]
+ """Utility to rollback a single migration"""
+ rollback_migrations(backend, MigrationList([migration]))
+
+@pytest.fixture(scope="session")
+def backend(auth_testdb_path):# pylint: disable=redefined-outer-name
+ """Fixture: retrieve yoyo backend for auth database"""
+ return get_backend(f"sqlite:///{auth_testdb_path}")
+
+@pytest.fixture(scope="session")
+def all_migrations(auth_migrations_dir): # pylint: disable=redefined-outer-name
+ """Retrieve all the migrations"""
+ return read_migrations(auth_migrations_dir)
+
+@pytest.fixture(scope="function")
+def conn_after_auth_migrations(backend, auth_testdb_path, all_migrations): # pylint: disable=redefined-outer-name
+ """Run all migrations and return a connection to the database after"""
+ apply_migrations(backend, all_migrations)
+ with db.connection(auth_testdb_path) as conn:
+ yield conn
+
+ rollback_migrations(backend, all_migrations)
+
+def migrations_up_to(migration, migrations_dir):
+ """Run all the migration before `migration`."""
+ migrations = read_migrations(migrations_dir)
+ index = [mig.path for mig in migrations].index(migration)
+ return MigrationList(migrations[0:index])
diff --git a/tests/unit/auth/fixtures/resource_fixtures.py b/tests/unit/auth/fixtures/resource_fixtures.py
new file mode 100644
index 0000000..1d6c25b
--- /dev/null
+++ b/tests/unit/auth/fixtures/resource_fixtures.py
@@ -0,0 +1,56 @@
+"""Fixtures and utilities for resource-related tests"""
+import uuid
+
+import pytest
+
+from gn3.auth import db
+from gn3.auth.authorisation.resources import Resource, ResourceCategory
+
+from .group_fixtures import TEST_GROUPS
+
+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/fixtures/role_fixtures.py b/tests/unit/auth/fixtures/role_fixtures.py
new file mode 100644
index 0000000..f8b0f6f
--- /dev/null
+++ b/tests/unit/auth/fixtures/role_fixtures.py
@@ -0,0 +1,9 @@
+"""Fixtures and utilities for role-related tests"""
+import pytest
+
+from gn3.auth import db
+
+@pytest.fixture(scope="function")
+def fixture_user_roles(test_users_in_group):
+ conn, *_others = test_users_in_group
+ raise Exception("NOT IMPLEMENTED ...")
diff --git a/tests/unit/auth/fixtures/user_fixtures.py b/tests/unit/auth/fixtures/user_fixtures.py
new file mode 100644
index 0000000..cc43a74
--- /dev/null
+++ b/tests/unit/auth/fixtures/user_fixtures.py
@@ -0,0 +1,43 @@
+"""Fixtures and utilities for user-related tests"""
+import uuid
+
+import pytest
+
+from gn3.auth import db
+from gn3.auth.authentication.users import User
+
+TEST_USERS = (
+ User(uuid.UUID("ecb52977-3004-469e-9428-2a1856725c7f"), "group@lead.er",
+ "Group Leader"),
+ User(uuid.UUID("21351b66-8aad-475b-84ac-53ce528451e3"),
+ "group@mem.ber01", "Group Member 01"),
+ User(uuid.UUID("ae9c6245-0966-41a5-9a5e-20885a96bea7"),
+ "group@mem.ber02", "Group Member 02"),
+ User(uuid.UUID("9a0c7ce5-2f40-4e78-979e-bf3527a59579"),
+ "unaff@iliated.user", "Unaffiliated User"))
+
+@pytest.fixture(scope="function")
+def test_users(conn_after_auth_migrations):# pylint: disable=[redefined-outer-name]
+ """Fixture: setup test users."""
+ query = "INSERT INTO users(user_id, email, name) VALUES (?, ?, ?)"
+ query_user_roles = "INSERT INTO user_roles(user_id, role_id) VALUES (?, ?)"
+ test_user_roles = (
+ ("ecb52977-3004-469e-9428-2a1856725c7f",
+ "a0e67630-d502-4b9f-b23f-6805d0f30e30"),)
+ with db.cursor(conn_after_auth_migrations) as cursor:
+ cursor.executemany(query, (
+ (str(user.user_id), user.email, user.name) for user in TEST_USERS))
+ cursor.executemany(query_user_roles, test_user_roles)
+
+ yield (conn_after_auth_migrations, TEST_USERS)
+
+ with db.cursor(conn_after_auth_migrations) as cursor:
+ cursor.executemany(
+ "DELETE FROM user_roles WHERE user_id=?",
+ (("ecb52977-3004-469e-9428-2a1856725c7f",),))
+ cursor.executemany(
+ "DELETE FROM users WHERE user_id=?",
+ (("ecb52977-3004-469e-9428-2a1856725c7f",),
+ ("21351b66-8aad-475b-84ac-53ce528451e3",),
+ ("ae9c6245-0966-41a5-9a5e-20885a96bea7",),
+ ("9a0c7ce5-2f40-4e78-979e-bf3527a59579",)))