refactoring and adding test cases for test coverage
This commit is contained in:
parent
c3b8d104b0
commit
28b3b8d144
@ -23,7 +23,6 @@ from delta_barth.constants import (
|
|||||||
)
|
)
|
||||||
from delta_barth.errors import STATUS_HANDLER, wrap_result
|
from delta_barth.errors import STATUS_HANDLER, wrap_result
|
||||||
from delta_barth.types import (
|
from delta_barth.types import (
|
||||||
CustomerDataSalesForecast,
|
|
||||||
DualDict,
|
DualDict,
|
||||||
PipeResult,
|
PipeResult,
|
||||||
)
|
)
|
||||||
@ -328,6 +327,6 @@ def pipeline_sales_dummy(
|
|||||||
session: Session,
|
session: Session,
|
||||||
company_id: int | None = None,
|
company_id: int | None = None,
|
||||||
start_date: Datetime | None = None,
|
start_date: Datetime | None = None,
|
||||||
) -> SalesPrognosisResultsExport:
|
) -> SalesPrognosisResultsExport: # pragma: no cover
|
||||||
"""prototype dummy function for tests by DelBar"""
|
"""prototype dummy function for tests by DelBar"""
|
||||||
...
|
...
|
||||||
|
|||||||
@ -173,7 +173,7 @@ class Session:
|
|||||||
elif resp.status_code == 401:
|
elif resp.status_code == 401:
|
||||||
self._remove_session_token()
|
self._remove_session_token()
|
||||||
response, status = self.login()
|
response, status = self.login()
|
||||||
else: # pragma: no cover
|
else:
|
||||||
response = LoginResponse(token="")
|
response = LoginResponse(token="")
|
||||||
err = DelBarApiError(status_code=resp.status_code, **resp.json())
|
err = DelBarApiError(status_code=resp.status_code, **resp.json())
|
||||||
status = STATUS_HANDLER.api_error(err)
|
status = STATUS_HANDLER.api_error(err)
|
||||||
|
|||||||
@ -54,7 +54,11 @@ def get_sales_prognosis_data(
|
|||||||
company_id: int | None = None,
|
company_id: int | None = None,
|
||||||
start_date: Datetime | None = None,
|
start_date: Datetime | None = None,
|
||||||
) -> tuple[SalesPrognosisResponse, Status]:
|
) -> tuple[SalesPrognosisResponse, Status]:
|
||||||
session.assert_login()
|
resp, status = session.assert_login()
|
||||||
|
if status != STATUS_HANDLER.SUCCESS:
|
||||||
|
response = SalesPrognosisResponse(daten=tuple())
|
||||||
|
return response, status
|
||||||
|
|
||||||
ROUTE: Final[str] = "verkauf/umsatzprognosedaten"
|
ROUTE: Final[str] = "verkauf/umsatzprognosedaten"
|
||||||
URL: Final = combine_route(session.base_url, ROUTE)
|
URL: Final = combine_route(session.base_url, ROUTE)
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from delta_barth.api import common
|
from delta_barth.api import common
|
||||||
@ -16,3 +18,15 @@ def session(credentials, api_base_url) -> common.Session:
|
|||||||
)
|
)
|
||||||
|
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def mock_put():
|
||||||
|
with patch("requests.put") as mock:
|
||||||
|
yield mock
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def mock_get():
|
||||||
|
with patch("requests.get") as mock:
|
||||||
|
yield mock
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
@ -8,6 +10,23 @@ from delta_barth.errors import (
|
|||||||
)
|
)
|
||||||
from delta_barth.types import HttpRequestTypes
|
from delta_barth.types import HttpRequestTypes
|
||||||
|
|
||||||
|
# @pytest.fixture(scope="session")
|
||||||
|
# def auth_response() -> MockResponse:
|
||||||
|
# json_data = {"message": "GenericError", "code": "TestLogin", "hints": "TestCase"}
|
||||||
|
# return MockResponse(401, json_data)
|
||||||
|
|
||||||
|
|
||||||
|
# @pytest.fixture(scope="session")
|
||||||
|
# def fail_response() -> MockResponse:
|
||||||
|
# json_data = {"message": "GenericError", "code": "Test123", "hints": "TestCase"}
|
||||||
|
# return MockResponse(500, json_data)
|
||||||
|
|
||||||
|
|
||||||
|
# @pytest.fixture
|
||||||
|
# def mock_response():
|
||||||
|
# with patch("requests.put") as mock_get:
|
||||||
|
# yield mock_get
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
["case", "expect"],
|
["case", "expect"],
|
||||||
@ -112,7 +131,7 @@ def test_session(credentials, api_base_url):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.api_con_required
|
@pytest.mark.api_con_required
|
||||||
def test_login_logout(session, credentials):
|
def test_login_logout_Success(session, credentials):
|
||||||
assert not session.logged_in
|
assert not session.logged_in
|
||||||
|
|
||||||
resp, status = session.login()
|
resp, status = session.login()
|
||||||
@ -139,8 +158,37 @@ def test_login_logout(session, credentials):
|
|||||||
assert status.api_server_error.message == "Nutzer oder Passwort falsch."
|
assert status.api_server_error.message == "Nutzer oder Passwort falsch."
|
||||||
|
|
||||||
|
|
||||||
|
def test_login_logout_FailApiServer(session, mock_put):
|
||||||
|
code = 401
|
||||||
|
json = {
|
||||||
|
"message": "GenericError",
|
||||||
|
"code": "TestLogin",
|
||||||
|
"hints": "TestCase",
|
||||||
|
}
|
||||||
|
|
||||||
|
mock_put.return_value.status_code = code
|
||||||
|
mock_put.return_value.json.return_value = json
|
||||||
|
resp, status = session.login()
|
||||||
|
assert resp is not None
|
||||||
|
assert not resp.token
|
||||||
|
assert status.code == 400
|
||||||
|
assert status.api_server_error is not None
|
||||||
|
assert status.api_server_error.status_code == code
|
||||||
|
assert status.api_server_error.message == json["message"]
|
||||||
|
assert status.api_server_error.code == json["code"]
|
||||||
|
assert status.api_server_error.hints == json["hints"]
|
||||||
|
resp, status = session.logout()
|
||||||
|
assert resp is None
|
||||||
|
assert status.code == 400
|
||||||
|
assert status.api_server_error is not None
|
||||||
|
assert status.api_server_error.status_code == code
|
||||||
|
assert status.api_server_error.message == json["message"]
|
||||||
|
assert status.api_server_error.code == json["code"]
|
||||||
|
assert status.api_server_error.hints == json["hints"]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.api_con_required
|
@pytest.mark.api_con_required
|
||||||
def test_assert_login_while_logged_out(session):
|
def test_assert_login_SuccessLoggedOut(session):
|
||||||
assert session.session_token is None
|
assert session.session_token is None
|
||||||
assert session._creds is not None
|
assert session._creds is not None
|
||||||
# test logged out state
|
# test logged out state
|
||||||
@ -151,11 +199,12 @@ def test_assert_login_while_logged_out(session):
|
|||||||
resp, status = session.logout()
|
resp, status = session.logout()
|
||||||
assert status.code == 0
|
assert status.code == 0
|
||||||
|
|
||||||
# test already logged in
|
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_assert_login_SuccessStillLoggedIn(session):
|
||||||
assert session.session_token is None
|
assert session.session_token is None
|
||||||
assert session._creds is not None
|
assert session._creds is not None
|
||||||
_, status = session.login()
|
resp, status = session.login()
|
||||||
assert status.code == 0
|
|
||||||
resp, status = session.assert_login()
|
resp, status = session.assert_login()
|
||||||
assert resp is not None
|
assert resp is not None
|
||||||
assert status.code == 0
|
assert status.code == 0
|
||||||
@ -163,7 +212,31 @@ def test_assert_login_while_logged_out(session):
|
|||||||
resp, status = session.logout()
|
resp, status = session.logout()
|
||||||
assert status.code == 0
|
assert status.code == 0
|
||||||
|
|
||||||
# test invalid token
|
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_assert_login_ReloginNoValidAuth(session, mock_get):
|
||||||
|
code = 401
|
||||||
|
json = {
|
||||||
|
"message": "AuthentificationError",
|
||||||
|
"code": "TestAssertLoginAfter",
|
||||||
|
"hints": "TestCase",
|
||||||
|
}
|
||||||
|
mock_get.return_value.status_code = code
|
||||||
|
mock_get.return_value.json.return_value = json
|
||||||
|
|
||||||
|
resp, status = session.login()
|
||||||
|
|
||||||
|
resp, status = session.assert_login()
|
||||||
|
assert resp is not None
|
||||||
|
assert status.code == 0
|
||||||
|
assert session.session_token is not None
|
||||||
|
resp, status = session.logout()
|
||||||
|
assert status.code == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_assert_login_ReloginWrongToken(session):
|
||||||
|
# triggers code 401
|
||||||
assert session.session_token is None
|
assert session.session_token is None
|
||||||
assert session._creds is not None
|
assert session._creds is not None
|
||||||
_, status = session.login()
|
_, status = session.login()
|
||||||
@ -175,3 +248,27 @@ def test_assert_login_while_logged_out(session):
|
|||||||
assert session.session_token is not None
|
assert session.session_token is not None
|
||||||
resp, status = session.logout()
|
resp, status = session.logout()
|
||||||
assert status.code == 0
|
assert status.code == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_assert_login_FailApiServer(session, mock_get):
|
||||||
|
code = 500
|
||||||
|
json = {
|
||||||
|
"message": "ServerError",
|
||||||
|
"code": "TestExternalServerError",
|
||||||
|
"hints": "TestCase",
|
||||||
|
}
|
||||||
|
mock_get.return_value.status_code = code
|
||||||
|
mock_get.return_value.json.return_value = json
|
||||||
|
|
||||||
|
resp, status = session.login()
|
||||||
|
|
||||||
|
resp, status = session.assert_login()
|
||||||
|
assert resp is not None
|
||||||
|
assert not resp.token
|
||||||
|
assert status.code == 400
|
||||||
|
assert status.api_server_error is not None
|
||||||
|
assert status.api_server_error.status_code == code
|
||||||
|
assert status.api_server_error.message == json["message"]
|
||||||
|
assert status.api_server_error.code == json["code"]
|
||||||
|
assert status.api_server_error.hints == json["hints"]
|
||||||
|
|||||||
@ -6,46 +6,92 @@ from delta_barth.api import requests as requests_
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.api_con_required
|
@pytest.mark.api_con_required
|
||||||
def test_get_sales_prognosis_data(session):
|
def test_get_sales_prognosis_data_Success(session):
|
||||||
resp, state = session.login()
|
resp, status = session.login()
|
||||||
# test without company ID
|
# test without company ID
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
date = Datetime(2022, 6, 1)
|
date = Datetime(2022, 6, 1)
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, None, date)
|
resp, status = requests_.get_sales_prognosis_data(session, None, date)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) > 0
|
assert len(resp.daten) > 0
|
||||||
date = Datetime(2030, 1, 1)
|
date = Datetime(2030, 1, 1)
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, None, date)
|
resp, status = requests_.get_sales_prognosis_data(session, None, date)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) == 0
|
assert len(resp.daten) == 0
|
||||||
# test with company ID
|
# test with company ID
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
date = Datetime(2022, 6, 1)
|
date = Datetime(2022, 6, 1)
|
||||||
company_id = 1024
|
company_id = 1024
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, company_id, date)
|
resp, status = requests_.get_sales_prognosis_data(session, company_id, date)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) > 0
|
assert len(resp.daten) > 0
|
||||||
date = Datetime(2030, 1, 1)
|
date = Datetime(2030, 1, 1)
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, company_id, date)
|
resp, status = requests_.get_sales_prognosis_data(session, company_id, date)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) == 0
|
assert len(resp.daten) == 0
|
||||||
# test with non-existent company ID
|
# test with non-existent company ID
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
date = Datetime(2022, 6, 1)
|
date = Datetime(2022, 6, 1)
|
||||||
company_id = 1000024
|
company_id = 1000024
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, company_id, date)
|
resp, status = requests_.get_sales_prognosis_data(session, company_id, date)
|
||||||
# TODO check if this behaviour is still considered "successful"
|
# TODO check if this behaviour is still considered "successful"
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) == 0
|
assert len(resp.daten) == 0
|
||||||
# test without date
|
# test without date
|
||||||
company_id = 1024
|
company_id = 1024
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, company_id, None)
|
resp, status = requests_.get_sales_prognosis_data(session, company_id, None)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) > 0
|
assert len(resp.daten) > 0
|
||||||
# test without filters
|
# test without filters
|
||||||
resp, state = requests_.get_sales_prognosis_data(session, None, None)
|
resp, status = requests_.get_sales_prognosis_data(session, None, None)
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
assert len(resp.daten) > 0
|
assert len(resp.daten) > 0
|
||||||
# close connection
|
# close connection
|
||||||
resp, state = session.logout()
|
resp, status = session.logout()
|
||||||
assert state.code == 0
|
assert status.code == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_get_sales_prognosis_data_FailLogin(session, mock_get):
|
||||||
|
session.login()
|
||||||
|
code = 500
|
||||||
|
json = {
|
||||||
|
"message": "ServerError",
|
||||||
|
"code": "TestExternalServerError",
|
||||||
|
"hints": "TestCase",
|
||||||
|
}
|
||||||
|
mock_get.return_value.status_code = code
|
||||||
|
mock_get.return_value.json.return_value = json
|
||||||
|
|
||||||
|
resp, status = requests_.get_sales_prognosis_data(session, None, None)
|
||||||
|
assert resp is not None
|
||||||
|
assert len(resp.daten) == 0
|
||||||
|
assert status.code == 400
|
||||||
|
assert status.api_server_error is not None
|
||||||
|
assert status.api_server_error.status_code == code
|
||||||
|
assert status.api_server_error.message == json["message"]
|
||||||
|
assert status.api_server_error.code == json["code"]
|
||||||
|
assert status.api_server_error.hints == json["hints"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.new
|
||||||
|
@pytest.mark.api_con_required
|
||||||
|
def test_get_sales_prognosis_data_FailApiServer(session, mock_get):
|
||||||
|
code = 405
|
||||||
|
json = {
|
||||||
|
"message": "ServerError",
|
||||||
|
"code": "TestExternalServerError",
|
||||||
|
"hints": "TestCase",
|
||||||
|
}
|
||||||
|
mock_get.return_value.status_code = code
|
||||||
|
mock_get.return_value.json.return_value = json
|
||||||
|
|
||||||
|
resp, status = requests_.get_sales_prognosis_data(session, None, None)
|
||||||
|
assert resp is not None
|
||||||
|
assert len(resp.daten) == 0
|
||||||
|
assert status.code == 400
|
||||||
|
assert status.api_server_error is not None
|
||||||
|
assert status.api_server_error.status_code == code
|
||||||
|
assert status.api_server_error.message == json["message"]
|
||||||
|
assert status.api_server_error.code == json["code"]
|
||||||
|
assert status.api_server_error.hints == json["hints"]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user