Files
prowler/tests/providers/okta/exceptions/okta_exceptions_test.py
2026-05-20 10:46:29 +02:00

79 lines
2.9 KiB
Python

import pytest
from prowler.providers.okta.exceptions.exceptions import (
OktaBaseException,
OktaCredentialsError,
OktaEnvironmentVariableError,
OktaInsufficientPermissionsError,
OktaInvalidCredentialsError,
OktaInvalidOrgDomainError,
OktaInvalidProviderIdError,
OktaPrivateKeyFileError,
OktaSetUpIdentityError,
OktaSetUpSessionError,
)
EXPECTED_CODES = {
OktaEnvironmentVariableError: 14000,
OktaSetUpSessionError: 14001,
OktaSetUpIdentityError: 14002,
OktaInvalidCredentialsError: 14003,
OktaInvalidOrgDomainError: 14004,
OktaPrivateKeyFileError: 14005,
OktaInsufficientPermissionsError: 14006,
OktaInvalidProviderIdError: 14007,
}
class Test_OktaExceptions:
def test_all_codes_in_reserved_range(self):
codes = [c for c, _ in OktaBaseException.OKTA_ERROR_CODES.keys()]
assert all(14000 <= c <= 14999 for c in codes)
assert len(codes) == len(set(codes)) # unique
def test_all_subclasses_inherit_from_credentials_error(self):
for exc_cls in EXPECTED_CODES:
assert issubclass(exc_cls, OktaCredentialsError)
assert issubclass(exc_cls, OktaBaseException)
@pytest.mark.parametrize("exc_cls,code", list(EXPECTED_CODES.items()))
def test_each_exception_carries_its_code(self, exc_cls, code):
exc = exc_cls()
assert exc.code == code
assert exc.source == "Okta"
assert exc.message # populated from OKTA_ERROR_CODES
assert exc.remediation # populated from OKTA_ERROR_CODES
@pytest.mark.parametrize("exc_cls", list(EXPECTED_CODES.keys()))
def test_custom_message_overrides_default(self, exc_cls):
custom = "specific error context"
exc = exc_cls(message=custom)
assert exc.message == custom
def test_str_format_includes_class_code_and_message(self):
exc = OktaInvalidOrgDomainError(message="bad url")
rendered = str(exc)
assert "OktaInvalidOrgDomainError" in rendered
assert "[14004]" in rendered
assert "bad url" in rendered
def test_original_exception_appended_to_str(self):
original = ValueError("network down")
exc = OktaSetUpIdentityError(original_exception=original)
rendered = str(exc)
assert "network down" in rendered
def test_can_be_raised_and_caught(self):
with pytest.raises(OktaInvalidCredentialsError) as info:
raise OktaInvalidCredentialsError(message="bad token")
assert info.value.code == 14003
assert "bad token" in str(info.value)
def test_caught_as_credentials_error_base(self):
with pytest.raises(OktaCredentialsError):
raise OktaPrivateKeyFileError(message="empty")
def test_caught_as_okta_base_exception(self):
with pytest.raises(OktaBaseException):
raise OktaEnvironmentVariableError(message="missing org url")