refactoring session management
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from delta_barth.api import common
|
||||
from delta_barth.constants import HTTP_BASE_CONTENT_HEADERS
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def session(credentials, api_base_url) -> common.Session:
|
||||
session = common.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
session.set_base_url(api_base_url)
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
|
||||
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,72 +1,13 @@
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from delta_barth.api import common
|
||||
from delta_barth.constants import (
|
||||
DEFAULT_API_ERR_CODE,
|
||||
HTTP_BASE_CONTENT_HEADERS,
|
||||
LOG_FILENAME,
|
||||
)
|
||||
from delta_barth.errors import (
|
||||
UnspecifiedRequestType,
|
||||
)
|
||||
from delta_barth.types import HttpRequestTypes
|
||||
|
||||
|
||||
def test_validate_path_Success():
|
||||
str_pth = str(Path.cwd())
|
||||
path = common.validate_path(str_pth)
|
||||
assert path.name == Path.cwd().name
|
||||
|
||||
|
||||
def test_validate_path_FailNotExisting():
|
||||
str_pth = str(Path.cwd() / "test")
|
||||
with pytest.raises(FileNotFoundError, match=r"seems not to exist"):
|
||||
_ = common.validate_path(str_pth)
|
||||
|
||||
|
||||
def test_validate_path_FailNoDirectory(tmp_path):
|
||||
file = tmp_path / "test.txt"
|
||||
file.write_text("test", encoding="utf-8")
|
||||
|
||||
str_pth = str(file)
|
||||
with pytest.raises(FileNotFoundError, match=r"seems not to be a directory"):
|
||||
_ = common.validate_path(str_pth)
|
||||
|
||||
|
||||
def test_session_set_DataPath(tmp_path):
|
||||
str_path = str(tmp_path)
|
||||
session = common.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
|
||||
assert session._data_path is None
|
||||
|
||||
session.set_data_path(str_path)
|
||||
assert session._data_path is not None
|
||||
assert isinstance(session.data_path, Path)
|
||||
|
||||
|
||||
@patch("delta_barth.logging.ENABLE_LOGGING", True)
|
||||
@patch("delta_barth.logging.LOGGING_TO_FILE", True)
|
||||
def test_session_setup_logging(tmp_path):
|
||||
str_path = str(tmp_path)
|
||||
foldername: str = "logging_test"
|
||||
target_log_dir = tmp_path / foldername
|
||||
|
||||
session = common.Session(HTTP_BASE_CONTENT_HEADERS, logging_folder=foldername)
|
||||
session.set_data_path(str_path)
|
||||
log_dir = session.logging_dir
|
||||
assert log_dir.exists()
|
||||
assert log_dir == target_log_dir
|
||||
# write file
|
||||
target_file = target_log_dir / LOG_FILENAME
|
||||
assert not target_file.exists()
|
||||
session.setup() # calls setup code for logging
|
||||
assert target_file.exists()
|
||||
|
||||
|
||||
def test_validate_creds(credentials):
|
||||
creds = common.validate_credentials(
|
||||
username=credentials["user"],
|
||||
@@ -110,204 +51,3 @@ def test_ping(api_base_url):
|
||||
|
||||
with pytest.raises(UnspecifiedRequestType):
|
||||
resp = common.ping(api_base_url, HttpRequestTypes.POST)
|
||||
|
||||
|
||||
def test_session_set_ApiInfo_LoggedOut(credentials, api_base_url):
|
||||
session = common.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
|
||||
assert session.session_token is None
|
||||
assert session._creds is None
|
||||
assert session._base_url is None
|
||||
|
||||
session.set_base_url(api_base_url)
|
||||
assert session._base_url is not None
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
assert session._creds is not None
|
||||
|
||||
assert session.session_token is None
|
||||
assert not session.logged_in
|
||||
|
||||
|
||||
@pytest.mark.api_con_required
|
||||
def test_session_set_ApiInfo_LoggedIn(credentials, api_base_url):
|
||||
session = common.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
# prepare login
|
||||
assert session.session_token is None
|
||||
assert session._creds is None
|
||||
assert session._base_url is None
|
||||
session.set_base_url(api_base_url)
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
session.login()
|
||||
assert session._base_url is not None
|
||||
assert session.logged_in
|
||||
# reset base URL
|
||||
session.set_base_url(api_base_url)
|
||||
assert session._base_url is not None
|
||||
assert not session.logged_in
|
||||
assert session.session_token is None
|
||||
# reset credentials
|
||||
session.login()
|
||||
assert session.logged_in
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
assert session._creds is not None
|
||||
assert not session.logged_in
|
||||
assert session.session_token is None
|
||||
|
||||
|
||||
@pytest.mark.api_con_required
|
||||
def test_login_logout_Success(session, credentials):
|
||||
assert not session.logged_in
|
||||
|
||||
resp, status = session.login()
|
||||
assert resp is not None
|
||||
assert status.code == 0
|
||||
assert session.session_token is not None
|
||||
resp, status = session.logout()
|
||||
assert resp is None
|
||||
assert status.code == 0
|
||||
assert session.session_token is None
|
||||
assert "DelecoToken" not in session.headers
|
||||
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password="WRONG_PASSWORD",
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
resp, status = session.login()
|
||||
assert resp is not None
|
||||
assert status.code == DEFAULT_API_ERR_CODE
|
||||
assert status.api_server_error is not None
|
||||
assert status.api_server_error.status_code == 409
|
||||
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
|
||||
def test_assert_login_SuccessLoggedOut(session):
|
||||
assert session.session_token is None
|
||||
assert session._creds is not None
|
||||
# test logged out state
|
||||
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_SuccessStillLoggedIn(session):
|
||||
assert session.session_token is None
|
||||
assert session._creds is not None
|
||||
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_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._creds is not None
|
||||
_, status = session.login()
|
||||
assert status.code == 0
|
||||
session._session_token = "WRONGTOKEN"
|
||||
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_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"]
|
||||
|
||||
@@ -4,11 +4,14 @@ import json
|
||||
import tomllib
|
||||
from pathlib import Path
|
||||
from typing import Any, cast
|
||||
from unittest.mock import patch
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
|
||||
import delta_barth.session
|
||||
from delta_barth.api.requests import SalesPrognosisResponse
|
||||
from delta_barth.constants import HTTP_BASE_CONTENT_HEADERS
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
@@ -30,40 +33,6 @@ def api_base_url(credentials) -> str:
|
||||
return credentials["base_url"]
|
||||
|
||||
|
||||
# TODO: maybe include in main package depending if needed in future
|
||||
# TODO check deletion
|
||||
# def _cvt_str_float(value: str) -> float:
|
||||
# import locale
|
||||
|
||||
# locale.setlocale(locale.LC_NUMERIC, "de_DE.UTF-8")
|
||||
# return locale.atof(value)
|
||||
|
||||
|
||||
# def _cvt_str_ts(value: str) -> Any:
|
||||
# date = value.split("_")[0]
|
||||
|
||||
# return pd.to_datetime(date, format="%Y%m%d", errors="coerce")
|
||||
|
||||
|
||||
# @pytest.fixture(scope="session")
|
||||
# def sales_data_db_export() -> pd.DataFrame:
|
||||
# pwd = Path.cwd()
|
||||
# assert "barth" in pwd.parent.name.lower(), "not in project root directory"
|
||||
# data_pth = pwd / "./tests/_test_data/swm_f_umsatz_fakt.csv"
|
||||
# assert data_pth.exists(), "file to sales data not found"
|
||||
# data = pd.read_csv(data_pth, sep="\t")
|
||||
# data["betrag"] = data["betrag"].apply(_cvt_str_float)
|
||||
# data["buchungs_datum"] = data["buchungs_datum"].apply(_cvt_str_ts)
|
||||
# data = data.dropna(
|
||||
# how="any",
|
||||
# subset=["firma_refid", "beleg_typ", "buchungs_datum", "betrag"],
|
||||
# ignore_index=True,
|
||||
# )
|
||||
# data["buchungs_datum"] = pd.to_datetime(data["buchungs_datum"])
|
||||
|
||||
# return data
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def sales_data_real() -> pd.DataFrame:
|
||||
pwd = Path.cwd()
|
||||
@@ -101,3 +70,30 @@ def exmpl_api_sales_prognosis_output() -> pd.DataFrame:
|
||||
assert data_pth.exists(), "file to API sales data not found"
|
||||
|
||||
return pd.read_pickle(data_pth)
|
||||
|
||||
|
||||
# ** sessions
|
||||
@pytest.fixture(scope="function")
|
||||
def session(credentials, api_base_url) -> delta_barth.session.Session:
|
||||
session = delta_barth.session.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
session.set_base_url(api_base_url)
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
265
tests/test_session.py
Normal file
265
tests/test_session.py
Normal file
@@ -0,0 +1,265 @@
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
import delta_barth.session
|
||||
from delta_barth.constants import (
|
||||
DEFAULT_API_ERR_CODE,
|
||||
HTTP_BASE_CONTENT_HEADERS,
|
||||
LOG_FILENAME,
|
||||
)
|
||||
|
||||
|
||||
def test_validate_path_Success():
|
||||
str_pth = str(Path.cwd())
|
||||
path = delta_barth.session.validate_path(str_pth)
|
||||
assert path.name == Path.cwd().name
|
||||
|
||||
|
||||
def test_validate_path_FailNotExisting():
|
||||
str_pth = str(Path.cwd() / "test")
|
||||
with pytest.raises(FileNotFoundError, match=r"seems not to exist"):
|
||||
_ = delta_barth.session.validate_path(str_pth)
|
||||
|
||||
|
||||
def test_validate_path_FailNoDirectory(tmp_path):
|
||||
file = tmp_path / "test.txt"
|
||||
file.write_text("test", encoding="utf-8")
|
||||
|
||||
str_pth = str(file)
|
||||
with pytest.raises(FileNotFoundError, match=r"seems not to be a directory"):
|
||||
_ = delta_barth.session.validate_path(str_pth)
|
||||
|
||||
|
||||
def test_session_set_DataPath(tmp_path):
|
||||
str_path = str(tmp_path)
|
||||
session = delta_barth.session.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
|
||||
assert session._data_path is None
|
||||
|
||||
session.set_data_path(str_path)
|
||||
assert session._data_path is not None
|
||||
assert isinstance(session.data_path, Path)
|
||||
|
||||
|
||||
@patch("delta_barth.logging.ENABLE_LOGGING", True)
|
||||
@patch("delta_barth.logging.LOGGING_TO_FILE", True)
|
||||
def test_session_setup_logging(tmp_path):
|
||||
str_path = str(tmp_path)
|
||||
foldername: str = "logging_test"
|
||||
target_log_dir = tmp_path / foldername
|
||||
|
||||
session = delta_barth.session.Session(
|
||||
HTTP_BASE_CONTENT_HEADERS, logging_folder=foldername
|
||||
)
|
||||
session.set_data_path(str_path)
|
||||
log_dir = session.logging_dir
|
||||
assert log_dir.exists()
|
||||
assert log_dir == target_log_dir
|
||||
# write file
|
||||
target_file = target_log_dir / LOG_FILENAME
|
||||
assert not target_file.exists()
|
||||
session.setup() # calls setup code for logging
|
||||
assert target_file.exists()
|
||||
|
||||
|
||||
def test_session_set_ApiInfo_LoggedOut(credentials, api_base_url):
|
||||
session = delta_barth.session.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
|
||||
assert session.session_token is None
|
||||
assert session._creds is None
|
||||
assert session._base_url is None
|
||||
|
||||
session.set_base_url(api_base_url)
|
||||
assert session._base_url is not None
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
assert session._creds is not None
|
||||
|
||||
assert session.session_token is None
|
||||
assert not session.logged_in
|
||||
|
||||
|
||||
@pytest.mark.api_con_required
|
||||
def test_session_set_ApiInfo_LoggedIn(credentials, api_base_url):
|
||||
session = delta_barth.session.Session(HTTP_BASE_CONTENT_HEADERS)
|
||||
# prepare login
|
||||
assert session.session_token is None
|
||||
assert session._creds is None
|
||||
assert session._base_url is None
|
||||
session.set_base_url(api_base_url)
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
session.login()
|
||||
assert session._base_url is not None
|
||||
assert session.logged_in
|
||||
# reset base URL
|
||||
session.set_base_url(api_base_url)
|
||||
assert session._base_url is not None
|
||||
assert not session.logged_in
|
||||
assert session.session_token is None
|
||||
# reset credentials
|
||||
session.login()
|
||||
assert session.logged_in
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password=credentials["pwd"],
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
assert session._creds is not None
|
||||
assert not session.logged_in
|
||||
assert session.session_token is None
|
||||
|
||||
|
||||
@pytest.mark.api_con_required
|
||||
def test_login_logout_Success(session, credentials):
|
||||
assert not session.logged_in
|
||||
|
||||
resp, status = session.login()
|
||||
assert resp is not None
|
||||
assert status.code == 0
|
||||
assert session.session_token is not None
|
||||
resp, status = session.logout()
|
||||
assert resp is None
|
||||
assert status.code == 0
|
||||
assert session.session_token is None
|
||||
assert "DelecoToken" not in session.headers
|
||||
|
||||
session.set_credentials(
|
||||
username=credentials["user"],
|
||||
password="WRONG_PASSWORD",
|
||||
database=credentials["db"],
|
||||
mandant=credentials["mandant"],
|
||||
)
|
||||
resp, status = session.login()
|
||||
assert resp is not None
|
||||
assert status.code == DEFAULT_API_ERR_CODE
|
||||
assert status.api_server_error is not None
|
||||
assert status.api_server_error.status_code == 409
|
||||
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
|
||||
def test_assert_login_SuccessLoggedOut(session):
|
||||
assert session.session_token is None
|
||||
assert session._creds is not None
|
||||
# test logged out state
|
||||
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_SuccessStillLoggedIn(session):
|
||||
assert session.session_token is None
|
||||
assert session._creds is not None
|
||||
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_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._creds is not None
|
||||
_, status = session.login()
|
||||
assert status.code == 0
|
||||
session._session_token = "WRONGTOKEN"
|
||||
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_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"]
|
||||
Reference in New Issue
Block a user