diff --git a/services/capability/capability/views/capability_request.py b/services/capability/capability/views/capability_request.py index bac44321971333f3a48aef57c377d1f1149a61ff..1454355f1dfc3e6e6890e12df51345140d257cbc 100644 --- a/services/capability/capability/views/capability_request.py +++ b/services/capability/capability/views/capability_request.py @@ -106,4 +106,4 @@ def submit_capability_request(request: Request) -> Response: return HTTPPreconditionFailed(detail=does_not_exist_msg) else: execution = request.capability_service.run_capability(capability_request) - return Response(body=execution.__json__()) + return Response(json_body=execution.__json__()) diff --git a/services/capability/test/conftest.py b/services/capability/test/conftest.py index 2bfa0ab2927f4c768fde4932230baf5dd22b7c4b..9f4facfb05d3ea3243c9ac50f1652399faec5815 100644 --- a/services/capability/test/conftest.py +++ b/services/capability/test/conftest.py @@ -5,10 +5,11 @@ import pytest from pyramid.config import Configurator from pyramid.testing import DummyRequest, setUp, tearDown -from workspaces.capability.enums import CapabilityRequestState +from workspaces.capability.enums import CapabilityRequestState, ExecutionState from workspaces.capability.helpers import Parameter from workspaces.capability.schema import ( Capability, + CapabilityExecution, CapabilityRequest, CapabilityVersion, ) @@ -58,6 +59,7 @@ class MockCapabilityInfo(MagicMock): versions=[], ) ] + capability_executions = [] def edit_capability( self, name: str, steps: str = None, max_jobs: int = None, enabled: bool = None @@ -94,6 +96,9 @@ class MockCapabilityInfo(MagicMock): elif type(entity) is CapabilityRequest: entity.id = len(self.capability_requests) self.capability_requests.append(entity) + elif type(entity) is CapabilityExecution: + entity.id = len(self.capability_executions) + self.capability_executions.append(entity) class MockCapabilityService(MagicMock): @@ -127,6 +132,27 @@ class MockCapabilityService(MagicMock): self.capability_info.save_entity(request) return request + def run_capability(self, capability_request: CapabilityRequest) -> CapabilityExecution: + """ + Mock run_capability method + + :param capability_request: Request to make an execution for + :return: Mocked execution + """ + execution = CapabilityExecution( + state=ExecutionState.Ready.name, + version=CapabilityVersion( + capability_request_id=capability_request.id, + version_number=1, + parameters=capability_request.parameters, + request=capability_request, + ), + current_step=0, + steps="test", + ) + self.capability_info.save_entity(execution) + return execution + @pytest.fixture(scope="module") def request_null_capability() -> DummyRequest: diff --git a/services/capability/test/test_capability_request_views.py b/services/capability/test/test_capability_request_views.py index 6d546e42e76994ae41c4c3a51057bb971f715052..8565d6d41d9d43e044ee125855c435593a59cae7 100644 --- a/services/capability/test/test_capability_request_views.py +++ b/services/capability/test/test_capability_request_views.py @@ -98,3 +98,40 @@ def test_create_capability_request_error( 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 + + +def test_submit_capability_request( + test_config: Configurator, request_null_capability: DummyRequest +): + """ + Tests that the submit_capability_request view correctly executes its logic + + :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 submit_capability_request + + request_null_capability.matchdict["capability_name"] = "null" + request_null_capability.matchdict["request_id"] = 0 + response = submit_capability_request(request_null_capability) + assert response.status_code == 200 + + +def test_submit_capability_request_error( + test_config: Configurator, request_null_capability: DummyRequest +): + """ + Tests that the submit_capability_request view correctly executes its logic + + :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 submit_capability_request + + request_null_capability.matchdict["capability_name"] = "null" + request_null_capability.matchdict["request_id"] = -1 + response = submit_capability_request(request_null_capability) + assert response.status_code == 412 + assert type(response) is HTTPPreconditionFailed