def test_create_workflow_from_json(create_yaml_workflow_schema):
    """Test create workflow from json specification."""
    status_code = 201
    response = {
        "message": "The workflow has been successfully created.",
        "workflow_id": "cdcf48b1-c2f3-4693-8230-b066e088c6ac",
        "workflow_name": "mytest",
    }
    env = {"REANA_SERVER_URL": "localhost"}
    reana_token = "000000"
    mock_http_response, mock_response = Mock(), Mock()
    mock_http_response.status_code = status_code
    mock_response = response
    workflow_json = yaml.load(create_yaml_workflow_schema,
                              Loader=yaml.FullLoader)
    with patch.dict("os.environ", env):
        with patch(
                "reana_client.api.client.current_rs_api_client",
                make_mock_api_client("reana-server")(mock_response,
                                                     mock_http_response),
        ):
            result = create_workflow_from_json(
                workflow_json=workflow_json["workflow"],
                name=response["workflow_name"],
                access_token=reana_token,
                parameters=workflow_json["inputs"],
                workflow_engine="serial",
            )
            assert response["workflow_name"] == result["workflow_name"]
            assert response["message"] == result["message"]
def test_create_workflow_from_json(create_yaml_workflow_schema):
    """Test create workflow from json specification."""
    status_code = 201
    response = {
        "message": "The workflow has been successfully created.",
        "workflow_id": "cdcf48b1-c2f3-4693-8230-b066e088c6ac",
        "workflow_name": "mytest.1"
    }
    env = {'REANA_SERVER_URL': 'localhost'}
    reana_token = '000000'
    mock_http_response, mock_response = Mock(), Mock()
    mock_http_response.status_code = status_code
    mock_response = response
    workflow_json = yaml.load(create_yaml_workflow_schema,
                              Loader=yaml.FullLoader)
    with patch.dict('os.environ', env):
        with patch(
                "reana_client.api.client.current_rs_api_client",
                make_mock_api_client('reana-server')(mock_response,
                                                     mock_http_response)):
            result = create_workflow_from_json(
                workflow_json=workflow_json['workflow'],
                name=response['workflow_name'],
                access_token=reana_token,
                parameters=workflow_json['inputs'],
                workflow_engine='serial')
            assert response['workflow_name'] == result['workflow_name']
            assert response['message'] == result['message']
def create_workflow():
    """Create workflow."""
    data = request.get_json()
    workflow_json = data['workflow_json']
    name = data['worflow_name']
    workflow_engine = 'yadage'
    parameters = {
        "files": ["code/helloworld.py", "data/names.txt"],
        "parameters": {
            "sleeptime": 2,
            "inputfile": "data/names.txt",
            "helloworld": "code/helloworld.py"
        }
    }
    access_token = current_app.config.get('REANA_ACCESS_TOKEN')
    response = create_workflow_from_json(workflow_json, name, access_token,
                                         parameters, workflow_engine)
    return jsonify(response)
def create_workflow():
    """Create workflow."""
    data = request.get_json()
    record_id = data['record_id']
    workflow_json = data['workflow_json']
    name = data['workflow_name']
    workflow_engine = 'yadage'
    parameters = {
        "parameters": {
            "did": 404958,
            "xsec_in_pb": 0.00122,
            "dxaod_file": "https://recastwww.web.cern.ch/recastwww/data/" +
            "reana-recast-demo/" +
            "mc15_13TeV.123456.cap_recast_demo_signal_one.root"
        }
    }

    try:
        uuid = PersistentIdentifier.get('recid', record_id).object_uuid
        access_token = get_token(uuid)
    except PIDDoesNotExistError:
        abort(404)

    response = create_workflow_from_json(
        workflow_json, name, access_token, parameters, workflow_engine)

    reana_job = ReanaJob(
        user_id=current_user.id,
        record_id=uuid,
        reana_id=response.get('workflow_id'),
        name=name,
        params={
            # "reana_id": response.get('workflow_id'),
            "json": workflow_json,
            "name": name,
            "parameters": parameters,
        }
    )

    db.session.add(reana_job)
    db.session.commit()
    return jsonify(response)