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)
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")))