Example #1
0
 def test_search_variants_paging_token(self):
     """Tests that paging works as expected for the search variants endpoint."""
     # Request a very large range of variants
     request = self.factory.post(
         "/data/ga4gh/variants/search", json.dumps(
             {"end": 45158029,
              "referenceName": "chr13",
              "variantSetId": "brca-hg37",
              "start": 20425158,
              "pageSize": 5}), content_type="application/json")
     response = views.search_variants(request)
     self.assertEqual(
         json.loads(response.content)["nextPageToken"],
         "1", "A page token should be set")
     start = 41245664
     end = 42245664
     request = self.factory.post(
         "/data/ga4gh/variants/search", json.dumps(
             {"end": end,
              "referenceName": "chr17",
              "variantSetId": "brca-hg37",
              "start": start,
              "pageSize": 5,
              "pageToken": "3"}), content_type="application/json", )
     response = json.loads(views.search_variants(request).content)
     for variant in response["variants"]:
         self.assertGreater(long(variant["end"]), start)
         self.assertLess(long(variant["start"]), end,
                         "Should be in range"
                         " v.start {} r.end {}".format(variant['start'], end))
     self.assertEqual(response["nextPageToken"], "4")
     self.assertEquals(len(response["variants"]), 5)
Example #2
0
 def test_search_variants_requested_range_present(self):
     """Ensures variants returned via search have the expected range."""
     start = 41246794
     end = 41247374
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "end": end,
                                     "referenceName": "chr17",
                                     "variantSetId": "brca-hg37",
                                     "start": start
                                 }),
                                 content_type="application/json")
     response = views.search_variants(request)
     jresp = json.loads(response.content)
     self.assertGreater(len(jresp["variants"]), 0)
     for variant in jresp["variants"]:
         self.assertTrue(long(variant["end"]) > start)
         self.assertTrue(
             long(variant["start"]) < end, "Should be in range"
             " v.start {} r.end {}".format(variant['start'], end))
         self.assertTrue(variant["referenceName"] == "chr17")
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "end": end,
                                     "referenceName": "17",
                                     "variantSetId": "brca-hg37",
                                     "start": start
                                 }),
                                 content_type="application/json")
     response1 = views.search_variants(request)
     self.assertEqual(response.content, response1.content,
                      "Both 17 and chr17 return the same results")
Example #3
0
 def test_search_variants_requested_range_present(self):
     """Ensures variants returned via search have the expected range."""
     start = 41246794
     end = 41247374
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({"end": end,
                                             "referenceName": "chr17",
                                             "variantSetId": "brca-hg37",
                                             "start": start}),
                                 content_type = "application/json")
     response = views.search_variants(request)
     jresp = json.loads(response.content)
     self.assertGreater(len(jresp["variants"]), 0)
     for variant in jresp["variants"]:
         self.assertTrue(long(variant["end"]) > start)
         self.assertTrue(long(variant["start"]) < end,
                         "Should be in range"
                         " v.start {} r.end {}".format(variant['start'], end))
         self.assertTrue(
             variant["referenceName"] == "chr17" or variant["referenceName"] == "17",
                 "Searched for chr17 and got {}".format(variant["referenceName"]))
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({"end": end,
                                             "referenceName": "17",
                                             "variantSetId": "brca-hg37",
                                             "start": start}),
                                 content_type = "application/json")
     response1 = views.search_variants(request)
     self.assertEqual(response.content, response1.content,
                      "Both 17 and chr17 return the same results")
Example #4
0
 def test_search_unsupported_region(self):
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "referenceName": "chr13",
                                     "variantSetId": "brca-hg36",
                                     "start": 10,
                                     "end": 10000
                                 }),
                                 content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)
     """Note that it is an empty response, no variants exist within
     the provided search range"""
     self.assertEqual(json_response['nextPageToken'], unicode(''))
     self.assertEqual(json_response['variants'], list([]))
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "referenceName": "5",
                                     "variantSetId": "brca-hg36",
                                     "start": 10,
                                     "end": 10000000000
                                 }),
                                 content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)
     """Note that it is an empty response, no variants exist within
     the provided search range"""
     self.assertEqual(response.status_code, 200)
     self.assertEqual(json_response['nextPageToken'], unicode(''))
     self.assertEqual(json_response['variants'], list([]))
