Ejemplo n.º 1
0
    def test_HpdsQuery_func_getCount_handles_connection_error(
            self, mock_picsure_connection, mock_http_request):
        test_uuid = "my-test-uuid"
        test_url = "http://my-test.url/"
        test_token = "this.is.my.test.token"
        test_connection_error = '{"results":{}, "error":"true"}'

        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI(test_url, test_token)

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        resp_headers = {"status": "200"}
        mock_http_request.return_value = (
            resp_headers, test_connection_error.encode("utf-8"))
        req_body = json.dumps(query.buildQuery("COUNT"))

        # micro test to confirm warning is printed on error
        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            test = query.getCount()
            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Message on parameter useage:\n" + captured)

            self.assertTrue(len(captured) > 0)
            self.assertEqual(test, test_connection_error)
    def test_HpdsResourceConnection_func_query(self, MockPicSureConnection):
        conn = MockPicSureConnection()
        test_uuid = "my-test-uuid"
        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)

        query = resource.query()
        self.assertIsInstance(query, PicSureHpdsQuery.Query)
Ejemplo n.º 3
0
    def test_HpdsQuery_func_getResultsDataFrame(self, mock_picsure_connection,
                                                mock_http_request):
        test_uuid = "my-test-uuid"
        test_url = "http://my-test.url/"
        test_token = "this.is.my.test.token"
        test_return_CSV = "ROW\tVALUE\n" + "1\tTrue\n" + "2\tFalse\n" + "3\tUnknown\n"

        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI(test_url, test_token)

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        resp_headers = {"status": "200"}
        mock_http_request.return_value = (resp_headers,
                                          test_return_CSV.encode("utf-8"))
        req_body = json.dumps(query.buildQuery("DATAFRAME"))

        query.getResultsDataFrame()

        mock_http_request.assert_called_with(
            uri=test_url + "query/sync",
            method="POST",
            body=req_body,
            headers={'Content-Type': 'application/json'})
Ejemplo n.º 4
0
    def test_HpdsQuery_list_anyof(self, mock_picsure_connection):
        conn = mock_picsure_connection()
        test_uuid = "my-test-uuid"
        test_key = "my-test-key"
        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()
        self.assertIsInstance(query.anyof, types.MethodType)
        my_list = query.anyof()
        self.assertIsInstance(my_list.add, types.MethodType)
        self.assertIsInstance(my_list.delete, types.MethodType)
        self.assertIsInstance(my_list, PicSureHpdsLib.AttrListKeys)
        # micro test to confirm warning is printed if parameters are passed
        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            query.anyof("some_attempted_key")
            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Message on parameter useage:\n" + captured)
            self.assertTrue(len(captured) > 0)

        # MagicMock the API's search function
        query._apiObj.search.return_value = '{"results": {"phenotypes": {' \
                                        '"somekey": {"name": "term1", "categorical": false, "min":0, "max":100}' \
                                        '}}}'

        my_list.add("somekey")
        self.assertEqual(1, len(my_list.data))
        output = query.save()
        print(output)
Ejemplo n.º 5
0
    def test_HpdsQuery_func_getCount(self, mock_picsure_connection,
                                     mock_http_request):
        test_uuid = "my-test-uuid"
        test_url = "http://my-test.url/"
        test_token = "this.is.my.test.token"

        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI(test_url, test_token)

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        resp_headers = {"status": "200"}
        mock_http_request.return_value = (resp_headers, "1000".encode("utf-8"))
        req_body = json.dumps(query.buildQuery("COUNT"))

        query.getCount()

        mock_http_request.assert_called_with(
            uri=test_url + "query/sync",
            method="POST",
            body=req_body,
            headers={'Content-Type': 'application/json'})
    def test_HpdsResourceConnection_create(self, MockPicSureConnection):
        conn = MockPicSureConnection()
        test_uuid = "my-test-uuid"
        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)

        self.assertIsInstance(resource, PicSureHpds.HpdsResourceConnection)
        self.assertIs(test_uuid, resource.resource_uuid)
        self.assertIs(conn, resource.connection_reference)
