about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-11-28 12:35:34 +0300
committerFrederick Muriuki Muriithi2022-11-28 12:35:34 +0300
commit6e6fd71f3ee8df8c40fe82d5df93bec4a125ed29 (patch)
tree8434c8f5cb982d3deea7acd1c309f4334f40db8f
parentf935f79b95d1345583254e38d146cece75cd5cf4 (diff)
downloadgenenetwork2-6e6fd71f3ee8df8c40fe82d5df93bec4a125ed29.tar.gz
mechanical-rob: Add more tests for correctness
-rw-r--r--test/requests/correlation_tests.py131
1 files changed, 91 insertions, 40 deletions
diff --git a/test/requests/correlation_tests.py b/test/requests/correlation_tests.py
index 8a4dba12..552ef90e 100644
--- a/test/requests/correlation_tests.py
+++ b/test/requests/correlation_tests.py
@@ -135,7 +135,6 @@ def thread(value, *functions):
 
 def parse_results_from_html(raw_html):
     doc = etree.HTML(raw_html)
-    # print(f"THE RESPONSE: {response.text}")
     scripts = doc.xpath('//script')
     for script in scripts:
         script_content = thread(
@@ -154,66 +153,118 @@ def parse_expected(filepath):
         for line in reader:
             yield line
 
-def verify_correctness(actual, expected):
+def collect_failures(actual, expected, keys):
     # assert len(actual) == len(expected), (
     #     f"Expected {len(expected)} results but instead got {len(actual)} "
     #     "results")
-    def __assert(act_val, exp_val, title):
-        assert act_val == exp_val, (
-            f"Different '{title}' values: expected: '{exp_val}' but got "
-            f"'{act_val}'")
-
-    for act, exp in zip(actual, expected):
-        __assert(act["trait_id"], exp["Record ID"], "Trait/Record ID")
-        # __assert(act["dataset"], exp[""], "Dataset")
-        __assert(act["sample_r"], exp["Sample r ?"], "Sample r"),
-        __assert(act["num_overlap"], exp["N Cases"], "N Cases")
-        __assert(act["sample_p"], exp["Sample p(r) ?"], "Sample p")
-        __assert(act["symbol"], exp["Symbol"], "Symbol")
-        __assert(act["description"], exp["Description"], "Description")
-        __assert(act["location"], exp["Location Chr and Mb"], "Location Chr and Mb")
-        __assert(act["mean"], exp["Mean Expr"], "Mean")
-        # __assert(act["additive"], exp[], "Additive")
-        # __assert(act["lod_score"], exp[], "LOD Score")
-        __assert(act["lrs_location"], exp["Max LRS Location Chr and Mb"], "Max LRS Location Chr and Mb")
-        __assert(act["lit_corr"], exp["Lit Corr ?"], "Lit Corr")
-        __assert(act["tissue_corr"], exp["Tissue r ?"], "Tissue r")
-        __assert(act["tissue_pvalue"], exp["Tissue p(r) ?"], "Tissue p(r)")
-        # __assert(act[], exp[], "Different ...")
+    def __equal(act_row, exp_row):
+        __eq = tuple()
+        for act_key, exp_key, title in keys:
+            act_val, exp_val = (act_row[act_key], exp_row[exp_key])
+            if act_val == exp_val:
+                # __eq = __eq + ("PASSED",)
+                continue
+            __eq = __eq + ((
+                f"Different '{title}' values: expected: '{exp_val}' but got "
+                f"'{act_val}'"),)
+            continue
+        return __eq
+
+    return tuple(
+        __equal(act_row, exp_row)
+        for act_row, exp_row in zip(actual, expected))
 
 def check_correctness(host):
-    failures = tuple()
-    __idx = 1
+    pearsons_keys = (
+        ("trait_id", "Record ID", "Trait/Record ID"),
+        ("sample_r", "Sample r ?", "Sample r value"),
+        ("num_overlap", "N Cases", "N Cases"),
+        ("sample_p", "Sample p(r) ?", "Sample p value"),
+        ("symbol", "Symbol", "Symbol"),
+        ("description", "Description", "Description"),
+        ("location", "Location Chr and Mb", "Location Chr and Mb"),
+        ("mean", "Mean Expr", "Mean"),
+        ("lrs_location", "Max LRS Location Chr and Mb", "Max LRS Location Chr and Mb"),
+        ("lit_corr", "Lit Corr ?", "Literature Correlation"),
+        ("tissue_corr", "Tissue r ?", "Tissue Correlation r"),
+        ("tissue_pvalue", "Tissue p(r) ?", "Tissue Correlation p value"))
+
+    spearmans_keys = (
+        ("trait_id", "Record ID", "Trait/Record ID"),
+        ("sample_r", "Sample rho ?", "Sample rho value"),
+        ("num_overlap", "N Cases", "N Cases"),
+        ("sample_p", "Sample p(rho) ?", "Sample p(rho) value"),
+        ("symbol", "Symbol", "Symbol"),
+        ("description", "Description", "Description"),
+        ("location", "Location Chr and Mb", "Location Chr and Mb"),
+        ("mean", "Mean Expr", "Mean"),
+        ("lrs_location", "Max LRS Location Chr and Mb", "Max LRS Location Chr and Mb"),
+        ("lit_corr", "Lit Corr ?", "Literature Correlation"),
+        ("tissue_corr", "Tissue rho ?", "Tissue Correlation rho"),
+        ("tissue_pvalue", "Tissue p(rho) ?", "Tissue Correlation p(rho) value"))
+    failures = {}
     tests = [
-        ({"dataset": "HC_M2_0606_P", "trait_id": "1435464_at",
+        ("Trait '1435464_at' (Dataset 'HC_M2_0606_P'): Sample Correlation, Pearson, 500 results",
+         {"dataset": "HC_M2_0606_P", "trait_id": "1435464_at",
+          "corr_dataset": "HC_M2_0606_P", "corr_type": "sample",
+          "corr_sample_method": "pearson", "location_type": "gene",
+          "corr_samples_group": "samples_primary", "sample_vals": sample_vals(),
+          "corr_return_results": "500"},
+         "HC_M2_0606_P___1435464_at___sample_r___pearson__results.csv",
+         pearsons_keys),
+        ("Trait '1435464_at' (Dataset 'HC_M2_0606_P'): Sample Correlation, Spearmans, 500 results",
+         {"dataset": "HC_M2_0606_P", "trait_id": "1435464_at",
           "corr_dataset": "HC_M2_0606_P", "corr_type": "sample",
+          "corr_sample_method": "spearman", "location_type": "gene",
+          "corr_samples_group": "samples_primary", "sample_vals": sample_vals(),
+          "corr_return_results": "500"},
+         "HC_M2_0606_P___1435464_at___sample_r___spearman___no_filters__results.csv",
+         spearmans_keys),
+        ("Trait '1435464_at' (Dataset 'HC_M2_0606_P'): Tissue Correlation, Pearsons, 500 results",
+         {"dataset": "HC_M2_0606_P", "trait_id": "1435464_at",
+          "corr_dataset": "HC_M2_0606_P", "corr_type": "tissue",
           "corr_sample_method": "pearson", "location_type": "gene",
           "corr_samples_group": "samples_primary", "sample_vals": sample_vals(),
           "corr_return_results": "500"},
-         "HC_M2_0606_P___1435464_at___sample_r___pearson__results.csv"),]
+         "HC_M2_0606_P___1435464_at___tissue_r___pearson__results.csv",
+         pearsons_keys),
+        ("Trait '1435464_at' (Dataset 'HC_M2_0606_P'): Tissue Correlation, Spearmans, 500 results",
+         {"dataset": "HC_M2_0606_P", "trait_id": "1435464_at",
+          "corr_dataset": "HC_M2_0606_P", "corr_type": "tissue",
+          "corr_sample_method": "spearman", "location_type": "gene",
+          "corr_samples_group": "samples_primary", "sample_vals": sample_vals(),
+          "corr_return_results": "500"},
+         "HC_M2_0606_P___1435464_at___tissue_r___spearman__results.csv",
+         spearmans_keys)]
 
-    for test_data, expected_file in tests:
-        print(f"Test {__idx} ...", end="\t")
+    for test_title, test_data, expected_file, method_keys in tests:
+        print(f"Test: {test_title} ...", end="\t")
         response = requests.post(f"{host}/corr_compute", data=test_data)
         while response.text.find('<meta http-equiv="refresh" content="5">') >= 0:
             response = requests.get(response.url)
             pass
         results = parse_results_from_html(response.text)
+        if len(results) == 0:
+            failures = {
+                **failures,
+                test_title: (("No results found.",),)}
+            continue
         filepath = Path.cwd().parent.joinpath(
             f"test/requests/correlation_results_text_files/{expected_file}")
-        try:
-            verify_correctness(results, tuple(parse_expected(filepath)))
-            print("OK")
-        except AssertionError as aerr:
-            failures = failures + ((__idx, aerr.args[0]),)
-            print("FAIL!")
-
-        __idx = __idx + 1
+        failures = {
+            **failures,
+            test_title: collect_failures(
+                results, tuple(parse_expected(filepath)), method_keys)
+        }
 
     if len(failures) > 0:
         print("\n\nFAILURES: ")
-        for test_num, err_msg in failures:
-            print(f"\tTest {test_num}: {err_msg}")
+        for test_title, failures in failures.items():
+            print(f"\nTest: {test_title}")
+            for result, result_failures in enumerate(failures):
+                for failure in result_failures:
+                    print(f"\tResult {result}: {failure}")
+                print("")
         return False
 
     return True