adapt to new DelBar API

This commit is contained in:
Florian Förster 2025-03-05 08:06:11 +01:00
parent 5e5486fe53
commit 6b4495eb7a
2 changed files with 33 additions and 10 deletions

View File

@ -5,7 +5,7 @@ from datetime import datetime as Datetime
from typing import Final, Never from typing import Final, Never
import requests import requests
from pydantic import BaseModel, PositiveFloat, PositiveInt from pydantic import BaseModel, PositiveInt
from requests import Response from requests import Response
from delta_barth.constants import HTTP_CURRENT_CONNECTION, KnownApiErrorCodes from delta_barth.constants import HTTP_CURRENT_CONNECTION, KnownApiErrorCodes
@ -152,8 +152,9 @@ def logout(
# ** sales data # ** sales data
class SalesPrognosisRequest(BaseModel): class SalesPrognosisRequestP(BaseModel):
berechnungszeitpunkt: Datetime FirmaId: int | None
BuchungsDatum: Datetime | None
class SalesPrognosisResponseEntry(BaseModel): class SalesPrognosisResponseEntry(BaseModel):
@ -171,18 +172,20 @@ class SalesPrognosisResponse(BaseModel):
def get_sales_prognosis_data( def get_sales_prognosis_data(
base_url: str, base_url: str,
start_date: Datetime, company_id: int | None = None,
start_date: Datetime | None = None,
) -> SalesPrognosisResponse: ) -> SalesPrognosisResponse:
_assert_login_status() _assert_login_status()
ROUTE: Final[str] = "verkauf/umsatzprognosedaten" ROUTE: Final[str] = "verkauf/umsatzprognosedaten"
URL: Final = combine_route(base_url, ROUTE) URL: Final = combine_route(base_url, ROUTE)
sales_prog_req = SalesPrognosisRequest( sales_prog_req = SalesPrognosisRequestP(
berechnungszeitpunkt=start_date, FirmaId=company_id,
BuchungsDatum=start_date,
) )
resp = requests.get( resp = requests.get(
URL, 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] headers=HTTP_CURRENT_CONNECTION.headers, # type: ignore[argumentType]
) )

View File

@ -105,7 +105,8 @@ def test_login_logout(credentials, api_base_url):
assert resp.error.message == "Nutzer oder Passwort falsch." 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): def test_get_sales_prognosis_data(credentials, api_base_url):
resp = common.login( resp = common.login(
base_url=api_base_url, base_url=api_base_url,
@ -114,13 +115,32 @@ def test_get_sales_prognosis_data(credentials, api_base_url):
database=credentials["db"], database=credentials["db"],
mandant=credentials["mandant"], mandant=credentials["mandant"],
) )
# test without company ID
assert resp.error is None assert resp.error is None
date = Datetime(2022, 6, 1) 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 resp.error is None
assert len(resp.daten) > 0 assert len(resp.daten) > 0
date = Datetime(2030, 1, 1) 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 resp.error is None
assert len(resp.daten) == 0 assert len(resp.daten) == 0
# close connection # close connection