Ejemplo n.º 7
0
 def test_HpdsQuery_create(self, mock_picsure_connection):
     conn = mock_picsure_connection()
     test_uuid = "my-test-uuid"
     resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
     query = resource.query()
     # test that it was created correctly
     self.assertIsInstance(query, PicSureHpdsQuery.Query)
     self.assertEqual(query._resourceUUID, test_uuid)
     self.assertIs(query._refHpdsResourceConnection, resource)
 def test_HpdsResourceConnection_func_help(self, MockPicSureConnection):
     conn = MockPicSureConnection()
     test_uuid = "my-test-uuid"
     resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
     with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
         resource.help()
         sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
         captured = fake_stdout.getvalue()
         print("Captured:\n" + captured)
         self.assertTrue(len(captured) > 0)
    def test_HpdsResourceConnection_func_dictionary(self,
                                                    MockPicSureConnection):
        conn = MockPicSureConnection()
        test_uuid = "my-test-uuid"
        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)

        self.assertIsInstance(resource, PicSureHpds.HpdsResourceConnection)
        self.assertIs(resource.resource_uuid, test_uuid)

        dictionary = resource.dictionary()
        self.assertIsInstance(dictionary, PicSureHpdsDictionary.Dictionary)
Ejemplo n.º 10
0
    def test_HpdsQuery_func_show(self, mock_picsure_connection):
        conn = mock_picsure_connection()
        test_uuid = "my-test-uuid"
        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            query.show()
            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Captured:\n" + captured)
            self.assertTrue(len(captured) > 0)
Ejemplo n.º 11
0
 def test_HpdsQuery_list_require(self, mock_picsure_connection):
     conn = mock_picsure_connection()
     test_uuid = "my-test-uuid"
     test_key = "my-test-key"
     resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
     query = resource.query()
     self.assertIsInstance(query.require, types.MethodType)
     my_list = query.require()
     self.assertIsInstance(my_list.add, types.MethodType)
     self.assertIsInstance(my_list.delete, types.MethodType)
     self.assertIsInstance(my_list, PicSureHpdsLib.AttrListKeys)
     # micro test to confirm warning is printed if parameters are passed
     with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
         query.require("some_attempted_key")
         sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
         captured = fake_stdout.getvalue()
         print("Message on parameter useage:\n" + captured)
         self.assertTrue(len(captured) > 0)
Ejemplo n.º 12
0
    def test_HpdsQuery_list_filter_input_a_list(self, mock_picsure_connection):
        test_uuid = "my-test-uuid"
        test_key1 = "my-test-key1"
        test_key2 = "my-test-key2"
        test_value = 1000
        test_class = "my-test-class"

        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI("", "")
        API.search = MagicMock(return_value='{"results": {"' + test_class +
                               '": {"' + test_key1 + '": "foo", "' +
                               test_key2 + '": "bar"}}}')

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        # micro test to confirm warning is printed if parameters are passed
        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            query.filter().add([test_key1, test_key2], test_value)
            self.assertEqual(len(query.filter().data), 2)
            self.assertDictEqual(
                query.filter().data[test_key1], {
                    'type': 'minmax',
                    'min': test_value,
                    'max': test_value,
                    'HpdsDataType': test_class
                })
            self.assertDictEqual(
                query.filter().data[test_key2], {
                    'type': 'minmax',
                    'min': test_value,
                    'max': test_value,
                    'HpdsDataType': test_class
                })

            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Message on parameter useage:\n" + captured)
            self.assertTrue(len(captured) == 0)
Ejemplo n.º 13
0
    def test_HpdsQuery_func_load(self, mock_picsure_connection):
        test_uuid = "my-test-uuid"

        query_obj = {
            "query": {
                "fields": ["\\select\\key"],
                "crossCountFields":
                ["\\crosscounts\\key1", "\\crosscounts\\key2"],
                "requiredFields": ["\\require\\key"],
                "anyRecordOf": ["\\anyof\\key1", "\\anyof\\key2"],
                "numericFilters": {
                    "\\filter_numeric\\range1": {
                        "min": 40,
                        "max": 60
                    },
                    "\\filter_numeric\\value1": {
                        "min": 50,
                        "max": 50
                    }
                },
                "categoryFilters": {
                    "\\filter_categorical\\set1": ["cat1"],
                    "\\filter_categorical\\set2": ["catA", "catC"]
                },
                "variantInfoFilters": [{
                    "categoryVariantInfoFilters": {
                        "Variant_severity": ["HIGH"]
                    },
                    "numericVariantInfoFilters": {
                        "AF": {
                            "min": 0.1,
                            "max": 0.9
                        }
                    }
                }]
            },
            "resourceUUID": "my-test-uuid"
        }
        query_str = json.dumps(query_obj)

        return_vals = {}
        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI("", "")
        API.search = MagicMock(return_value=json.dumps(return_vals))

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        # micro test to confirm warning is printed if parameters are passed
        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            query.load(query_str)

            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Message on parameter useage:\n" + captured)

            self.assertDictEqual(query_obj, json.loads(query.save()))
