Skip to content
Snippets Groups Projects
test_capability_routes.py 5.19 KiB
Newer Older
#
# Copyright (C) 2021 Associated Universities, Inc. Washington DC, USA.
#
# This file is part of NRAO Workspaces.
#
# Workspaces is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Workspaces is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Workspaces.  If not, see <https://www.gnu.org/licenses/>.

""" Make sure we've got all the capability routes"""

# pylint: disable=E0401, W0621
from unittest.mock import patch
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
    """
        "view_active_capability_requests",
        "view_created_capability_requests",
        "create_capability",
        "edit_capability",
        "enable_capability",
        "disable_capability",
        "view_capability_request",
        "create_capability_request",
        "create_and_submit_capability_request",
        "launch_capability_request_from_ingestion_details",
        "get_execution_by_version",
        "create_version_from_previous_execution_script",
        "cancel_capability_request",
        "delete_capability_request",
        "view_version_metadata",
        "edit_version_metadata",
        "create_capability_version",
Charlotte Hausman's avatar
Charlotte Hausman committed
        "add_file_to_latest",
        "get_execution_from_workflow_id",
    ]


def test_routes_exist(test_config: Configurator, capability_routes: RouteList):
    """
    Tests that the Pyramid config has the proper capability routes set up

    :param test_config: Mock pyramid config for testing purposes
    """
    test_config.include("capability.routes")
    mapper = test_config.registry.queryUtility(IRoutesMapper)
    route_names = [route.name for route in mapper.get_routes()]

    for route in route_names:
        assert route in capability_routes

    for route in capability_routes:
        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()