From 6b4495eb7a4ad2bd90a2e1782cae502fed921a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20F=C3=B6rster?= Date: Wed, 5 Mar 2025 08:06:11 +0100 Subject: [PATCH] adapt to new DelBar API --- src/delta_barth/api/common.py | 17 ++++++++++------- tests/api/test_common.py | 26 +++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/delta_barth/api/common.py b/src/delta_barth/api/common.py index 6f4debc..a1076ad 100644 --- a/src/delta_barth/api/common.py +++ b/src/delta_barth/api/common.py @@ -5,7 +5,7 @@ from datetime import datetime as Datetime from typing import Final, Never import requests -from pydantic import BaseModel, PositiveFloat, PositiveInt +from pydantic import BaseModel, PositiveInt from requests import Response from delta_barth.constants import HTTP_CURRENT_CONNECTION, KnownApiErrorCodes @@ -152,8 +152,9 @@ def logout( # ** sales data -class SalesPrognosisRequest(BaseModel): - berechnungszeitpunkt: Datetime +class SalesPrognosisRequestP(BaseModel): + FirmaId: int | None + BuchungsDatum: Datetime | None class SalesPrognosisResponseEntry(BaseModel): @@ -171,18 +172,20 @@ class SalesPrognosisResponse(BaseModel): def get_sales_prognosis_data( base_url: str, - start_date: Datetime, + company_id: int | None = None, + start_date: Datetime | None = None, ) -> SalesPrognosisResponse: _assert_login_status() ROUTE: Final[str] = "verkauf/umsatzprognosedaten" URL: Final = combine_route(base_url, ROUTE) - sales_prog_req = SalesPrognosisRequest( - berechnungszeitpunkt=start_date, + sales_prog_req = SalesPrognosisRequestP( + FirmaId=company_id, + BuchungsDatum=start_date, ) resp = requests.get( URL, - params=sales_prog_req.model_dump(mode="json"), + params=sales_prog_req.model_dump(mode="json", exclude_none=True), headers=HTTP_CURRENT_CONNECTION.headers, # type: ignore[argumentType] ) diff --git a/tests/api/test_common.py b/tests/api/test_common.py index aa0a73d..db3b4ab 100644 --- a/tests/api/test_common.py +++ b/tests/api/test_common.py @@ -105,7 +105,8 @@ def test_login_logout(credentials, api_base_url): assert resp.error.message == "Nutzer oder Passwort falsch." -@pytest.mark.api_con_required +# @pytest.mark.api_con_required +@pytest.mark.new def test_get_sales_prognosis_data(credentials, api_base_url): resp = common.login( base_url=api_base_url, @@ -114,13 +115,32 @@ def test_get_sales_prognosis_data(credentials, api_base_url): database=credentials["db"], mandant=credentials["mandant"], ) + # test without company ID assert resp.error is None date = Datetime(2022, 6, 1) - resp = common.get_sales_prognosis_data(api_base_url, date) + resp = common.get_sales_prognosis_data(api_base_url, None, date) assert resp.error is None assert len(resp.daten) > 0 date = Datetime(2030, 1, 1) - resp = common.get_sales_prognosis_data(api_base_url, date) + resp = common.get_sales_prognosis_data(api_base_url, None, date) + assert resp.error is None + assert len(resp.daten) == 0 + # test with company ID + assert resp.error is None + date = Datetime(2022, 6, 1) + company_id = 1024 + resp = common.get_sales_prognosis_data(api_base_url, company_id, date) + assert resp.error is None + assert len(resp.daten) > 0 + date = Datetime(2030, 1, 1) + resp = common.get_sales_prognosis_data(api_base_url, company_id, date) + assert resp.error is None + assert len(resp.daten) == 0 + # test with non-existent company ID + assert resp.error is None + date = Datetime(2022, 6, 1) + company_id = 1000024 + resp = common.get_sales_prognosis_data(api_base_url, company_id, date) assert resp.error is None assert len(resp.daten) == 0 # close connection