import datetime import unittest from unittest import mock from gn2.wqflask.show_trait.export_trait_data import dict_to_sorted_list from gn2.wqflask.show_trait.export_trait_data import cmp_samples from gn2.wqflask.show_trait.export_trait_data import export_sample_table from gn2.wqflask.show_trait.export_trait_data import get_export_metadata class AttributesSetter: def __init__(self, obj): for key, value in obj.items(): setattr(self, key, value) class TestExportTraits(unittest.TestCase): """Test methods for exporting traits and metadata""" @mock.patch("gn2.wqflask.show_trait.export_trait_data.datetime") @mock.patch("gn2.wqflask.show_trait.export_trait_data.create_trait") @mock.patch("gn2.wqflask.show_trait.export_trait_data.data_set") def test_get_export_metadata(self, data_mock, trait_mock, date_mock): """test for exporting metadata with dataset.type=Publish""" mock_dataset = AttributesSetter({"type": "Publish", "name": "HC_M2_0606_P", "dataset_name": "HC_M2_0606_P"}) mock_dataset.group = AttributesSetter({"name": "C"}) data_mock.create_dataset.return_value = mock_dataset trait_data = { "symbol": "Nr3c1", "description_display": "nuclear receptor subfamily 3,group C, member 1 (glucocorticoid receptor); distal 3' UTR", "title": "Trait_1 title", "authors": "XL_1", "journal": "" } date_mock.datetime.now.return_value = datetime.datetime( 2022, 8, 8, 19, 2, 31, 628813) trait_mock.return_value = AttributesSetter(trait_data) results = get_export_metadata({ "trait_id": "1460303_at", "trait_display_name": "1460303_at", "dataset": "HC_M2_0606_P", "group": "BXD", }) expected = [["Phenotype ID:", "1460303_at"], ["Phenotype URL: ", "http://genenetwork.org/show_trait?trait_id=1460303_at&dataset=HC_M2_0606_P"], ["Group: ", "C"], ["Phenotype: ", 'nuclear receptor subfamily 3","group C"," member 1 (glucocorticoid receptor); distal 3\' UTR'], ["Authors: ", "XL_1"], ["Title: ", "Trait_1 title"], ["Journal: ", "N/A"], ["Dataset Link: ", "http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=HC_M2_0606_P"], ["Export Date: ", "August 08, 2022"], ["Export Time: ", "19:02 GMT"]] self.assertEqual(results, expected) def test_dict_to_sortedlist(self): """test for conversion of dict to sorted list""" sample1 = { "other": "exp1", "name": "exp2" } sample2 = { "se": 1, "num_cases": 4, "value": 6, "name": 3 } rever = { "name": 3, "value": 6, "num_cases": 4, "se": 1 } oneItem = { "item1": "one" } self.assertEqual(["exp2", "exp1"], dict_to_sorted_list(sample1)) self.assertEqual([3, 6, 1, 4], dict_to_sorted_list(sample2)) self.assertEqual([3, 6, 1, 4], dict_to_sorted_list(rever)) self.assertEqual(["one"], dict_to_sorted_list(oneItem)) """test that the func returns the values not the keys""" self.assertFalse(["other", "name"] == dict_to_sorted_list(sample1)) def test_cmp_samples(self): """test for comparing samples function""" sampleA = [ [ ("value", "other"), ("name", "test_name") ] ] sampleB = [ [ ("value", "other"), ("unknown", "test_name") ] ] sampleC = [ [("other", "value"), ("name", "value") ], [ ("name", "value"), ("value", "name") ], [ ("other", "value"), ("name", "value" )], [ ("name", "name1"), ("se", "valuex") ], [( "value", "name1"), ("se", "valuex") ], [( "other", "name1"), ("se", "valuex" ) ], [( "name", "name_val"), ("num_cases", "num_val") ], [( "other_a", "val_a"), ("other_b", "val" ) ] ] results = [cmp_samples(val[0], val[1]) for val in sampleA] resultB = [cmp_samples(val[0], val[1]) for val in sampleB] resultC = [cmp_samples(val[0], val[1]) for val in sampleC] self.assertEqual(1, *results) self.assertEqual(-1, *resultB) self.assertEqual([1, -1, 1, -1, -1, 1, -1, -1], resultC)