about summary refs log tree commit diff
path: root/tests/unit/computations
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-02-14 06:56:32 +0300
committerFrederick Muriuki Muriithi2022-02-17 06:37:30 +0300
commit74044f3c7985308b4996da3a52f91c5c20a19194 (patch)
treed86714b859b31cbbd1755522f8abd8eed16e321b /tests/unit/computations
parent67f517aa0f44f55dc691ffd791bf22ef7af0b02c (diff)
downloadgenenetwork3-74044f3c7985308b4996da3a52f91c5c20a19194.tar.gz
Use pytest's "mark" feature to categorise tests
Use pytest's `mark` feature to explicitly categorise the tests and run them
per category
Diffstat (limited to 'tests/unit/computations')
-rw-r--r--tests/unit/computations/test_correlation.py18
-rw-r--r--tests/unit/computations/test_dictify_by_samples.py1
-rw-r--r--tests/unit/computations/test_diff.py3
-rw-r--r--tests/unit/computations/test_gemma.py8
-rw-r--r--tests/unit/computations/test_parsers.py4
-rw-r--r--tests/unit/computations/test_partial_correlations.py9
-rw-r--r--tests/unit/computations/test_qtlreaper.py4
-rw-r--r--tests/unit/computations/test_rqtl.py2
-rw-r--r--tests/unit/computations/test_slink.py13
-rw-r--r--tests/unit/computations/test_wgcna.py6
10 files changed, 67 insertions, 1 deletions
diff --git a/tests/unit/computations/test_correlation.py b/tests/unit/computations/test_correlation.py
index 7523d99..69d4c52 100644
--- a/tests/unit/computations/test_correlation.py
+++ b/tests/unit/computations/test_correlation.py
@@ -2,6 +2,7 @@
 from unittest import TestCase
 from unittest import mock
 
+import pytest
 from collections import namedtuple
 import math
 from numpy.testing import assert_almost_equal
@@ -91,6 +92,7 @@ class DataBase(QueryableMixin):
 class TestCorrelation(TestCase):
     """Class for testing correlation functions"""
 
+    @pytest.mark.unit_test
     def test_normalize_values(self):
         """Function to test normalizing values """
 
@@ -106,6 +108,7 @@ class TestCorrelation(TestCase):
                 results = normalize_values(a_values, b_values)
                 self.assertEqual(list(zip(*list(results))), expected_result)
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.compute_corr_coeff_p_value")
     @mock.patch("gn3.computations.correlations.normalize_values")
     def test_compute_sample_r_correlation(self, norm_vals, compute_corr):
@@ -130,6 +133,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(bicor_results, ("1412_at", 0.8, 0.21, 7))
 
+    @pytest.mark.unit_test
     def test_filter_shared_sample_keys(self):
         """Function to  tests shared key between two dicts"""
 
@@ -157,6 +161,7 @@ class TestCorrelation(TestCase):
         self.assertEqual(list(zip(*list(results))), [filtered_this_samplelist,
                                                      filtered_target_samplelist])
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.compute_sample_r_correlation")
     @mock.patch("gn3.computations.correlations.filter_shared_sample_keys")
     def test_compute_all_sample(self, filter_shared_samples, sample_r_corr):
@@ -199,6 +204,7 @@ class TestCorrelation(TestCase):
             corr_method="pearson", trait_vals=('1.23', '6.565', '6.456'),
             target_samples_vals=('6.266', '6.565', '6.456'))
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.compute_corr_coeff_p_value")
     def test_tissue_correlation_for_trait(self, mock_compute_corr_coeff):
         """Test given a primary tissue values for a trait  and and a list of\
@@ -217,6 +223,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(tissue_results, expected_tissue_results)
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.fetch_lit_correlation_data")
     @mock.patch("gn3.computations.correlations.map_to_mouse_gene_id")
     def test_lit_correlation_for_trait(self, mock_mouse_gene_id, fetch_lit_data):
@@ -244,6 +251,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(lit_results, expected_results)
 
+    @pytest.mark.unit_test
     def test_fetch_lit_correlation_data(self):
         """Test for fetching lit correlation data from\
         the database where the input and mouse geneid are none
@@ -257,6 +265,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(results, ("1", 0))
 
