about summary refs log tree commit diff
path: root/tests
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
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')
-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",)))