diff --git a/services/capability/test/test_capability_routes.py b/services/capability/test/test_capability_routes.py index c129488a446d938d1ba3505efb14262410068831..c6938dfa113c69de543262bd63c553bd9b8e3682 100644 --- a/services/capability/test/test_capability_routes.py +++ b/services/capability/test/test_capability_routes.py @@ -19,18 +19,34 @@ """ Make sure we've got all the capability routes""" # pylint: disable=E0401, W0621 - +import copy +import http from typing import List +from unittest.mock import patch import pytest +from capability.views.capability_request import create_follow_on_capability_request from pyramid.config import Configurator from pyramid.interfaces import IRoutesMapper +from pyramid.testing import DummyRequest + +from workspaces.capability.schema import CapabilityRequest +from workspaces.capability.services.capability_service import CapabilityService +from workspaces.workflow.schema import WorkflowRequest +from workspaces.workflow.services.workflow_service import WorkflowService + +pytest_plugins = ["testing.utils.conftest"] RouteList = List[str] @pytest.fixture() def capability_routes() -> RouteList: + """ + All the capability routes (or should be) + + :return: list of all available capability routes + """ return [ "home", "view_capability", @@ -83,3 +99,45 @@ def test_routes_exist(test_config: Configurator, capability_routes: RouteList): assert route in route_names assert len(capability_routes) == len(route_names) + + +def test_create_follow_on_capability_request( + request_null_capability: DummyRequest, + mock_capability_service: CapabilityService, + mock_workflow_service: WorkflowService, + mock_workflow_requests: List[WorkflowRequest], + mock_capability_requests: List[CapabilityRequest], +): + """ + Test for CapabilityRequest.create_follow_on_capability_request + + :param request_null_capability: Dummy Pyramid request object set up with mocked DB access + supporting the null capability + :param mock_capability_service: stand-in for CapabilityService + :param mock_workflow_service: stand-in for WorkflowService + :param mock_workflow_requests: WorkflowRequest impostors + :param mock_capability_requests: CapabilityRequest impostors + + :return: + """ + capability_request = copy.deepcopy(mock_capability_requests[0]) + capability_request.capability_name = "std_cms_imaging" + + request_null_capability.matchdict["request_id"] = capability_request.id + + request_null_capability.workflow_service = mock_workflow_service + request_null_capability.matchdict["workflow_request_id"] = mock_workflow_requests[0].workflow_request_id + version = mock_capability_service.create_new_version(capability_request_id=capability_request.id) + version.parameters = {"user_email": "jgoldste@nrao.edu", "previous_workflow_request_id": 42} + request_null_capability.matchdict["version_number"] = version.version_number + + request_null_capability.matchdict["followon_type"] = capability_request.capability_name + + fake_file_content = '{"destinationDirectory": "/var/tmp", "fileSetIds": "[]"}' + with patch( + "workspaces.workflow.services.workflow_service.WorkflowService.retrieve_file_content", + return_value=fake_file_content, + ) as mock_retrieve: + response = create_follow_on_capability_request(request=request_null_capability, version=version) + assert response.status_code == http.HTTPStatus.OK + mock_retrieve.assert_called_once() diff --git a/shared/workspaces/test/test_capability_request.py b/shared/workspaces/test/test_capability_request.py index b6f4043b0492bac9c18f8f46b2f175f6c59831be..a51714ea196001a3d698a90c733b79ff80a55ead 100644 --- a/shared/workspaces/test/test_capability_request.py +++ b/shared/workspaces/test/test_capability_request.py @@ -35,6 +35,8 @@ from .conftest import ( clear_test_database, ) +pytest_plugins = ["testing.utils.conftest"] + # Register CapabilityRequest JSON blueprint as a hypothesis type strategy # To use: # >>> @given(st.from_type(CapabilityRequest))