Example #5
0
    def test_get_variant_by_id(self):
        """Ensures the results found via search variants and get variant by ID are equal."""
        search_request = self.factory.post("/data/ga4gh/variants/search",
                                           json.dumps({"referenceName": "chr17",
                                                       "variantSetId": "brca-hg37",
                                                       "start" : 4124692, "end" : 41247086,
                                                       "pageSize": 1}),
                                           content_type="application/json"
                                           )
        search_response = views.search_variants(search_request)
        json_search_response = json.loads(search_response.content)["variants"][0]
        self.assertIsNotNone(json_search_response["variantSetId"])
        self.assertIsNotNone(json_search_response["referenceName"])
        self.assertIsNotNone(json_search_response["id"])

        search_based_id = str(json_search_response['id'])
        get_request = self.factory.get("/data/ga4gh/variants/"+search_based_id)
        response = views.get_variant(get_request, search_based_id)
        json_get_response = json.loads(response.content)

        """Note, because we made a get_request based on the search above,
        we should be able to confirm that the individual variant request is exactly the same one"""
        self.assertEqual(json_get_response["referenceName"], json_search_response["referenceName"])
        self.assertEqual(json_get_response["start"], json_search_response["start"])
        self.assertEqual(json_get_response["end"], json_search_response["end"])
Example #6
0
    def test_get_variant_by_id(self):
        """Ensures the results found via search variants and get variant by ID are equal."""
        search_request = self.factory.post("/data/ga4gh/variants/search",
                                           json.dumps({
                                               "referenceName": "chr17",
                                               "variantSetId": "brca-hg37",
                                               "start": 4124692,
                                               "end": 41247086,
                                               "pageSize": 1
                                           }),
                                           content_type="application/json")
        search_response = views.search_variants(search_request)
        json_search_response = json.loads(
            search_response.content)["variants"][0]
        self.assertIsNotNone(json_search_response["variantSetId"])
        self.assertIsNotNone(json_search_response["referenceName"])
        self.assertIsNotNone(json_search_response["id"])

        search_based_id = str(json_search_response['id'])
        get_request = self.factory.get("/data/ga4gh/variants/" +
                                       search_based_id)
        response = views.get_variant(get_request, search_based_id)
        json_get_response = json.loads(response.content)
        """Note, because we made a get_request based on the search above,
        we should be able to confirm that the individual variant request is exactly the same one"""
        self.assertEqual(json_get_response["referenceName"],
                         json_search_response["referenceName"])
        self.assertEqual(json_get_response["start"],
                         json_search_response["start"])
        self.assertEqual(json_get_response["end"], json_search_response["end"])
Example #7
0
 def test_ordered_range_for_search_variant(self):
     START = 41246925
     END = 41247084
     # Assure Start is less than End
     self.assertGreater(END, START)
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({"referenceName": "chr17",
                                             "variantSetId": "brca-hg37",
                                             "start": START, "end": END,
                                             "pageSize": 9}),
                                 content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)["variants"]
     previews_start = 0
     for variant in json_response:
         if previews_start == 0:
             previews_start = variant['start']
             self.assertGreaterEqual(variant["start"], START)
         else:
             """Note that if in order ranged is returned
             the previews start value should be less than the following
             in the list"""
             if variant['end'] == END:
                 break
             self.assertLess(previews_start, variant['start'])
             previews_start = variant['start']
Example #8
0
 def test_ordered_range_for_search_variant(self):
     START = 41246925
     END = 41247084
     # Assure Start is less than End
     self.assertGreater(END, START)
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "referenceName": "chr17",
                                     "variantSetId": "brca-hg37",
                                     "start": START,
                                     "end": END,
                                     "pageSize": 9
                                 }),
                                 content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)["variants"]
     previews_start = 0
     for variant in json_response:
         if previews_start == 0:
             previews_start = variant['start']
             self.assertGreaterEqual(variant["start"], START)
         else:
             """Note that if in order ranged is returned
             the previews start value should be less than the following
             in the list"""
             if variant['end'] == END:
                 break
             self.assertLess(previews_start, variant['start'])
             previews_start = variant['start']
