async def test_deprecate_transformation_revision_from_component_dto(
    async_test_client, clean_test_db_engine
):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            ComponentRevisionFrontendDto(
                **dto_json_component_2
            ).to_transformation_revision()
        )

        async with async_test_client as ac:
            response = await ac.put(
                "/api/components/" + str(get_uuid_from_seed("component 2")),
                json=dto_json_component_2_deprecate,
            )

        assert response.status_code == 201
        assert response.json()["state"] == "DISABLED"
        assert response.json()["name"] != "new name"
        assert response.json()["category"] != "Test"
        assert len(response.json()["inputs"]) == 0
        assert "new comment" not in response.json()["code"]
        assert "disabled_timestamp" in response.json()["code"]
        assert "released_timestamp" in response.json()["code"]
async def test_deprecate_base_item_of_type_component(async_test_client,
                                                     clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_2).to_transformation_revision())

        async with async_test_client as ac:
            response = await ac.put(
                "/api/base-items/" + str(tr_dto_json_component_2["id"]),
                json=tr_dto_json_component_2_deprecate,
            )

        assert response.status_code == 201
        assert response.json()["state"] == "DISABLED"
        assert response.json()["name"] != "new name"
        assert response.json()["category"] != "Test"
        assert len(response.json()["inputs"]) == 0

        tr_component_2 = read_single_transformation_revision(
            tr_dto_json_component_2["id"])

        assert tr_component_2.state.value == "DISABLED"
        assert tr_component_2.name != "new name"
        assert "disabled_timestamp" in tr_component_2.content
        assert "released_timestamp" in tr_component_2.content
Пример #3
0
def test_component_deployment_directly_into_db(caplog, clean_test_db_engine):
    patched_session = sessionmaker(clean_test_db_engine)
    with mock.patch(
            "hetdesrun.persistence.dbservice.nesting.Session",
            patched_session,
    ):
        with mock.patch(
                "hetdesrun.persistence.dbservice.revision.Session",
                patched_session,
        ):
            response_mock = mock.Mock()
            response_mock.status_code = 200

            with caplog.at_level(logging.DEBUG):

                with mock.patch("hetdesrun.utils.requests.put",
                                return_value=response_mock) as patched_put:
                    caplog.clear()
                    import_transformations("./transformations/components",
                                           directly_into_db=True)
                    assert "1946d5f8-44a8-724c-176f-16f3e49963af" in caplog.text
                    # id of a component

            # did not try to upload via REST API
            assert patched_put.call_count == 0
async def test_update_transformation_revision_from_component_dto(
    async_test_client, clean_test_db_engine
):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            ComponentRevisionFrontendDto(
                **dto_json_component_1
            ).to_transformation_revision()
        )

        async with async_test_client as ac:
            response = await ac.put(
                "/api/components/" + str(get_uuid_from_seed("component 1")),
                json=dto_json_component_1_update,
            )

        assert response.status_code == 201
        assert response.json()["name"] == "new name"
        assert response.json()["category"] == "Test"
        assert response.json()["inputs"][0]["id"] == str(
            get_uuid_from_seed("new input")
        )
        print(response.json()["code"])
        assert "new_input" in response.json()["code"]
Пример #5
0
async def test_execute_latest_for_transformation_revision_no_revision_in_db(
        async_test_client, clean_test_db_engine):
    patched_session = sessionmaker(clean_test_db_engine)
    with mock.patch(
            "hetdesrun.persistence.dbservice.nesting.Session",
            patched_session,
    ):
        with mock.patch(
                "hetdesrun.persistence.dbservice.revision.Session",
                patched_session,
        ):
            tr_component_1 = TransformationRevision(**tr_json_component_1)
            tr_component_1.content = update_code(tr_component_1)

            exec_latest_by_group_id_input = ExecLatestByGroupIdInput(
                revision_group_id=tr_component_1.revision_group_id,
                wiring=tr_component_1.test_wiring,
            )

            async with async_test_client as ac:
                response = await ac.post(
                    "/api/transformations/execute-latest",
                    json=json.loads(exec_latest_by_group_id_input.json()),
                )

            assert response.status_code == 404
            assert (
                "no released transformation revisions with revision group id"
                in response.json()["detail"])
