from __future__ import annotations from dataclasses import asdict from typing import cast import pytest import delta_barth._management from delta_barth import errors from delta_barth.constants import DEFAULT_API_ERR_CODE from delta_barth.types import DelBarApiError, Status def test_state_handler_parsing(): predef_errs = errors.DATA_PIPELINE_STATUS_DESCR state_hdlr = delta_barth._management.StateHandler() assert state_hdlr.pipe_states is not None parsed_pipe_states = state_hdlr.pipe_states assert parsed_pipe_states.SUCCESS == state_hdlr.SUCCESS parsed_pipe_states = asdict(parsed_pipe_states) for err in predef_errs: dopt_err = cast(Status, parsed_pipe_states[err[0]]) assert isinstance(dopt_err, Status) assert dopt_err.code == err[1] assert dopt_err.description == err[2] assert dopt_err.message == "" state_hdlr._parse_data_pipe_states() def test_state_handler_internal(): DESCRIPTION = "test case" MESSAGE = "an error occurred" ERR_CODE = 101 state_hdlr = delta_barth._management.StateHandler() new_err = state_hdlr.error( description=DESCRIPTION, message=MESSAGE, code=ERR_CODE, ) assert new_err.code == ERR_CODE assert new_err.description == DESCRIPTION assert new_err.message == MESSAGE # failure cases err_code = 50 # default lower bound: 100 with pytest.raises(ValueError): new_err = state_hdlr.error( description=DESCRIPTION, message=MESSAGE, code=err_code, ) err_code = 500 # default upper bound: 400 with pytest.raises(ValueError): new_err = state_hdlr.error( description=DESCRIPTION, message=MESSAGE, code=err_code, ) def test_state_handler_api_error(): MESSAGE = "an error occurred" api_err = DelBarApiError(status_code=401, message="test case") assert api_err.status_code == 401 assert api_err.message == "test case" state_hdlr = delta_barth._management.StateHandler() new_err = state_hdlr.api_error(error=api_err) assert new_err.code == DEFAULT_API_ERR_CODE assert "API-Server" in new_err.description assert new_err.message != MESSAGE assert new_err.api_server_error is not None assert new_err.api_server_error == api_err