def test_results_body_nominal(self):
     expectedBody = self.loadJsonFromFile(stack()[0][3] + ".json")
     query = clsQuery()
     query.query_graph = expectedBody['query_graph']
     query.knowledge_graph = expectedBody['knowledge_graph']
     query.generateResults()
     self.assertEqual(expectedBody['results'], query.results)
Exemplo n.º 2
0
    def post(self):
        """
        HTTP POST request
        * Initializes query model
        * Checks user request body is valid
        * Checks user request body is supported
        * Forwards request body to knowledge provider POST
        * Checks knowledge provider response body is valid
        * Generates results
        * Returns entire query view model back to client
        :return: Query view model
        """

        query = clsQuery()

        try:
            userRequestBody = request.json if request.is_json else json.loads(
                request.data)
        except json.decoder.JSONDecodeError:
            raise BadRequest("Supplied request body does not conform")
        if not query.userRequestBodyIsValid(userRequestBody):
            raise BadRequest("Supplied request body does not conform")

        query.applyQueryGraphFromUserRequestBody(userRequestBody)

        if not query.userRequestBodyIsSupported(userRequestBody):
            query.generateEmptyKnowledgeGraph()
            query.generateEmptyResults()
            return vars(query), 200

        try:
            response = requests.post(url=knowledgeProviderUrl,
                                     json=userRequestBody)
            response.raise_for_status()
        except Exception:
            return json.loads(response.text), response.status_code

        del userRequestBody

        try:
            knowledgeProviderResponseBody = json.loads(response.text)
        except json.decoder.JSONDecodeError:
            raise InternalServerError(
                "Knowledge Provider response body does not conform, have they changed their API?"
            )
        if not query.knowledgeProviderResponseBodyIsValid(
                knowledgeProviderResponseBody):
            raise InternalServerError(
                "Knowledge Provider response body does not conform, have they changed their API?"
            )

        query.applyKnowledgeGraphFromKnowledgeProviderResponseBody(
            knowledgeProviderResponseBody)
        del knowledgeProviderResponseBody

        query.generateResults()

        return vars(query), 200
 def test_user_request_body_nodes_not_list(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_query_graph_not_dictionary(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_query_graph_with_extra_field(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_message_missing(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_nominal_swapped_edges_and_nodes_and_sub_nodes(
         self):
     self.assertEqual(
         True,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_knowledge_provider_response_body_node_not_dictionary(self):
     self.assertEqual(
         False,
         clsQuery().knowledgeProviderResponseBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_knowledge_provider_response_body_knowledge_graph_missing(self):
     self.assertEqual(
         False,
         clsQuery().knowledgeProviderResponseBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_knowledge_provider_response_body_nominal(self):
     self.assertEqual(
         True,
         clsQuery().knowledgeProviderResponseBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_edge_keys_not_supported(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsSupported(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_nominal(self):
     self.assertEqual(
         True,
         clsQuery().userRequestBodyIsValid(
             self.loadJsonFromFile(stack()[0][3] + ".json")))
 def test_user_request_body_disease_ids_mismatch_not_supported(self):
     self.assertEqual(
         False,
         clsQuery().userRequestBodyIsSupported(
             self.loadJsonFromFile(stack()[0][3] + ".json")))