Пример #6
0
async def test_tr_from_code_for_component_without_register_decorator(
    clean_test_db_engine, ):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        path = os.path.join(
            "tests",
            "data",
            "components",
            "alerts-from-score_100_38f168ef-cb06-d89c-79b3-0cd823f32e9d.py",
        )
        with open(path) as f:
            code = f.read()

        tr_json = transformation_revision_from_python_code(code, path)

        tr = TransformationRevision(**tr_json)

        assert tr.name == "Alerts from Score"
        assert tr.category == "Anomaly Detection"
        assert "anomalous situations" in tr.description
        assert tr.version_tag == "1.0.0"
        assert str(tr.id) == "38f168ef-cb06-d89c-79b3-0cd823f32e9d"
        assert str(
            tr.revision_group_id) == "38f168ef-cb06-d89c-79b3-0cd823f32e9d"
        assert len(tr.io_interface.inputs) == 2
        assert len(tr.io_interface.outputs) == 1
        assert tr.type == "COMPONENT"
        assert "COMPONENT_INFO" in tr.content
Пример #7
0
async def test_put_component_transformation_without_update_code(
        async_test_client, clean_test_db_engine):
    patched_session = sessionmaker(clean_test_db_engine)
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            patched_session,
    ):

        path = "./tests/data/components/alerts-from-score_100_38f168ef-cb06-d89c-79b3-0cd823f32e9d.json"
        example_component_tr_json = load_json(path)

        async with async_test_client as ac:
            response = await ac.put(
                posix_urljoin("/api/transformations/",
                              example_component_tr_json["id"]) +
                "?update_component_code=False",
                json=example_component_tr_json,
            )

        component_tr_in_db = read_single_transformation_revision(
            example_component_tr_json["id"])

        assert response.status_code == 201
        assert "COMPONENT_INFO" not in response.json()["content"]
        assert "COMPONENT_INFO" not in component_tr_in_db.content
        assert "register" in response.json()["content"]
        assert "register" in component_tr_in_db.content
Пример #8
0
async def test_update_transformation_revision_with_invalid_name_workflow(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevision(**tr_json_workflow_2))

        tr_json_workflow_2_update_invalid_name = deepcopy(
            tr_json_workflow_2_update)
        tr_json_workflow_2_update_invalid_name["name"] = "'"

        async with async_test_client as ac:
            response = await ac.put(
                posix_urljoin("/api/transformations/",
                              str(get_uuid_from_seed("workflow 2"))),
                json=tr_json_workflow_2_update_invalid_name,
            )

        print(response.json())
        assert response.status_code == 422
        assert "string does not match regex" in response.json(
        )["detail"][0]["msg"]
        assert "name" in response.json()["detail"][0]["loc"]
def test_updating(clean_test_db_engine):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):
        tr_uuid = get_uuid_from_seed("test_updating")

        tr_object = TransformationRevision(
            id=tr_uuid,
            revision_group_id=tr_uuid,
            name="Test",
            description="Test description",
            version_tag="1.0.0",
            category="Test category",
            state=State.DRAFT,
            type=Type.COMPONENT,
            content="code",
            io_interface=IOInterface(),
            test_wiring=WorkflowWiring(),
            documentation="",
        )

        store_single_transformation_revision(tr_object)

        tr_object.name = "Test Update"

        update_or_create_single_transformation_revision(tr_object)

        received_tr_object = read_single_transformation_revision(tr_uuid)

        assert tr_object == received_tr_object
