From 1920067e6ce818d4861cb965cfa969096bd4812b Mon Sep 17 00:00:00 2001 From: judynah Date: Mon, 23 Sep 2024 17:24:26 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20added=20test=20for=20source,=20task?= =?UTF-8?q?=20and=20flow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/viadot/sources/business_core.py | 2 +- .../flows/test_business_core_to_parquet.py | 27 ++++++++++ .../prefect/tasks/test_business_core.py | 29 +++++++++++ tests/integration/test_business_core.py | 50 +++++++++++++++++++ 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 tests/integration/orchestration/prefect/flows/test_business_core_to_parquet.py create mode 100644 tests/integration/orchestration/prefect/tasks/test_business_core.py create mode 100644 tests/integration/test_business_core.py diff --git a/src/viadot/sources/business_core.py b/src/viadot/sources/business_core.py index 9965f4a33..0aa2dfa75 100644 --- a/src/viadot/sources/business_core.py +++ b/src/viadot/sources/business_core.py @@ -26,7 +26,7 @@ class BusinessCoreCredentials(BaseModel): class BusinessCore(Source): """ - Source for getting data from Bussines Core ERP API. + Source for getting data from Business Core ERP API. """ def __init__( self, diff --git a/tests/integration/orchestration/prefect/flows/test_business_core_to_parquet.py b/tests/integration/orchestration/prefect/flows/test_business_core_to_parquet.py new file mode 100644 index 000000000..099e14564 --- /dev/null +++ b/tests/integration/orchestration/prefect/flows/test_business_core_to_parquet.py @@ -0,0 +1,27 @@ +from pathlib import Path +from pandas import DataFrame, read_parquet +from viadot.orchestration.prefect.flows import business_core_to_parquet + +URL="https://api.businesscore.ae/api/LappDataIntegrationAPI/GetCustomerData" +PATH="/home/viadot/data/middle_east/customer_master/customer_master_full_data.parquet" +CREDS = "business-core" + + +def test_business_core_to_parquet(): + assert not Path(PATH).exists() + + business_core_to_parquet( + url=URL, + path=PATH, + credentials_secret=CREDS, + verify=False + ) + + assert Path(PATH).exists() + + n_cols = 11 + + df = read_parquet(PATH) + + assert df.shape[1] == n_cols + Path(PATH).unlink() diff --git a/tests/integration/orchestration/prefect/tasks/test_business_core.py b/tests/integration/orchestration/prefect/tasks/test_business_core.py new file mode 100644 index 000000000..a86b031af --- /dev/null +++ b/tests/integration/orchestration/prefect/tasks/test_business_core.py @@ -0,0 +1,29 @@ +from pathlib import Path +from pandas import DataFrame + +from prefect import flow +from viadot.orchestration.prefect.tasks.business_core import business_core_to_df + +URL="https://api.businesscore.ae/api/LappDataIntegrationAPI/GetCustomerData" +PATH="/home/viadot/data/middle_east/customer_master/customer_master_full_data.parquet" +CREDS = "business-core" + + +def test_business_core_to_df(): + @flow + def test_flow(): + return business_core_to_df( + url=URL, + path=PATH, + credentials_secret=CREDS, + verify=False + ) + + df = test_flow() + assert isinstance(df, DataFrame) + + n_cols = 11 + assert df.shape[1] == n_cols + + + diff --git a/tests/integration/test_business_core.py b/tests/integration/test_business_core.py new file mode 100644 index 000000000..e92a799e2 --- /dev/null +++ b/tests/integration/test_business_core.py @@ -0,0 +1,50 @@ +from unittest.mock import Mock, patch +import pandas as pd +import pytest + +from viadot.sources.business_core import BusinessCore + + +@pytest.fixture(scope="module") +def business_core(): + return BusinessCore( + url="https://api.businesscore.ae/api/GetCustomerData", + filters_dict={ + "BucketCount": 10, + "BucketNo": 1, + "FromDate": None, + "ToDate": None, + }, + credentials={"username": "test", "password": "test123"}, + ) + + +@patch("viadot.sources.business_core.handle_api_response") +def test_generate_token(mock_api_response, business_core): + mock_api_response.return_value = Mock(text='{"access_token": "12345"}') + token = business_core.generate_token() + assert token == "12345" + + +def test_clean_filters_dict(business_core): + filters = business_core.clean_filters_dict() + assert filters == { + "BucketCount": 10, + "BucketNo": 1, + "FromDate": "&", + "ToDate": "&", + } + + +def test_to_df(business_core): + with patch.object( + business_core, + "get_data", + return_value={"MasterDataList": [{"id": 1, "name": "John Doe"}]}, + ): + df = business_core.to_df() + assert isinstance(df, pd.DataFrame) + assert len(df.columns) == 2 + assert len(df) == 1 + assert df["id"].tolist() == [1] + assert df["name"].tolist() == ["John Doe"] \ No newline at end of file