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