diff --git a/src/venvalid/utils_errors.py b/src/venvalid/utils_errors.py new file mode 100644 index 0000000..3dd0c78 --- /dev/null +++ b/src/venvalid/utils_errors.py @@ -0,0 +1,9 @@ +def pretty_print_error(error: Exception) -> None: + """Pretty print errors using rich if available, else fallback to plain text""" + try: + from rich.console import Console + + console = Console() + console.print(f"[bold red]Error:[/bold red] {error}") + except ImportError: + print(f"Error: {error}") diff --git a/src/venvalid/validator.py b/src/venvalid/validator.py new file mode 100644 index 0000000..b5aaa77 --- /dev/null +++ b/src/venvalid/validator.py @@ -0,0 +1,7 @@ +from src.venvalid.errors import EnvSafeError + + +def validate_env_var(name: str, value: str | None): + if not value: + raise EnvSafeError(f"Missing required environment variable: {name}") + return True diff --git a/tests/test_utils_errors.py b/tests/test_utils_errors.py new file mode 100644 index 0000000..6325aeb --- /dev/null +++ b/tests/test_utils_errors.py @@ -0,0 +1,40 @@ +import sys +import types + +import src.venvalid.utils_errors as utils_errors + + +class DummyConsole: + def __init__(self): + self.last_message = None + + def print(self, msg): + self.last_message = msg + + +def test_pretty_print_error_with_rich(monkeypatch): + dummy_console = DummyConsole() + + fake_rich_pkg = types.ModuleType("rich") + fake_rich_pkg.__path__ = [] # mark as package + + fake_console_mod = types.ModuleType("rich.console") + setattr(fake_console_mod, "Console", lambda: dummy_console) + + monkeypatch.setitem(sys.modules, "rich", fake_rich_pkg) + monkeypatch.setitem(sys.modules, "rich.console", fake_console_mod) + + utils_errors.pretty_print_error(ValueError("boom")) + + assert dummy_console.last_message is not None + assert "boom" in dummy_console.last_message + + +def test_pretty_print_error_without_rich(monkeypatch, capsys): + monkeypatch.delitem(sys.modules, "rich.console", raising=False) + monkeypatch.delitem(sys.modules, "rich", raising=False) + + utils_errors.pretty_print_error(ValueError("fail")) + + out = capsys.readouterr().out + assert "Error: fail" in out diff --git a/tests/test_validator.py b/tests/test_validator.py new file mode 100644 index 0000000..256e2aa --- /dev/null +++ b/tests/test_validator.py @@ -0,0 +1,15 @@ +import pytest + +from src.venvalid.errors import EnvSafeError +from src.venvalid.validator import validate_env_var + + +def test_validate_env_var_success(): + assert validate_env_var("API_KEY", "secret") is True + + +def test_validate_env_var_missing(): + with pytest.raises(EnvSafeError) as exc_info: + validate_env_var("API_KEY", None) + + assert "Missing required environment variable: API_KEY" in str(exc_info.value)