Example #9
0
    def test_search_variants_paging_token(self):
        """Tests that paging works as expected for the search variants endpoint."""
        # Request a very large range of variants
        counter = 50
        start = 31222950
        end = 51222977
        while counter > 5:
            new_v = test_data.existing_variant()
            # Genomic coordinates are irrelevant to this test, but the format is required regardless
            new_v['Genomic_Coordinate_hg38'] = 'chr17:g.' + str(start-counter) + ':A>G'
            new_v['Genomic_Coordinate_hg37'] = 'chr17:g.' + str(end-counter) + ':A>G'
            new_v['Hg37_Start'] = end - counter
            new_v['Hg37_End'] = end - counter
            create_variant_and_materialized_view(new_v)
            counter -= 1

        request = self.factory.post(
            "/data/ga4gh/variants/search", json.dumps(
                {"end": end,
                 "referenceName": "chr17",
                 "variantSetId": "brca-hg37",
                 "start": start,
                 "pageSize": 5}), content_type="application/json")
        response = views.search_variants(request)
        self.assertEqual(
            json.loads(response.content)["nextPageToken"],
            "1", "A page token should be set")
        request = self.factory.post(
            "/data/ga4gh/variants/search", json.dumps(
                {"end": end,
                 "referenceName": "chr17",
                 "variantSetId": "brca-hg37",
                 "start": start,
                 "pageSize": 5,
                 "pageToken": "3"}), content_type="application/json", )
        response = json.loads(views.search_variants(request).content)
        for variant in response["variants"]:
            self.assertGreater(long(variant["end"]), start)
            self.assertLess(long(variant["start"]), end,
                            "Should be in range"
                            " v.start {} r.end {}".format(variant['start'], end))
        self.assertEqual(response["nextPageToken"], "4")
        self.assertEquals(len(response["variants"]), 5)
Example #10
0
 def test_search_variants_alive(self):
     """Ensures that search variants responds successfully for a known search"""
     request =  self.factory.post(
         "/data/ga4gh/variants/search",
         json.dumps(
             {"referenceName": "chr17",
              "variantSetId": "brca-hg37",
              "start": 51425158,
              "end": 515158029,
              "pageSize": 5 }), content_type="application/json")
     response = views.search_variants(request)
     self.assertEqual(response.status_code, 200)
Example #11
0
 def test_search_variants_alive(self):
     """Ensures that search variants responds successfully for a known search"""
     request =  self.factory.post(
         "/data/ga4gh/variants/search",
         json.dumps(
             {"referenceName": "chr17",
              "variantSetId": "brca-hg37",
              "start": 51425158,
              "end": 515158029,
              "pageSize": 5 }), content_type="application/json")
     response = views.search_variants(request)
     self.assertEqual(response.status_code, 200)
Example #12
0
 def test_search_variants_paging_token(self):
     """Tests that paging works as expected for the search variants endpoint."""
     # Request a very large range of variants
     request = self.factory.post("/data/ga4gh/variants/search",
                                 json.dumps({
                                     "end": 45158029,
                                     "referenceName": "chr13",
                                     "variantSetId": "brca-hg37",
                                     "start": 20425158,
                                     "pageSize": 5
                                 }),
                                 content_type="application/json")
     response = views.search_variants(request)
     self.assertEqual(
         json.loads(response.content)["nextPageToken"], "1",
         "A page token should be set")
     start = 41245664
     end = 42245664
     request = self.factory.post(
         "/data/ga4gh/variants/search",
         json.dumps({
             "end": end,
             "referenceName": "chr17",
             "variantSetId": "brca-hg37",
             "start": start,
             "pageSize": 5,
             "pageToken": "3"
         }),
         content_type="application/json",
     )
     response = json.loads(views.search_variants(request).content)
     for variant in response["variants"]:
         self.assertGreater(long(variant["end"]), start)
         self.assertLess(
             long(variant["start"]), end, "Should be in range"
             " v.start {} r.end {}".format(variant['start'], end))
     self.assertEqual(response["nextPageToken"], "4")
     self.assertEquals(len(response["variants"]), 5)
Example #13
0
 def test_search_unsupported_region(self):
     request = self.factory.post("/data/ga4gh/variants/search",
                                        json.dumps({"referenceName": "chr13",
                                                    "variantSetId": "brca-hg36",
                                                    "start": 10, "end": 10000}),
                                        content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)
     """Note that it is an empty response, no variants exist within
     the provided search range"""
     self.assertEqual(json_response['nextPageToken'], unicode(''))
     self.assertEqual(json_response['variants'], list([]))
     request = self.factory.post("/data/ga4gh/variants/search",
                                        json.dumps({"referenceName": "5",
                                                    "variantSetId": "brca-hg36",
                                                    "start": 10, "end": 10000000000}),
                                        content_type="application/json")
     response = views.search_variants(request)
     json_response = json.loads(response.content)
     """Note that it is an empty response, no variants exist within
     the provided search range"""
     self.assertEqual(response.status_code, 200)
     self.assertEqual(json_response['nextPageToken'], unicode(''))
     self.assertEqual(json_response['variants'], list([]))
