diff --git a/services/capability/test/test_capability_request_views.py b/services/capability/test/test_capability_request_views.py new file mode 100644 index 0000000000000000000000000000000000000000..8a6f71db4d07a28a412bf528b747b3065b2b737a --- /dev/null +++ b/services/capability/test/test_capability_request_views.py @@ -0,0 +1,104 @@ +""" +Tests that test the view functionality of our capability request REST API. +The logic can be found in `capability/views/capability.py`. +""" + +from pyramid.config import Configurator +from pyramid.httpexceptions import ( + HTTPBadRequest, + HTTPExpectationFailed, + HTTPNotFound, + HTTPPreconditionFailed, +) +from pyramid.testing import DummyRequest + + +def test_view_capability_request(test_config: Configurator, request_null_capability: DummyRequest): + """ + Tests the view_capability_request view to make sure it properly returns the info of a capability request + + :param test_config: Dummy Pyramid Configurator object set up for testing + :param request_null_capability: Dummy Pyramid request object set up with mocked DB access + supporting the null capability + """ + from capability.views.capability_request import view_capability_request + + expected_response = ( + '{"id": 0, "capability_name": "null", "state": "Created", "parameters": "-g"}' + ) + request_null_capability.matchdict["capability_name"] = "null" + request_null_capability.matchdict["request_id"] = 0 + response = view_capability_request(request_null_capability) + assert response.status_code == 200 + assert response.json_body == expected_response + + +def test_view_capability_request_not_found( + test_config: Configurator, request_null_capability: DummyRequest +): + """ + Tests the view_capability_request view to make sure it properly returns a 404 Not Found exception + when a capability request does not exist + + :param test_config: Dummy Pyramid Configurator object set up for testing + :param request_null_capability: Dummy Pyramid request object set up with mocked DB access + supporting the null capability + """ + from capability.views.capability_request import view_capability_request + + request_null_capability.matchdict["capability_name"] = "null" + request_null_capability.matchdict["request_id"] = -1 + response = view_capability_request(request_null_capability) + assert response.status_code == 404 + assert type(response) is HTTPNotFound + + +def test_create_capability_request( + test_config: Configurator, request_null_capability: DummyRequest +): + """ + Tests the create capability view to make sure it properly supports creation of capabilities + + :param test_config: Dummy Pyramid Configurator object set up for testing + :param request_null_capability: Dummy Pyramid request object set up with mocked DB access + supporting the null capability + """ + from capability.views.capability_request import create_capability_request + + request_null_capability.json_body = {"parameters": "-g", "versions": []} + + # Assert test capability not in list of capabilities (mocked) + assert not request_null_capability.capability_info.lookup_capability_request(1) + + response = create_capability_request(request_null_capability) + assert response.status_code == 200 + expected_response = ( + '{"id": 1, "capability_name": "null", "state": "Created", "parameters": "-g"}' + ) + assert response.json_body == expected_response + # Assert test capability has been added to list of capabilities (mocked) + assert request_null_capability.capability_info.lookup_capability_request(1) + + +def test_create_capability_request_error( + test_config: Configurator, request_null_capability: DummyRequest +): + """ + Tests that the create_capability_request view correctly responds with exceptions given bad input + + :param test_config: Dummy Pyramid Configurator object set up for testing + :param request_null_capability: Dummy Pyramid request object set up with mocked DB access + supporting the null capability + """ + from capability.views.capability_request import create_capability_request + + request_null_capability.json_body = {"bad": "param"} + response_bad_params = create_capability_request(request_null_capability) + assert response_bad_params.status_code == 400 + assert type(response_bad_params) is HTTPBadRequest + + request_null_capability.matchdict["capability_name"] = "does_not_exist" + request_null_capability.json_body = {"parameters": "-g", "versions": []} + response_does_not_exist = create_capability_request(request_null_capability) + assert response_does_not_exist.status_code == 412 + assert type(response_does_not_exist) is HTTPPreconditionFailed