+    @pytest.mark.unit_test
     def test_fetch_lit_correlation_data_db_query(self):
         """Test for fetching lit corr coefficent givent the input\
          input trait mouse gene id and mouse gene id
@@ -274,6 +283,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(expected_results, lit_results)
 
+    @pytest.mark.unit_test
     def test_query_lit_correlation_for_db_empty(self):
         """Test that corr coeffient returned is 0 given the\
         db value if corr coefficient is empty
@@ -289,6 +299,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(lit_results, ("16", 0))
 
+    @pytest.mark.unit_test
     def test_query_formatter(self):
         """Test for formatting a query given the query string and also the\
         values
@@ -316,6 +327,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(formatted_query, expected_formatted_query)
 
+    @pytest.mark.unit_test
     def test_query_formatter_no_query_values(self):
         """Test for formatting a query where there are no\
         string placeholder
@@ -325,6 +337,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(formatted_query, query)
 
+    @pytest.mark.unit_test
     def test_map_to_mouse_gene_id(self):
         """Test for converting a gene id to mouse geneid\
         given a species which is not mouse
@@ -348,6 +361,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(results, expected_results)
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.lit_correlation_for_trait")
     def test_compute_all_lit_correlation(self, mock_lit_corr):
         """Test for compute all lit correlation which acts\
@@ -368,6 +382,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(lit_correlation_results, expected_mocked_lit_results)
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.correlations.tissue_correlation_for_trait")
     @mock.patch("gn3.computations.correlations.process_trait_symbol_dict")
     def test_compute_all_tissue_correlation(self, process_trait_symbol, mock_tissue_corr):
@@ -411,6 +426,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(results, expected_results)
 
+    @pytest.mark.unit_test
     def test_map_shared_keys_to_values(self):
         """test helper function needed to integrate with genenenetwork2\
         given a a samplelist containing dataset sampelist keys\
@@ -431,6 +447,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(results, expected_results)
 
+    @pytest.mark.unit_test
     def test_process_trait_symbol_dict(self):
         """test for processing trait symbol dict\
         and fetch tissue values from tissue value dict\
@@ -449,6 +466,7 @@ class TestCorrelation(TestCase):
 
         self.assertEqual(results, [expected_results])
 
+    @pytest.mark.unit_test
     def test_compute_correlation(self):
         """Test that the new correlation function works the same as the original
         from genenetwork1."""
diff --git a/tests/unit/computations/test_dictify_by_samples.py b/tests/unit/computations/test_dictify_by_samples.py
index decc095..8a1332f 100644
--- a/tests/unit/computations/test_dictify_by_samples.py
+++ b/tests/unit/computations/test_dictify_by_samples.py
@@ -63,6 +63,7 @@ values = st.lists(st.floats())
 variances = st.lists(st.one_of(st.none(), st.floats()))
 other = st.lists(st.integers())
 
+@pytest.mark.unit_test
 @given(svv=st.tuples(
     st.lists(non_empty_samples),
     st.lists(values),
diff --git a/tests/unit/computations/test_diff.py b/tests/unit/computations/test_diff.py
index e4f5dde..128fb60 100644
--- a/tests/unit/computations/test_diff.py
+++ b/tests/unit/computations/test_diff.py
@@ -2,6 +2,8 @@
 import unittest
 import os
 
+import pytest
+
 from gn3.computations.diff import generate_diff
 
 TESTDIFF = """3,4c3,4
@@ -19,6 +21,7 @@ TESTDIFF = """3,4c3,4
 
 class TestDiff(unittest.TestCase):
     """Test cases for computations.diff"""
+    @pytest.mark.unit_test
     def test_generate_diff(self):
         """Test that the correct diff is generated"""
         data = os.path.join(os.path.dirname(__file__).split("unit")[0],
diff --git a/tests/unit/computations/test_gemma.py b/tests/unit/computations/test_gemma.py
index 73dd5eb..b36a93e 100644
--- a/tests/unit/computations/test_gemma.py
+++ b/tests/unit/computations/test_gemma.py
@@ -1,7 +1,9 @@
 """Test cases for procedures defined in computations.gemma"""
 import unittest
-
 from unittest import mock
+
+import pytest
+
 from gn3.computations.gemma import generate_gemma_cmd
 from gn3.computations.gemma import generate_hash_of_string
 from gn3.computations.gemma import generate_pheno_txt_file
@@ -9,6 +11,7 @@ from gn3.computations.gemma import generate_pheno_txt_file
 
 class TestGemma(unittest.TestCase):
     """Test cases for computations.gemma module"""
+    @pytest.mark.unit_test
     def test_generate_pheno_txt_file(self):
         """Test that the pheno text file is generated correctly"""
         open_mock = mock.mock_open()
@@ -26,11 +29,13 @@ class TestGemma(unittest.TestCase):
             mock.call("BXD07 438.700\n")
         ])
 
+    @pytest.mark.unit_test
     def test_generate_hash_of_string(self):
         """Test that a string is hashed correctly"""
         self.assertEqual(generate_hash_of_string("I^iQP&TlSR^z"),
                          "hMVRw8kbEp49rOmoIkhMjA")
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.gemma.get_hash_of_files")
     def test_compute_k_values_without_loco(self, mock_get_hash):
         """Test computing k values without loco"""
@@ -52,6 +57,7 @@ class TestGemma(unittest.TestCase):
                                     "-gk > /tmp/my-token/my-hash-output.json")
                                })
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.gemma.get_hash_of_files")
     def test_generate_gemma_cmd_with_loco(self, mock_get_hash):
         """Test computing k values with loco"""
diff --git a/tests/unit/computations/test_parsers.py b/tests/unit/computations/test_parsers.py
index b51b0bf..f05f766 100644
--- a/tests/unit/computations/test_parsers.py
+++ b/tests/unit/computations/test_parsers.py
@@ -2,17 +2,21 @@
 import unittest
 import os
 
+import pytest
+
 from gn3.computations.parsers import parse_genofile
 
 
 class TestParsers(unittest.TestCase):
     """Test cases for some various parsers"""
 
+    @pytest.mark.unit_test
     def test_parse_genofile_without_existing_file(self):
         """Assert that an error is raised if the genotype file is absent"""
         self.assertRaises(FileNotFoundError, parse_genofile,
                           "/non-existent-file")
 
+    @pytest.mark.unit_test
     def test_parse_genofile_with_existing_file(self):
         """Test that a genotype file is parsed correctly"""
         samples = ["bxd1", "bxd2"]
diff --git a/tests/unit/computations/test_partial_correlations.py b/tests/unit/computations/test_partial_correlations.py
index 3690ca4..ee17659 100644
--- a/tests/unit/computations/test_partial_correlations.py
+++ b/tests/unit/computations/test_partial_correlations.py
@@ -3,6 +3,7 @@
 from unittest import TestCase
 
 import pandas
+import pytest
 from numpy.testing import assert_allclose
 
 from gn3.computations.partial_correlations import (
@@ -98,6 +99,7 @@ dictified_control_samples = (
 class TestPartialCorrelations(TestCase):
     """Class for testing partial correlations computation functions"""
 
+    @pytest.mark.unit_test
     def test_control_samples(self):
         """Test that the control_samples works as expected."""
         self.assertEqual(
@@ -112,6 +114,7 @@ class TestPartialCorrelations(TestCase):
               (None, None, None)),
              (6, 4, 3)))
 
+    @pytest.mark.unit_test
     def test_dictify_by_samples(self):
         """
         Test that `dictify_by_samples` generates the appropriate dict
@@ -142,6 +145,7 @@ class TestPartialCorrelations(TestCase):
                  (6, 4, 3))),
             dictified_control_samples)
 
+    @pytest.mark.unit_test
     def test_fix_samples(self):
         """
         Test that `fix_samples` returns only the common samples
@@ -187,6 +191,7 @@ class TestPartialCorrelations(TestCase):
              (None, None, None, None, None, None, None, None, None, None, None,
               None, None)))
 
+    @pytest.mark.unit_test
     def test_find_identical_traits(self):
         """
         Test `gn3.partial_correlations.find_identical_traits`.
@@ -219,6 +224,7 @@ class TestPartialCorrelations(TestCase):
                 self.assertEqual(
                     find_identical_traits(primn, primv, contn, contv), expected)
 
+    @pytest.mark.unit_test
     def test_tissue_correlation_error(self):
         """
         Test that `tissue_correlation` raises specific exceptions for particular
@@ -253,6 +259,7 @@ class TestPartialCorrelations(TestCase):
                 with self.assertRaises(error, msg=error_msg):
                     tissue_correlation(primary, target, method)
 