Example #14
0
    def test_search_variants_empty_page_request(self):
        """This would be the same response when a requested
        range is not supported, that is, no variants are registered
        within the requested range"""

        request = self.factory.post(
            "/data/ga4gh/variants/search",
            json.dumps({"variantSetId": "brca-hg37",
                        "referenceName": "chr17",
                        "start": 10000, "end": 41196822,
                        "pageSize": 10, "pageToken": "5"}),
            content_type="application/json")
        response = views.search_variants(request)
        json_response = json.loads(response.content)
        # Note that it is an empty response, therefore assertions are done to empty values
        self.assertEqual(json_response["nextPageToken"], "")
        self.assertEqual(json_response["variants"], list([]))
Example #15
0
    def test_search_variants_empty_page_request(self):
        """This would be the same response when a requested
        range is not supported, that is, no variants are registered
        within the requested range"""

        request = self.factory.post(
            "/data/ga4gh/variants/search",
            json.dumps({"variantSetId": "brca-hg37",
                        "referenceName": "chr17",
                        "start": 10000, "end": 41196822,
                        "pageSize": 10, "pageToken": "5"}),
            content_type="application/json")
        response = views.search_variants(request)
        json_response = json.loads(response.content)
        # Note that it is an empty response, therefore assertions are done to empty values
        self.assertEqual(json_response["nextPageToken"], "")
        self.assertEqual(json_response["variants"], list([]))
Example #16
0
    def test_search_variants_request_validation(self):
        """Ensures the search variants endpoint responds with expected failure modes"""
        request = variant_service.SearchVariantsRequest()
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEqual(response.status_code, 400, "No variant set ID should 400")
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['variantSetId'],
                             "No variant set ID in the request should provide a useful error")
        request.variant_set_id = "Something not null"
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEquals(response.status_code, 400)
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['referenceName'],
                             "A useful error is thrown when the reference name is not present")
        request.reference_name = "chr17"
        req= self.factory.post("/data/ga4gh/variants/search",
                               json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['start'],
                             "A useful error is thrown when no start is present")
        request.start = 14589
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertJSONEqual(response.content, views.ErrorMessages['end'],
                             "A useful error is provided when no end is present")
        request.end = 143295
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEquals(response.status_code, 404, "A bad variant set ID should 404")
        # Test for an end value less than the end value

        test_request = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps({"referenceName": "chr17", "variantSetId": "brca-hg37", "start": 10000, "end": 1000}),
                                content_type="application/json")
        response_x = views.search_variants(test_request)
        self.assertEqual(response_x.status_code, 400)
        self.assertJSONEqual(response_x.content, views.ErrorMessages['invalidPositions'])
Example #17
0
    def test_search_variants_request_validation(self):
        """Ensures the search variants endpoint responds with expected failure modes"""
        request = variant_service.SearchVariantsRequest()
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEqual(response.status_code, 400, "No variant set ID should 400")
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['variantSetId'],
                             "No variant set ID in the request should provide a useful error")
        request.variant_set_id = "Something not null"
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEquals(response.status_code, 400)
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['referenceName'],
                             "A useful error is thrown when the reference name is not present")
        request.reference_name = "chr17"
        req= self.factory.post("/data/ga4gh/variants/search",
                               json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertJSONEqual(response.content,
                             views.ErrorMessages['start'],
                             "A useful error is thrown when no start is present")
        request.start = 14589
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertJSONEqual(response.content, views.ErrorMessages['end'],
                             "A useful error is provided when no end is present")
        request.end = 143295
        req = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps(json_format.MessageToDict(request, False)),
                                content_type="application/json")
        response = views.search_variants(req)
        self.assertEquals(response.status_code, 404, "A bad variant set ID should 404")
        # Test for an end value less than the end value

        test_request = self.factory.post("/data/ga4gh/variants/search",
                                json.dumps({"referenceName": "chr17", "variantSetId": "brca-hg37", "start": 10000, "end": 1000}),
                                content_type="application/json")
        response_x = views.search_variants(test_request)
        self.assertEqual(response_x.status_code, 400)
        self.assertJSONEqual(response_x.content, views.ErrorMessages['invalidPositions'])