about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-10-02 09:00:13 +0300
committerFrederick Muriuki Muriithi2023-10-02 09:00:13 +0300
commitdd00a799a7f8b00c7f27460cb2be2b39b8a47c1c (patch)
treec8416fdaafc7b5006d33f550c840392c08d701dc
parent90d1b58ebd169158dd2022565ce23d78c9230085 (diff)
downloadgn-auth-dd00a799a7f8b00c7f27460cb2be2b39b8a47c1c.tar.gz
migrations: New migration - InbredSet Resources
Provide a new migration to create tables to handle the InbredSet
resources. The migration also sets up the resource category and the
related privileges.
-rw-r--r--migrations/auth/20231002_01_tzxTf-link-inbredsets-to-auth-system.py84
-rw-r--r--tests/unit/auth/test_migrations_add_data_to_table.py16
-rw-r--r--tests/unit/auth/test_migrations_create_tables.py7
3 files changed, 105 insertions, 2 deletions
diff --git a/migrations/auth/20231002_01_tzxTf-link-inbredsets-to-auth-system.py b/migrations/auth/20231002_01_tzxTf-link-inbredsets-to-auth-system.py
new file mode 100644
index 0000000..402e9a5
--- /dev/null
+++ b/migrations/auth/20231002_01_tzxTf-link-inbredsets-to-auth-system.py
@@ -0,0 +1,84 @@
+"""
+link InbredSets to auth system
+"""
+
+from yoyo import step
+
+__depends__ = {'20230925_01_TWJuR-add-new-public-view-role', '__init__'}
+
+steps = [
+    step(
+        """
+        INSERT INTO resource_categories
+        (
+          resource_category_id,
+          resource_category_key,
+          resource_category_description,
+          resource_meta
+        )
+        VALUES
+        (
+          'b3654600-4ab0-4745-8292-5849b34173a7',
+          'inbredset-group',
+          'A resource that controls access to a particular InbredSet group',
+          '{"default-access-level":"public-read"}'
+        )
+        """,
+        """
+        DELETE FROM resource_categories WHERE
+          resource_category_id = 'b3654600-4ab0-4745-8292-5849b34173a7'
+        """
+    ),
+    step(
+        """
+        CREATE TABLE IF NOT EXISTS linked_inbredset_groups
+        -- Link InbredSet groups in MariaDB to auth system
+        (
+          data_link_id TEXT NOT NULL PRIMARY KEY, -- A new ID for the auth system
+          SpeciesId TEXT NOT NULL, -- Species ID in MariaDB
+          InbredSetId TEXT NOT NULL, -- The InbredSet ID in MariaDB
+          InbredSetName TEXT NOT NULL, -- The InbredSet group's name in MariaDB
+          InbredSetFullName TEXT NOT NULL, -- The InbredSet group's full name in MariaDB
+          UNIQUE(SpeciesId, InbredSetId)
+        ) WITHOUT ROWID
+        """,
+        "DROP TABLE IF EXISTS linked_inbredset_groups"),
+    step(
+        """
+        CREATE TABLE IF NOT EXISTS inbredset_group_resources
+        -- Link the InbredSet data to a specific resource
+        (
+          resource_id TEXT NOT NULL, -- Linked resource: one-to-one
+          data_link_id TEXT NOT NULL,
+          PRIMARY KEY(resource_id, data_link_id),
+          UNIQUE(resource_id), -- resource is linked to only one InbredSet
+          UNIQUE(data_link_id), -- InbredSet is linked to only one resource
+          FOREIGN KEY(resource_id)
+            REFERENCES resources(resource_id)
+            ON UPDATE CASCADE ON DELETE RESTRICT,
+          FOREIGN KEY(data_link_id)
+            REFERENCES linked_inbredset_groups(data_link_id)
+            ON UPDATE CASCADE ON DELETE RESTRICT
+        ) WITHOUT ROWID
+        """,
+        "DROP TABLE IF EXISTS inbredset_group_resources"),
+    step(
+        """
+        INSERT INTO privileges(privilege_id, privilege_description) VALUES
+        ('system:inbredset:create-case-attribute', 'Create a new case attribute for an InbredSet group.'),
+        ('system:inbredset:delete-case-attribute', 'Delete an existing case-attribute from an InbredSet group'),
+        ('system:inbredset:edit-case-attribute', 'Edit the values of case-attributes of an InbredSet group'),
+        ('system:inbredset:view-case-attribute', 'View the case-attributes of an InbredSet group'),
+        ('system:inbredset:apply-case-attribute-edit', 'Apply an edit to case-attributes performed by another user for an InbredSet group'),
+        ('system:inbredset:reject-case-attribute-edit', 'Reject an edit to case-attributes performed by another user for an InbredSet group')
+        """,
+        """
+        DELETE FROM privileges WHERE privilege_id IN (
+          'system:inbredset:create-case-attribute',
+          'system:inbredset:delete-case-attribute',
+          'system:inbredset:edit-case-attribute',
+          'system:inbredset:view-case-attribute',
+          'system:inbredset:apply-case-attribute-edit',
+          'system:inbredset:reject-case-attribute-edit')
+        """)
+]
diff --git a/tests/unit/auth/test_migrations_add_data_to_table.py b/tests/unit/auth/test_migrations_add_data_to_table.py
index b686f25..d9e2ca4 100644
--- a/tests/unit/auth/test_migrations_add_data_to_table.py
+++ b/tests/unit/auth/test_migrations_add_data_to_table.py
@@ -22,7 +22,21 @@ test_params = (
       ("a0e67630-d502-4b9f-b23f-6805d0f30e30",
        "5103cc68-96f8-4ebb-83a4-a31692402c9b"),
       ("a0e67630-d502-4b9f-b23f-6805d0f30e30",
-       "1c59eff5-9336-4ed2-a166-8f70d4cb012e"))),)
+       "1c59eff5-9336-4ed2-a166-8f70d4cb012e"))),
+    ("20231002_01_tzxTf-link-inbredsets-to-auth-system.py",
+     "SELECT privilege_id FROM privileges WHERE privilege_id IN (?, ?, ?, ?, ?, ?)",
+     ("system:inbredset:create-case-attribute",
+      "system:inbredset:delete-case-attribute",
+      "system:inbredset:edit-case-attribute",
+      "system:inbredset:view-case-attribute",
+      "system:inbredset:apply-case-attribute-edit",
+      "system:inbredset:reject-case-attribute-edit"),
+     (("system:inbredset:create-case-attribute",),
+      ("system:inbredset:delete-case-attribute",),
+      ("system:inbredset:edit-case-attribute",),
+      ("system:inbredset:view-case-attribute",),
+      ("system:inbredset:apply-case-attribute-edit",),
+      ("system:inbredset:reject-case-attribute-edit",))))
 
 @pytest.mark.unit_test
 @pytest.mark.parametrize("migration_file,query,query_params,data", test_params)