+    @pytest.mark.unit_test
     def test_tissue_correlation(self): # pylint: disable=R0201
         """
         Test that the correct correlation values are computed for the given:
@@ -269,6 +276,7 @@ class TestPartialCorrelations(TestCase):
                 assert_allclose(
                     tissue_correlation(primary, target, method), expected)
 
+    @pytest.mark.unit_test
     def test_good_dataset_samples_indexes(self):
         """
         Test that `good_dataset_samples_indexes` returns correct indices.
@@ -279,6 +287,7 @@ class TestPartialCorrelations(TestCase):
                 ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")),
             (0, 4, 8, 10))
 
+    @pytest.mark.unit_test
     def test_build_data_frame(self):
         """
         Check that the function builds the correct data frame.
diff --git a/tests/unit/computations/test_qtlreaper.py b/tests/unit/computations/test_qtlreaper.py
index 742d106..607f4a6 100644
--- a/tests/unit/computations/test_qtlreaper.py
+++ b/tests/unit/computations/test_qtlreaper.py
@@ -1,5 +1,6 @@
 """Module contains tests for gn3.computations.qtlreaper"""
 from unittest import TestCase
+import pytest
 from gn3.computations.qtlreaper import (
     parse_reaper_main_results,
     organise_reaper_main_results,
@@ -9,6 +10,7 @@ from tests.unit.sample_test_data import organised_trait_1
 class TestQTLReaper(TestCase):
     """Class for testing qtlreaper interface functions."""
 
+    @pytest.mark.unit_test
     def test_parse_reaper_main_results(self):
         """Test that the main results file is parsed correctly."""
         self.assertEqual(
@@ -67,6 +69,7 @@ class TestQTLReaper(TestCase):
                 }
             ])
 
+    @pytest.mark.unit_test
     def test_parse_reaper_permutation_results(self):
         """Test that the permutations results file is parsed correctly."""
         self.assertEqual(
@@ -77,6 +80,7 @@ class TestQTLReaper(TestCase):
              5.63874, 5.71346, 5.71936, 5.74275, 5.76764, 5.79815, 5.81671,
              5.82775, 5.89659, 5.92117, 5.93396, 5.93396, 5.94957])
 
+    @pytest.mark.unit_test
     def test_organise_reaper_main_results(self):
         """Check that results are organised correctly."""
         self.assertEqual(
diff --git a/tests/unit/computations/test_rqtl.py b/tests/unit/computations/test_rqtl.py
index 955d0ab..51df281 100644
--- a/tests/unit/computations/test_rqtl.py
+++ b/tests/unit/computations/test_rqtl.py
@@ -2,10 +2,12 @@
 import unittest
 
 from unittest import mock
+import pytest
 from gn3.computations.rqtl import generate_rqtl_cmd
 
 class TestRqtl(unittest.TestCase):
     """Test cases for computations.rqtl module"""
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.rqtl.generate_hash_of_string")
     @mock.patch("gn3.computations.rqtl.get_hash_of_files")
     def test_generate_rqtl_command(self, mock_get_hash_files, mock_generate_hash_string):
diff --git a/tests/unit/computations/test_slink.py b/tests/unit/computations/test_slink.py
index 995393b..276133a 100644
--- a/tests/unit/computations/test_slink.py
+++ b/tests/unit/computations/test_slink.py
@@ -1,6 +1,8 @@
 """Module contains tests for slink"""
 from unittest import TestCase
 
+import pytest
+
 from gn3.computations.slink import slink
 from gn3.computations.slink import nearest
 from gn3.computations.slink import LengthError
@@ -9,6 +11,7 @@ from gn3.computations.slink import MirrorError
 class TestSlink(TestCase):
     """Class for testing slink functions"""
 
+    @pytest.mark.unit_test
     def test_nearest_expects_list_of_lists(self):
         """Test that function only accepts a list of lists."""
         # This might be better handled with type-hints and mypy
@@ -18,6 +21,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(ValueError, msg="Expected list or tuple"):
                     nearest(item, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_does_not_allow_empty_lists(self):
         """Test that function does not accept an empty list, or any of the child
         lists to be empty."""
@@ -29,6 +33,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(ValueError):
                     nearest(lst, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_expects_children_are_same_length_as_parent(self):
         """Test that children lists are same length as parent list."""
         for lst in [[[0, 1]],
@@ -40,6 +45,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(LengthError):
                     nearest(lst, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_expects_member_is_zero_distance_from_itself(self):
         """Test that distance of a member from itself is zero"""
         for lst in [[[1]],
@@ -50,6 +56,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(ValueError):
                     nearest(lst, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_expects_distance_atob_is_equal_to_distance_btoa(self):
         """Test that the distance from member A to member B is the same as that
         from member B to member A."""
@@ -60,6 +67,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(MirrorError):
                     nearest(lst, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_expects_zero_or_positive_distances(self):
         """Test that all distances are either zero, or greater than zero."""
         # Based on:
@@ -74,6 +82,7 @@ class TestSlink(TestCase):
                 with self.assertRaises(ValueError, msg="Distances should be positive."):
                     nearest(lst, 1, 1)
 
+    @pytest.mark.unit_test
     def test_nearest_returns_shortest_distance_given_coordinates_to_both_group_members(self):
         """Test that the shortest distance is returned."""
         # This test is named wrong - at least I think it is, from the expected results
@@ -234,6 +243,7 @@ class TestSlink(TestCase):
             with self.subTest(lst=lst):
                 self.assertEqual(nearest(lst, i, j), expected)
 
+    @pytest.mark.unit_test
     def test_nearest_gives_shortest_distance_between_list_of_members_and_member(self):
         """Test that the shortest distance is returned."""
         for members_distances, members_list, member_coordinate, expected_distance in [
@@ -260,6 +270,7 @@ class TestSlink(TestCase):
                         members_distances, member_coordinate, members_list),
                     expected_distance)
 
+    @pytest.mark.unit_test
     def test_nearest_returns_shortest_distance_given_two_lists_of_members(self):
         """Test that the shortest distance is returned."""
         for members_distances, members_list, member_list2, expected_distance in [
@@ -289,12 +300,14 @@ class TestSlink(TestCase):
                         members_distances, member_list2, members_list),
                     expected_distance)
 
+    @pytest.mark.unit_test
     def test_slink_wrong_data_returns_empty_list(self):
         """Test that empty list is returned for wrong data."""
         for data in [1, "test", [], 2.945, nearest, [0]]:
             with self.subTest(data=data):
                 self.assertEqual(slink(data), [])
 
+    @pytest.mark.unit_test
     def test_slink_with_data(self):
         """Test slink with example data, and expected results for each data
         sample."""
diff --git a/tests/unit/computations/test_wgcna.py b/tests/unit/computations/test_wgcna.py
index 5f23a86..3130374 100644
--- a/tests/unit/computations/test_wgcna.py
+++ b/tests/unit/computations/test_wgcna.py
@@ -2,6 +2,8 @@
 from unittest import TestCase
 from unittest import mock
 
+import pytest
+
 from gn3.computations.wgcna import dump_wgcna_data
 from gn3.computations.wgcna import compose_wgcna_cmd
 from gn3.computations.wgcna import call_wgcna_script
@@ -10,6 +12,7 @@ from gn3.computations.wgcna import call_wgcna_script
 class TestWgcna(TestCase):
     """test class for wgcna"""
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.wgcna.process_image")
     @mock.patch("gn3.computations.wgcna.run_cmd")
     @mock.patch("gn3.computations.wgcna.compose_wgcna_cmd")
@@ -95,6 +98,7 @@ class TestWgcna(TestCase):
 
             self.assertEqual(results, expected_output)
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.wgcna.run_cmd")
     @mock.patch("gn3.computations.wgcna.compose_wgcna_cmd")
     @mock.patch("gn3.computations.wgcna.dump_wgcna_data")
@@ -117,6 +121,7 @@ class TestWgcna(TestCase):
             self.assertEqual(call_wgcna_script(
                 "input_file.R", ""), expected_error)
 
+    @pytest.mark.unit_test
     def test_compose_wgcna_cmd(self):
         """test for composing wgcna cmd"""
         wgcna_cmd = compose_wgcna_cmd(
@@ -124,6 +129,7 @@ class TestWgcna(TestCase):
         self.assertEqual(
             wgcna_cmd, "Rscript ./scripts/wgcna.r  /tmp/wgcna.json")
 
+    @pytest.mark.unit_test
     @mock.patch("gn3.computations.wgcna.TMPDIR", "/tmp")
     @mock.patch("gn3.computations.wgcna.uuid.uuid4")
     def test_create_json_file(self, file_name_generator):