Ejemplo n.º 14
0
    def test_HpdsQuery_func_save(self, mock_picsure_connection):
        test_uuid = "my-test-uuid"
        test_value = 50

        return_vals = {
            "results": {
                "phenotypes": {
                    "\\select\\key": {},
                    "\\require\\key": {},
                    "\\crosscounts\\key1": {},
                    "\\crosscounts\\key2": {},
                    "\\anyof\\key1": {},
                    "\\anyof\\key2": {},
                    "\\filter_numeric\\key1": {
                        "name": "key1",
                        "categorical": False,
                        "min": 0,
                        "max": 100
                    },
                    "\\filter_numeric\\range1": {
                        "name": "term1",
                        "categorical": False,
                        "min": 0,
                        "max": 100
                    },
                    "\\filter_numeric\\value1": {
                        "name": "value1",
                        "categorical": False,
                        "min": 0,
                        "max": 100
                    },
                    "\\filter_categorical\\set1": {
                        "name": "set1",
                        "categorical": True,
                        "categoryValues": ["cat1"]
                    },
                    "\\filter_categorical\\set2": {
                        "name": "set2",
                        "categorical": True,
                        "categoryValues": ["catA", "catB", "catC"]
                    }
                },
                "info": {
                    "Variant_severity": {
                        "values": ["HIGH", "LOW"],
                        "continuous": False
                    },
                    "AF": {
                        "values": [],
                        "continuous": True
                    }
                }
            }
        }

        conn = mock_picsure_connection()
        API = PicSureHpds.BypassConnectionAPI("", "")
        API.search = MagicMock(return_value=json.dumps(return_vals))

        def ret_API():
            return API

        conn._api_obj = ret_API

        resource = PicSureHpds.HpdsResourceConnection(conn, test_uuid)
        query = resource.query()

        # micro test to confirm warning is printed if parameters are passed
        with patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            query.select().add("\\select\\key")
            query.crosscounts().add(
                ["\\crosscounts\\key1", "\\crosscounts\\key2"])
            query.require().add("\\require\\key")
            query.anyof().add(["\\anyof\\key1", "\\anyof\\key2"])
            query.filter().add("\\filter_numeric\\range1", test_value - 10,
                               test_value + 10)
            query.filter().add("\\filter_numeric\\value1", test_value)
            query.filter().add("\\filter_categorical\\set1", "cat1")
            query.filter().add("\\filter_categorical\\set2", ["catA", "catC"])
            query.filter().add("Variant_severity", ["HIGH"])
            query.filter().add("AF", min=0.1, max=0.9)

            sys.stdout = sys.__stdout__  # Reset redirect. Needed for it to work!
            captured = fake_stdout.getvalue()
            print("Message on parameter useage:\n" + captured)

            query_obj = {
                "query": {
                    "fields": ["\\select\\key"],
                    "crossCountFields":
                    ["\\crosscounts\\key1", "\\crosscounts\\key2"],
                    "requiredFields": ["\\require\\key"],
                    "anyRecordOf": ["\\anyof\\key1", "\\anyof\\key2"],
                    "numericFilters": {
                        "\\filter_numeric\\range1": {
                            "min": 40,
                            "max": 60
                        },
                        "\\filter_numeric\\value1": {
                            "min": 50,
                            "max": 50
                        }
                    },
                    "categoryFilters": {
                        "\\filter_categorical\\set1": ["cat1"],
                        "\\filter_categorical\\set2": ["catA", "catC"]
                    },
                    "variantInfoFilters": [{
                        "categoryVariantInfoFilters": {
                            "Variant_severity": ["HIGH"]
                        },
                        "numericVariantInfoFilters": {
                            "AF": {
                                "min": 0.1,
                                "max": 0.9
                            }
                        }
                    }]
                },
                "resourceUUID": "my-test-uuid"
            }

            self.assertDictEqual(query_obj, json.loads(query.save()))