Пример #10
0
async def test_execute_for_workflow_dto(async_test_client,
                                        clean_test_db_engine):
    patched_session = sessionmaker(clean_test_db_engine)
    with mock.patch(
            "hetdesrun.persistence.dbservice.nesting.Session",
            patched_session,
    ):
        with mock.patch(
                "hetdesrun.persistence.dbservice.revision.Session",
                patched_session,
        ):
            component_dto = ComponentRevisionFrontendDto(
                **dto_json_component_1)
            tr_component = component_dto.to_transformation_revision()
            tr_component.content = update_code(tr_component)
            store_single_transformation_revision(tr_component)
            tr_workflow_2 = WorkflowRevisionFrontendDto(
                **dto_json_workflow_2_update).to_transformation_revision()
            tr_workflow_2.content.inputs[0].name = "wf_input"
            tr_workflow_2.content.outputs[0].name = "wf_output"
            tr_workflow_2.content.links.append(
                Link(
                    start=Vertex(
                        operator=None,
                        connector=Connector.from_io(
                            tr_workflow_2.content.inputs[0]),
                    ),
                    end=Vertex(
                        operator=tr_workflow_2.content.operators[0].id,
                        connector=tr_workflow_2.content.operators[0].inputs[0],
                    ),
                ))
            tr_workflow_2.content.links.append(
                Link(
                    start=Vertex(
                        operator=tr_workflow_2.content.operators[0].id,
                        connector=tr_workflow_2.content.operators[0].
                        outputs[0],
                    ),
                    end=Vertex(
                        operator=None,
                        connector=Connector.from_io(
                            tr_workflow_2.content.outputs[0]),
                    ),
                ))
            tr_workflow_2.io_interface.inputs[0].name = "wf_input"
            tr_workflow_2.io_interface.outputs[0].name = "wf_output"

            store_single_transformation_revision(tr_workflow_2)

            update_or_create_nesting(tr_workflow_2)
            async with async_test_client as ac:
                response = await ac.post(
                    "/api/workflows/" + str(get_uuid_from_seed("workflow 2")) +
                    "/execute",
                    json=dto_json_wiring,
                )

            assert response.status_code == 200
            assert "output_types_by_output_name" in response.json()
async def test_get_all_base_items_with_specified_type_and_state(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_1  # DRAFT
            ).to_transformation_revision())
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_2  # RELEASED
            ).to_transformation_revision())
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(**tr_dto_json_workflow_1  # DRAFT
                                              ).to_transformation_revision())
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(**tr_dto_json_workflow_2  # DRAFT
                                              ).to_transformation_revision())

        async with async_test_client as ac:
            response_released_component = await ac.get(
                "/api/base-items/?type=COMPONENT&state=RELEASED")
            response_draft_workflow = await ac.get(
                "/api/base-items/?type=WORKFLOW&state=DRAFT")

        assert response_released_component.status_code == 200
        assert len(response_released_component.json()) == 1
        assert response_released_component.json()[0] == tr_dto_json_component_2
        assert response_draft_workflow.status_code == 200
        assert len(response_draft_workflow.json()) == 2
        assert response_draft_workflow.json()[0] == tr_dto_json_workflow_1
        assert response_draft_workflow.json()[1] == tr_dto_json_workflow_2
Пример #12
0
async def test_publish_transformation_revision_from_workflow_dto(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            WorkflowRevisionFrontendDto(**dto_json_workflow_2_publishable).
            to_transformation_revision())

        dto_json_workflow_2_publish = deepcopy(dto_json_workflow_2_publishable)
        dto_json_workflow_2_publish["state"] = "RELEASED"
        # print("json inputs",dto_json_workflow_2_publish["inputs"])
        # print("json outputs",dto_json_workflow_2_publish["outputs"])
        print()

        async with async_test_client as ac:
            response = await ac.put(
                "/api/workflows/" + str(get_uuid_from_seed("workflow 2")),
                json=dto_json_workflow_2_publish,
            )

        assert response.status_code == 201
        assert response.json()["state"] == "RELEASED"
        assert response.json()["name"] != "new name"
def test_multiple_select(clean_test_db_engine):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):
        tr_template_id = get_uuid_from_seed("object_template")
        tr_object_template = TransformationRevision(
            id=tr_template_id,
            revision_group_id=tr_template_id,
            name="Test",
            description="Test description",
            version_tag="1.0.0",
            category="Test category",
            state=State.DRAFT,
            type=Type.COMPONENT,
            content="code",
            io_interface=IOInterface(),
            test_wiring=WorkflowWiring(),
            documentation="",
        )

        tr_uuid_1 = get_uuid_from_seed("test_multiple_select_1")
        tr_object_1 = tr_object_template.copy()
        tr_object_1.id = tr_uuid_1
        tr_object_1.revision_group_id = tr_uuid_1
        store_single_transformation_revision(tr_object_1)

        tr_uuid_2 = get_uuid_from_seed("test_multiple_select_2")
        tr_object_2 = tr_object_1.copy()
        tr_object_2.id = tr_uuid_2
        tr_object_2.version_tag = "1.0.1"
        store_single_transformation_revision(tr_object_2)

        tr_object_3 = tr_object_template.copy()
        tr_uuid_3 = get_uuid_from_seed("test_multiple_select_3")
        tr_object_3.id = tr_uuid_3
        tr_object_3.revision_group_id = tr_uuid_3
        tr_object_3.release()
        store_single_transformation_revision(tr_object_3)

        results = select_multiple_transformation_revisions()
        assert len(results) == 3

        results = select_multiple_transformation_revisions(state=State.DRAFT)
        assert len(results) == 2

        results = select_multiple_transformation_revisions(state=State.RELEASED)
        assert len(results) == 1

        results = select_multiple_transformation_revisions(revision_group_id=tr_uuid_1)
        assert len(results) == 2

        results = select_multiple_transformation_revisions(type=Type.COMPONENT)
        assert len(results) == 3

        results = select_multiple_transformation_revisions(type=Type.WORKFLOW)
        assert len(results) == 0
async def test_execute_for_component_without_hetdesrun_imports(
    async_test_client, clean_test_db_engine
):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):

        path = (
            "./tests/data/components/"
            "alerts-from-score_100_38f168ef-cb06-d89c-79b3-0cd823f32e9d"
            ".json"
        )
        component_tr_json = load_json(path)
        wiring_json = {
            "id": "38f168ef-cb06-d89c-79b3-0cd823f32e9d",
            "name": "STANDARD-WIRING",
            "inputWirings": [
                {
                    "id": "8c249f92-4b81-457e-9371-24204d6b373b",
                    "workflowInputName": "scores",
                    "adapterId": "direct_provisioning",
                    "filters": {
                        "value": (
                            "{\n"
                            '    "2020-01-03T08:20:03.000Z": 18.7,\n'
                            '    "2020-01-01T01:15:27.000Z": 42.2,\n'
                            '    "2020-01-03T08:20:04.000Z": 25.9\n'
                            "}"
                        )
                    },
                },
                {
                    "id": "0f0f97f7-1f5d-4f5d-be11-7c7b78d02129",
                    "workflowInputName": "threshold",
                    "adapterId": "direct_provisioning",
                    "filters": {"value": "30"},
                },
            ],
            "outputWirings": [],
        }

        tr = TransformationRevision(**component_tr_json)
        tr.content = update_code(tr)
        assert "COMPONENT_INFO" in tr.content

        store_single_transformation_revision(tr)

        async with async_test_client as ac:
            response = await ac.post(
                "/api/components/" + component_tr_json["id"] + "/execute",
                json=wiring_json,
            )

        assert response.status_code == 200
        assert "output_types_by_output_name" in response.json()
Пример #15
0
async def test_get_all_transformation_revisions_with_no_db_entries(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.get("/api/transformations/")

        assert response.status_code == 200
async def test_get_all_adapters(async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.get("/api/adapters/")

        assert response.status_code == 200
        assert len(response.json()) == 3
Пример #17
0
async def test_execute_for_full_workflow_dto(async_test_client,
                                             clean_test_db_engine):
    patched_session = sessionmaker(clean_test_db_engine)
    with mock.patch(
            "hetdesrun.persistence.dbservice.nesting.Session",
            patched_session,
    ):
        with mock.patch(
                "hetdesrun.persistence.dbservice.revision.Session",
                patched_session,
        ):
            async with async_test_client as ac:

                json_files = [
                    "./transformations/components/connectors/pass-through-integer_100_57eea09f-d28e-89af-4e81-2027697a3f0f.json",
                    "./transformations/components/connectors/pass-through-series_100_bfa27afc-dea8-b8aa-4b15-94402f0739b6.json",
                    "./transformations/components/connectors/pass-through-string_100_2b1b474f-ddf5-1f4d-fec4-17ef9122112b.json",
                    "./transformations/components/remaining-useful-life/univariate-linear-rul-regression_100_8d61a267-3a71-51cd-2817-48c320469d6b.json",
                    "./transformations/components/visualization/univariate-linear-rul-regression-result-plot_100_9c3f88ce-1311-241e-18b7-acf7d3f5a051.json",
                    "./transformations/components/arithmetic/consecutive-differences_100_ce801dcb-8ce1-14ad-029d-a14796dcac92.json",
                    "./transformations/components/basic/filter_100_18260aab-bdd6-af5c-cac1-7bafde85188f.json",
                    "./transformations/components/basic/greater-or-equal_100_f759e4c0-1468-0f2e-9740-41302b860193.json",
                    "./transformations/components/basic/last-datetime-index_100_c8e3bc64-b214-6486-31db-92a8888d8991.json",
                    "./transformations/components/basic/restrict-to-time-interval_100_bf469c0a-d17c-ca6f-59ac-9838b2ff67ac.json",
                    "./transformations/components/connectors/pass-through-float_100_2f511674-f766-748d-2de3-ad5e62e10a1a.json",
                    "./transformations/components/visualization/single-timeseries-plot_100_8fba9b51-a0f1-6c6c-a6d4-e224103b819c.json",
                    "./transformations/workflows/examples/data-from-last-positive-step_100_2cbb87e7-ea99-4404-abe1-be550f22763f.json",
                    "./transformations/workflows/examples/univariate-linear-rul-regression-example_100_806df1b9-2fc8-4463-943f-3d258c569663.json",
                    "./transformations/workflows/examples/linear-rul-from-last-positive-step_100_3d504361-e351-4d52-8734-391aa47e8f24.json",
                ]

                for file in json_files:
                    tr_json = load_json(file)

                    response = await ac.put(
                        posix_urljoin(
                            get_config().hd_backend_api_url,
                            "transformations",
                            tr_json["id"],
                        ) + "?allow_overwrite_released=True",
                        json=tr_json,
                    )

                workflow_id = UUID("3d504361-e351-4d52-8734-391aa47e8f24")
                tr_workflow = read_single_transformation_revision(workflow_id)
                wiring_dto = WiringFrontendDto.from_wiring(
                    tr_workflow.test_wiring, workflow_id)

                response = await ac.post(
                    "/api/workflows/" + str(workflow_id) + "/execute",
                    json=json.loads(wiring_dto.json(by_alias=True)),
                )

                assert response.status_code == 200
                assert "output_types_by_output_name" in response.json()
async def test_create_transformation_revision_with_workflow(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.post("/api/base-items/",
                                     json=tr_dto_json_workflow_1)

        assert response.status_code == 201
        assert response.json()["name"] == tr_dto_json_workflow_1["name"]
async def test_get_transformation_revision_by_id_with_inexistent_workflow(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.get(
                "/api/base-items/" +
                str(get_uuid_from_seed("inexistent workflow")))
        assert response.status_code == 404
        assert "Found no" in response.json()["detail"]
async def test_get_documentation_of_inexistent_component(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.get(
                "/api/documentations/" +
                str(get_uuid_from_seed("inexistent component")))
        assert response.status_code == 404
        assert "Found no" in response.json()["detail"]
async def test_get_documentation(async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(component_tr_1)

        async with async_test_client as ac:
            response = await ac.get("/api/documentations/" +
                                    str(get_uuid_from_seed("component 1")))
        assert response.status_code == 200
        assert response.json()["document"] == "documentation"
def test_deleting(clean_test_db_engine):
    with mock.patch(
        "hetdesrun.persistence.dbservice.revision.Session",
        sessionmaker(clean_test_db_engine),
    ):
        tr_draft_uuid = get_uuid_from_seed("draft")

        tr_draft_object = TransformationRevision(
            id=tr_draft_uuid,
            revision_group_id=tr_draft_uuid,
            name="Test",
            description="Test description",
            version_tag="1.0.0",
            category="Test category",
            state=State.DRAFT,
            type=Type.COMPONENT,
            content="code",
            io_interface=IOInterface(),
            test_wiring=WorkflowWiring(),
            documentation="",
        )

        tr_released_uuid = get_uuid_from_seed("released")

        tr_released_object = TransformationRevision(
            id=tr_released_uuid,
            revision_group_id=tr_released_uuid,
            name="Test",
            description="Test description",
            version_tag="1.0.0",
            category="Test category",
            released_timestamp="2021-12-24 00:00",
            state=State.RELEASED,
            type=Type.COMPONENT,
            content="code",
            io_interface=IOInterface(),
            test_wiring=WorkflowWiring(),
            documentation="",
        )

        store_single_transformation_revision(tr_draft_object)
        store_single_transformation_revision(tr_released_object)

        delete_single_transformation_revision(tr_draft_uuid)

        with pytest.raises(DBNotFoundError):
            read_single_transformation_revision(tr_draft_uuid)

        with pytest.raises(DBBadRequestError):
            delete_single_transformation_revision(tr_released_uuid)
async def test_get_transformation_revision_by_id_with_workflow(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_workflow_1).to_transformation_revision())

        async with async_test_client as ac:
            response = await ac.get("/api/base-items/" +
                                    str(get_uuid_from_seed("workflow 1")))
        assert response.status_code == 200
        assert response.json() == tr_dto_json_workflow_1
Пример #24
0
async def test_delete_transformation_revision_from_workflow_dto(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            WorkflowRevisionFrontendDto(
                **dto_json_workflow_2).to_transformation_revision())

        async with async_test_client as ac:
            response = await ac.delete(
                "/api/workflows/" + str(get_uuid_from_seed("workflow 2")), )

        assert response.status_code == 204
Пример #25
0
async def test_get_transformation_revision_by_id_with_component(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevision(**tr_json_component_1))

        async with async_test_client as ac:
            response = await ac.get(
                posix_urljoin("/api/transformations/",
                              str(get_uuid_from_seed("component 1"))))
        assert response.status_code == 200
        assert response.json() == tr_json_component_1
Пример #26
0
async def test_update_transformation_revision_from_non_existing_workflow_dto(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.put(
                "/api/workflows/" + str(get_uuid_from_seed("workflow 2")),
                json=dto_json_workflow_2_update,
            )

        assert response.status_code == 201
        assert response.json()["operators"][0]["id"] == str(
            get_uuid_from_seed("operator"))
        assert "name" not in response.json()["inputs"][0]
        assert "name" not in response.json()["outputs"][0]
async def test_update_transformation_revision_from_released_component_dto(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_2).to_transformation_revision())

        async with async_test_client as ac:
            response = await ac.put(
                "/api/base-items/" + str(get_uuid_from_seed("component 2")),
                json=tr_dto_json_component_2_update,
            )

        assert response.status_code == 403
async def test_update_transformation_revision_from_non_existing_component_dto(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        async with async_test_client as ac:
            response = await ac.put(
                "/api/base-items/" + str(get_uuid_from_seed("component 1")),
                json=tr_dto_json_component_1_update,
            )

        assert response.status_code == 201
        assert response.json()["name"] == "new name"
        assert response.json()["category"] == "Test"
        assert response.json()["inputs"][0]["id"] == str(
            get_uuid_from_seed("new input"))
Пример #29
0
async def test_get_all_worfklow_revisions_with_valid_db_entries(
        async_test_client, clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            WorkflowRevisionFrontendDto(
                **dto_json_workflow_1).to_transformation_revision())
        store_single_transformation_revision(
            WorkflowRevisionFrontendDto(
                **dto_json_workflow_2).to_transformation_revision())

        async with async_test_client as ac:
            response = await ac.get("/api/workflows/")
        assert response.status_code == 200
        assert response.json()[0] == dto_json_workflow_1
        assert response.json()[1] == dto_json_workflow_2
async def test_get_all_base_items_with_specified_state(async_test_client,
                                                       clean_test_db_engine):
    with mock.patch(
            "hetdesrun.persistence.dbservice.revision.Session",
            sessionmaker(clean_test_db_engine),
    ):
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_1  # DRAFT
            ).to_transformation_revision())
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(
                **tr_dto_json_component_2  # RELEASED
            ).to_transformation_revision())
        store_single_transformation_revision(
            TransformationRevisionFrontendDto(**tr_dto_json_workflow_1  # DRAFT
                                              ).to_transformation_revision())
        tr_workflow_2 = TransformationRevisionFrontendDto(
            **tr_dto_json_workflow_2).to_transformation_revision()
        tr_workflow_2.deprecate()
        store_single_transformation_revision(tr_workflow_2)

        async with async_test_client as ac:
            response_draft = await ac.get("/api/base-items/?state=DRAFT")
            response_released = await ac.get("/api/base-items/?state=RELEASED")
            response_disabled = await ac.get("/api/base-items/?state=DISABLED")
            response_foo = await ac.get("/api/base-items/?state=foo")

        assert response_draft.status_code == 200
        assert len(response_draft.json()) == 2
        assert response_draft.json()[0] == tr_dto_json_component_1
        assert response_draft.json()[1] == tr_dto_json_workflow_1
        assert response_released.status_code == 200
        assert len(response_released.json()) == 1
        assert response_released.json()[0] == tr_dto_json_component_2
        assert response_disabled.status_code == 200
        assert len(response_disabled.json()) == 1
        assert response_disabled.json(
        )[0]["id"] == tr_dto_json_workflow_2["id"]
        assert response_disabled.json()[0]["state"] == "DISABLED"
        assert response_foo.status_code == 422
        assert ("not a valid enumeration member"
                in response_foo.json()["detail"][0]["msg"])