From d35872e32b552cbca26bc3c8c90b05b20ad8613a Mon Sep 17 00:00:00 2001 From: nhertz <nhertz@nrao.edu> Date: Fri, 19 Feb 2021 16:33:32 -0700 Subject: [PATCH] Added tests for `submit_capability_request` view --- .../capability/views/capability_request.py | 2 +- services/capability/test/conftest.py | 28 +++++++++++++- .../test/test_capability_request_views.py | 37 +++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/services/capability/capability/views/capability_request.py b/services/capability/capability/views/capability_request.py index bac443219..1454355f1 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 2bfa0ab29..9f4facfb0 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 6d546e42e..8565d6d41 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 -- GitLab