about summary refs log tree commit diff
path: root/gn2/tests/unit/wqflask/snp_browser
diff options
context:
space:
mode:
authorArun Isaac2023-12-29 18:55:37 +0000
committerArun Isaac2023-12-29 19:01:46 +0000
commit204a308be0f741726b9a620d88fbc22b22124c81 (patch)
treeb3cf66906674020b530c844c2bb4982c8a0e2d39 /gn2/tests/unit/wqflask/snp_browser
parent83062c75442160427b50420161bfcae2c5c34c84 (diff)
downloadgenenetwork2-204a308be0f741726b9a620d88fbc22b22124c81.tar.gz
Namespace all modules under gn2.
We move all modules under a gn2 directory. This is important for
"correct" packaging and deployment as a Guix service.
Diffstat (limited to 'gn2/tests/unit/wqflask/snp_browser')
-rw-r--r--gn2/tests/unit/wqflask/snp_browser/__init__.py0
-rw-r--r--gn2/tests/unit/wqflask/snp_browser/test_snp_browser.py206
2 files changed, 206 insertions, 0 deletions
diff --git a/gn2/tests/unit/wqflask/snp_browser/__init__.py b/gn2/tests/unit/wqflask/snp_browser/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/gn2/tests/unit/wqflask/snp_browser/__init__.py
diff --git a/gn2/tests/unit/wqflask/snp_browser/test_snp_browser.py b/gn2/tests/unit/wqflask/snp_browser/test_snp_browser.py
new file mode 100644
index 00000000..c33f46ef
--- /dev/null
+++ b/gn2/tests/unit/wqflask/snp_browser/test_snp_browser.py
@@ -0,0 +1,206 @@
+import unittest
+from unittest import mock
+from gn2.wqflask import app
+from gn2.wqflask.snp_browser.snp_browser import get_gene_id
+from gn2.wqflask.snp_browser.snp_browser import get_gene_id_name_dict
+from gn2.wqflask.snp_browser.snp_browser import check_if_in_gene
+from gn2.wqflask.snp_browser.snp_browser import get_browser_sample_lists
+from gn2.wqflask.snp_browser.snp_browser import get_header_list
+
+
+class TestSnpBrowser(unittest.TestCase):
+    def setUp(self):
+        self.app_context = app.app_context()
+        self.app_context.push()
+
+    def tearDown(self):
+        self.app_context.pop()
+
+    def test_get_header_list(self):
+        empty_columns = {
+            "snp_source": "false",
+            "conservation_score": "true",
+            "gene_name": "false",
+            "transcript": "false",
+            "exon": "false",
+            "domain_2": "true",
+            "function": "false",
+            "function_details": "true",
+        }
+        strains = {"mouse": ["S1", "S2", "S3", "S4", "S5"], "rat": []}
+        expected_results = (
+            [
+                [
+                    "Index",
+                    "SNP ID",
+                    "Chr",
+                    "Mb",
+                    "Alleles",
+                    "ConScore",
+                    "Domain 1",
+                    "Domain 2",
+                    "Details",
+                ],
+                ["S1", "S2", "S3", "S4", "S5"],
+            ],
+            5,
+            [
+                "index",
+                "snp_name",
+                "chr",
+                "mb_formatted",
+                "alleles",
+                "conservation_score",
+                "domain_1",
+                "domain_2",
+                "function_details",
+                "S1",
+                "S2",
+                "S3",
+                "S4",
+                "S5",
+            ],
+        )
+
+        results_with_snp = get_header_list(
+            variant_type="SNP",
+            strains=strains,
+            species="Mouse",
+            empty_columns=empty_columns,
+        )
+        results_with_indel = get_header_list(
+            variant_type="InDel", strains=strains, species="rat", empty_columns=[]
+        )
+        expected_results_with_indel = (
+            [
+                "Index",
+                "ID",
+                "Type",
+                "InDel Chr",
+                "Mb Start",
+                "Mb End",
+                "Strand",
+                "Size",
+                "Sequence",
+                "Source",
+            ],
+            0,
+            [
+                "index",
+                "indel_name",
+                "indel_type",
+                "indel_chr",
+                "indel_mb_s",
+                "indel_mb_e",
+                "indel_strand",
+                "indel_size",
+                "indel_sequence",
+                "source_name",
+            ],
+        )
+
+        self.assertEqual(expected_results, results_with_snp)
+        self.assertEqual(expected_results_with_indel, results_with_indel)
+
+    @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
+    def test_get_gene_id(self, mock_db):
+        db_query_value = (
+            "SELECT geneId FROM GeneList WHERE " "SpeciesId = %s AND geneSymbol = %s"
+        )
+        conn = mock.MagicMock()
+        mock_db.return_value.__enter__.return_value = conn
+        with conn.cursor() as cursor:
+            cursor.fetchone.return_value = (
+                ("517d729f-aa13-4413" "-a885-40a3f7ff768a"),
+            )
+
+            results = get_gene_id(
+                species_id="c9c0f59e-1259-4cba-91e6-831ef1a99c83", gene_name="INSR"
+            )
+            cursor.execute.assert_called_once_with(
+                db_query_value, ("c9c0f59e-1259-4cba-91e6-831ef1a99c83", "INSR")
+            )
+            self.assertEqual(results, "517d729f-aa13-4413-a885-40a3f7ff768a")
+
+    @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
+    def test_gene_id_name_dict(self, mock_db):
+        no_gene_names = []
+        conn = mock.MagicMock()
+        mock_db.return_value.__enter__.return_value = conn
+        with conn.cursor() as cursor:
+            cursor.fetchall.side_effect = [
+                [],
+                [
+                    ("fsdf43-fseferger-f22", "GH1"),
+                    ("1sdf43-fsewferger-f22", "GH2"),
+                    ("fwdj43-fstferger-f22", "GH3"),
+                ],
+            ]
+            self.assertEqual(
+                "",
+                get_gene_id_name_dict(
+                    species_id="fregb343bui43g4", gene_name_list=no_gene_names
+                ),
+            )
+            gene_name_list = ["GH1", "GH2", "GH3"]
+            no_results = get_gene_id_name_dict(
+                species_id="ret3-32rf32", gene_name_list=gene_name_list
+            )
+            results_found = get_gene_id_name_dict(
+                species_id="ret3-32rf32", gene_name_list=gene_name_list
+            )
+            expected_found = {
+                "GH1": "fsdf43-fseferger-f22",
+                "GH2": "1sdf43-fsewferger-f22",
+                "GH3": "fwdj43-fstferger-f22",
+            }
+            db_query_value = (
+                "SELECT geneId, geneSymbol FROM GeneList WHERE "
+                "SpeciesId = %s AND geneSymbol in (%s, %s, %s)"
+            )
+            cursor.execute.assert_called_with(
+                db_query_value, ("ret3-32rf32", "GH1", "GH2", "GH3")
+            )
+            self.assertEqual(results_found, expected_found)
+            self.assertEqual(no_results, {})
+
+    @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
+    def test_check_if_in_gene(self, mock_db):
+        conn = mock.MagicMock()
+        mock_db.return_value.__enter__.return_value = conn
+        with conn.cursor() as cursor:
+            cursor.fetchone.side_effect = [("fsdf-232sdf-sdf", "GHA"), ""]
+            results_found = check_if_in_gene(
+                species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr_="CH1", mb=12.09
+            )
+            self.assertEqual(results_found, ["fsdf-232sdf-sdf", "GHA"])
+            db_query_value = (
+                "SELECT geneId, geneSymbol FROM GeneList "
+                "WHERE SpeciesId = %s AND chromosome = %s "
+                "AND (txStart < %s AND txEnd > %s)"
+            )
+            gene_not_found = check_if_in_gene(
+                species_id="517d729f-aa13-4413-a885-40a3f7ff768a", chr_="CH1", mb=12.09
+            )
+            cursor.execute.assert_has_calls(
+                [
+                    mock.call(
+                        db_query_value,
+                        ("517d729f-aa13-4413-a885-40a3f7ff768a", "CH1", 12.09, 12.09),
+                    ),
+                    mock.call(
+                        db_query_value,
+                        ("517d729f-aa13-4413-a885-40a3f7ff768a", "CH1", 12.09, 12.09),
+                    ),
+                ]
+            )
+            self.assertEqual(gene_not_found, "")
+
+    @mock.patch("wqflask.snp_browser.snp_browser.database_connection")
+    def test_get_browser_sample_lists(self, mock_db):
+        conn = mock.MagicMock()
+        mock_db.return_value.__enter__.return_value = conn
+        with conn.cursor() as cursor:
+            cursor.execute.return_value.fetchall.return_value = []
+            results = get_browser_sample_lists(species_id="12")
+            self.assertEqual(results, {"mouse": [], "rat": []})