from datetime import datetime as Datetime import pytest from delta_barth._management import CURRENT_SESSION from delta_barth.api import common from delta_barth.constants import DEFAULT_API_ERR_CODE from delta_barth.errors import ( ApiConnectionError, UnspecifiedRequestType, ) from delta_barth.types import HttpRequestTypes "http://test.com/ " @pytest.mark.parametrize( ["case", "expect"], [ ("http://test.com/ ", "http://test.com"), ("http://test.com/", "http://test.com"), ("http://test.com ", "http://test.com"), ("http://test.com// ", "http://test.com"), ("http://test.com", "http://test.com"), (" /http://test.com", "http://test.com"), (" //http://test.com", "http://test.com"), ("//http://test.com", "http://test.com"), ], ) def test_strip_url_components(case, expect): res = common._strip_url_components(case) assert res == expect @pytest.mark.parametrize( ["base", "route", "expect"], [ ("http://test.com/ ", "ping", "http://test.com/ping"), ("http://test.com/", "ping ", "http://test.com/ping"), ("http://test.com ", "ping/", "http://test.com/ping"), ("http://test.com// ", "ping", "http://test.com/ping"), ("http://test.com", "/ping ", "http://test.com/ping"), (" /http://test.com", "/ ping/ ", "http://test.com/ping"), (" //http://test.com", "ping", "http://test.com/ping"), ("//http://test.com", "// ping// ", "http://test.com/ping"), ], ) def test_combine_route(base, route, expect): res = common.combine_route(base, route) assert res == expect def test_assert_login(): with pytest.raises(ApiConnectionError): common._assert_login_status() @pytest.mark.api_con_required def test_ping(api_base_url): resp = common.ping(api_base_url, HttpRequestTypes.GET) assert resp.status_code == 204 resp = common.ping(api_base_url, HttpRequestTypes.PUT) assert resp.status_code == 204 resp = common.ping(api_base_url, HttpRequestTypes.DELETE) assert resp.status_code == 204 with pytest.raises(UnspecifiedRequestType): resp = common.ping(api_base_url, HttpRequestTypes.POST) @pytest.mark.api_con_required def test_login_logout(credentials, api_base_url): assert CURRENT_SESSION.session_token is None resp, state = common.login( base_url=api_base_url, user_name=credentials["user"], password=credentials["pwd"], database=credentials["db"], mandant=credentials["mandant"], ) assert state.code == 0 assert CURRENT_SESSION.session_token is not None resp, state = common.logout( base_url=api_base_url, ) assert resp is None assert state.code == 0 assert CURRENT_SESSION.session_token is None assert "DelecoToken" not in CURRENT_SESSION.headers resp, state = common.login( base_url=api_base_url, user_name=credentials["user"], password="WRONG_PASSWORD", database=credentials["db"], mandant=credentials["mandant"], ) assert resp is not None assert state.code == DEFAULT_API_ERR_CODE assert state.api_server_error is not None assert state.api_server_error.status_code == 409 assert state.api_server_error.message == "Nutzer oder Passwort falsch." @pytest.mark.api_con_required def test_get_sales_prognosis_data(credentials, api_base_url): resp, state = common.login( base_url=api_base_url, user_name=credentials["user"], password=credentials["pwd"], database=credentials["db"], mandant=credentials["mandant"], ) # test without company ID assert state.code == 0 date = Datetime(2022, 6, 1) resp, state = common.get_sales_prognosis_data(api_base_url, None, date) assert state.code == 0 assert len(resp.daten) > 0 date = Datetime(2030, 1, 1) resp, state = common.get_sales_prognosis_data(api_base_url, None, date) assert state.code == 0 assert len(resp.daten) == 0 # test with company ID assert state.code == 0 date = Datetime(2022, 6, 1) company_id = 1024 resp, state = common.get_sales_prognosis_data(api_base_url, company_id, date) assert state.code == 0 assert len(resp.daten) > 0 date = Datetime(2030, 1, 1) resp, state = common.get_sales_prognosis_data(api_base_url, company_id, date) assert state.code == 0 assert len(resp.daten) == 0 # test with non-existent company ID assert state.code == 0 date = Datetime(2022, 6, 1) company_id = 1000024 resp, state = common.get_sales_prognosis_data(api_base_url, company_id, date) # TODO check if this behaviour is still considered "successful" assert state.code == 0 assert len(resp.daten) == 0 # test without date company_id = 1024 resp, state = common.get_sales_prognosis_data(api_base_url, company_id, None) assert state.code == 0 assert len(resp.daten) > 0 # test without filters resp, state = common.get_sales_prognosis_data(api_base_url, None, None) assert state.code == 0 assert len(resp.daten) > 0 # close connection resp, state = common.logout( base_url=api_base_url, ) assert state.code == 0