Skip to content
Snippets Groups Projects
Commit a7b568a9 authored by Janet Goldstein's avatar Janet Goldstein
Browse files

WS-858: fix bugs in `create_follow_on_capability_request`, hopefully for the last time

parent ee105fcc
No related branches found
No related tags found
1 merge request!718WS-858: fix bugs in `create_follow_on_capability_request`, hopefully for the last time
Pipeline #4025 passed
......@@ -16,24 +16,26 @@
* You should have received a copy of the GNU General Public License
* along with Workspaces. If not, see <https://www.gnu.org/licenses/>.
*/
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
import { CapabilityRequest } from "../model/capability-request";
import { CapabilityVersion } from "../model/capability-version";
import { JsonObject } from "@angular/compiler-cli/ngcc/src/packages/entry_point";
import { ActivatedRoute, Router } from "@angular/router";
import {Injectable} from "@angular/core";
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
import {CapabilityRequest} from "../model/capability-request";
import {CapabilityVersion} from "../model/capability-version";
import {JsonObject} from "@angular/compiler-cli/ngcc/src/packages/entry_point";
import {ActivatedRoute, Router} from "@angular/router";
@Injectable({
providedIn: "root",
})
export class CapabilityRequestService {
baseUrl = "/workspaces";
constructor(
private httpClient: HttpClient,
private router: Router,
private route: ActivatedRoute,
) {}
) {
}
/**
* Returns URL for GETting capability request definition
......@@ -113,8 +115,7 @@ export class CapabilityRequestService {
}
/**
* Add file to latest version of capability request
*
* Add file to selected capability request version
* @param requestId ID of request whose latest version will receive the file
* @param filename Name of file
* @param content Content of file
......@@ -134,7 +135,7 @@ export class CapabilityRequestService {
*/
public sendQaPassRequest(requestId: number, version: number): Observable<string> {
const qaPassUrl = `workflows/requests/${requestId}/qa/qa_pass`;
return this.httpClient.post<string>(qaPassUrl, { capability_version: version });
return this.httpClient.post<string>(qaPassUrl, {capability_version: version});
}
/**
......@@ -145,7 +146,7 @@ export class CapabilityRequestService {
*/
public sendQaFailRequest(requestId: number, version: number): Observable<string> {
const qaFailUrl = `workflows/requests/${requestId}/qa/qa_fail`;
return this.httpClient.post<string>(qaFailUrl, { capability_version: version });
return this.httpClient.post<string>(qaFailUrl, {capability_version: version});
}
/**
......@@ -164,7 +165,7 @@ export class CapabilityRequestService {
return this.httpClient.post<CapabilityVersion>(
newVersionUrl,
JSON.stringify({ parameters: parameters }),
JSON.stringify({parameters: parameters}),
);
}
......
......@@ -21,6 +21,8 @@
File containing definitions for the other half of the capability side of the Workspaces REST API,
concerning capability requests
"""
# pylint: disable=E0401
import json
from capability.views.capability_version import submit_capability_version
......@@ -133,25 +135,30 @@ def create_follow_on_capability_request(request: Request) -> Response:
requested
"""
request_id = request.matchdict["request_id"]
followon_type = request.matchdict["followon_type"]
request_id = request.matchdict["request_id"]
capability_info = request.capability_info
capability_request = request.capability_info.lookup_capability_request(request_id)
parameters = capability_request.current_version.parameters
version_number = int(request.matchdict["version"])
current_version = capability_info.lookup_version(request_id, version_number)
parameters = current_version.parameters
user_email = parameters["user_email"]
previous_workflow_id = capability_request.current_execution.current_workflow_request_id
previous_workflow_id = current_version.current_execution.current_workflow_request_id
metadata_content = request.workflow_service.retrieve_file_content(
followon_type, previous_workflow_id, "metadata.json"
)
metadata = json.loads(metadata_content)
cms_path = metadata["destinationDirectory"] + "/working"
sdm_id = metadata["fileSetIds"][0] if isinstance(metadata["fileSetIds"], list) else metadata["fileSetIds"]
new_capability_request = request.capability_info.create_capability_request(
followon_type, parameters={"cms_path": cms_path, "sdmId": sdm_id, "user_email": user_email}
capability_name=followon_type,
parameters={
"user_email": user_email,
"sdm_id": sdm_id,
"cms_path": cms_path,
},
)
return Response(json_body=new_capability_request.__json__())
......@@ -172,6 +179,12 @@ def edit_capability_request(request: Request) -> Response:
@view_config(route_name="create_and_submit_capability_request", renderer="json")
def create_and_submit_capability_request(request: Request) -> Response:
"""
Pyramid view to create and submit a capability request
:param request: dummy POST request
:return:
"""
response = create_capability_request(request)
capability_request = request.capability_info.lookup_capability_request(response.json_body["id"])
request.matchdict = {
......
......@@ -19,18 +19,39 @@
""" 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 (
Capability,
CapabilityRequest,
CapabilityVersion,
)
from workspaces.capability.services.capability_info import CapabilityInfo
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",
......
......@@ -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))
......
......@@ -378,7 +378,7 @@ class WorkflowService(WorkflowServiceIF):
argument2 = [wf_request.argument["cal_locator"]]
elif "imaging" in name:
wrest_type = "-si"
argument = wf_request.argument["sdmId"]
argument = wf_request.argument["sdm_id"]
argument2 = []
elif "carta" in name:
wrest_type = "--carta"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment