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
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"]
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"])
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
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
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
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
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()
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
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
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
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
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"))
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"])