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
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",
"view_active_capability_requests",
"view_created_capability_requests",
"create_capability",
"edit_capability",
"enable_capability",
"disable_capability",

Andrew Kapuscinski
committed
"pause_capability",
"unpause_capability",
"view_capability_request",
"create_capability_request",
"create_and_submit_capability_request",
"launch_capability_request_from_ingestion_details",

Charlotte Hausman
committed
"create_follow_on_capability_request",
"edit_capability_request",
"get_execution_by_version",
"create_version_from_previous_execution_script",
"cancel_capability_request",
"delete_capability_request",
"view_all_versions",

Nathan Hertz
committed
"view_latest_version",
"view_specific_version",
"view_version_metadata",
"edit_version_metadata",
"submit_capability_version",
"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)
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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()