diff --git a/tests/unit/auth/test_migrations_create_tables.py b/tests/unit/auth/test_migrations_create_tables.py
index 8b0f36e..90c3fb8 100644
--- a/tests/unit/auth/test_migrations_create_tables.py
+++ b/tests/unit/auth/test_migrations_create_tables.py
@@ -43,7 +43,11 @@ migrations_and_tables = (
     ("20230907_01_pjnxz-refactor-add-resource-ownership-table.py",
      "resource_ownership"),
     ("20230907_04_3LnrG-refactor-create-group-resources-table.py",
-     "group_resources"))
+     "group_resources"),
+    ("20231002_01_tzxTf-link-inbredsets-to-auth-system.py",
+     "linked_inbredset_groups"),
+    ("20231002_01_tzxTf-link-inbredsets-to-auth-system.py",
+     "inbredset_group_resources"))
 
 @pytest.mark.unit_test
 @pytest.mark.parametrize("migration_file,the_table", migrations_and_tables)
@@ -64,6 +68,7 @@ def test_create_table(
         apply_single_migration(backend, get_migration(migration_path))
         cursor.execute("SELECT name FROM sqlite_schema WHERE type='table'")
         result_after_migration = cursor.fetchall()
+        rollback_single_migration(backend, get_migration(migration_path))
 
     rollback_migrations(backend, older_migrations)
     assert the_table not in [row[0] for row in result_before_migration]