delta-barth-py/tests/api/test_common.py

131 lines
4.1 KiB
Python

from datetime import datetime as Datetime
import pytest
from delta_barth.api import common
from delta_barth.constants import HTTP_CURRENT_CONNECTION
from delta_barth.errors import (
ApiConnectionError,
UnknownApiErrorCode,
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_raise_unknown_error(api_base_url):
resp = common.ping(api_base_url, HttpRequestTypes.GET)
with pytest.raises(UnknownApiErrorCode):
common._raise_for_unknown_error(resp)
@pytest.mark.api_con_required
def test_login_logout(credentials, api_base_url):
assert HTTP_CURRENT_CONNECTION.session_token is None
resp = common.login(
base_url=api_base_url,
user_name=credentials["user"],
password=credentials["pwd"],
database=credentials["db"],
mandant=credentials["mandant"],
)
assert resp.error is None
assert HTTP_CURRENT_CONNECTION.session_token is not None
resp = common.logout(
base_url=api_base_url,
)
assert resp.error is None
assert HTTP_CURRENT_CONNECTION.session_token is None
assert "DelecoToken" not in HTTP_CURRENT_CONNECTION.headers
resp = common.login(
base_url=api_base_url,
user_name=credentials["user"],
password="WRONG_PASSWORD",
database=credentials["db"],
mandant=credentials["mandant"],
)
assert resp.error is not None
assert resp.error.status_code == 409
assert resp.error.message == "Nutzer oder Passwort falsch."
@pytest.mark.api_con_required
def test_get_sales_prognosis_data(credentials, api_base_url):
resp = common.login(
base_url=api_base_url,
user_name=credentials["user"],
password=credentials["pwd"],
database=credentials["db"],
mandant=credentials["mandant"],
)
assert resp.error is None
date = Datetime(2022, 6, 1)
resp = common.get_sales_prognosis_data(api_base_url, 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)
assert resp.error is None
assert len(resp.daten) == 0
# close connection
resp = common.logout(
base_url=api_base_url,
)
assert resp.error is None