use Codex 5.3 to review template to spec
This commit is contained in:
@@ -1,18 +1,22 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from {{ cookiecutter.package_name }}.commands import format_greeting
|
||||
from {{ cookiecutter.package_name }}.config import get_config, get_config_source
|
||||
from {{ cookiecutter.package_name }}.config.paths import ENV_CONFIG_VAR
|
||||
from {{ cookiecutter.package_name }}.config.paths import ENV_CONFIG_VAR, config_file_path
|
||||
|
||||
|
||||
def test_env_config_override(tmp_path, monkeypatch) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
config_path.write_text("greeting = \"Hi\"\n")
|
||||
config_path.write_text('[app]\ngreeting = "Hi"\n\n[database]\npath = "/tmp/app.db"\n')
|
||||
monkeypatch.setenv(ENV_CONFIG_VAR, str(config_path))
|
||||
|
||||
settings = get_config()
|
||||
|
||||
assert settings.greeting == "Hi"
|
||||
assert settings.app.greeting == "Hi"
|
||||
assert settings.database.path == "/tmp/app.db"
|
||||
assert get_config_source() == config_path
|
||||
|
||||
|
||||
@@ -20,13 +24,39 @@ def test_missing_env_config_raises(tmp_path, monkeypatch) -> None:
|
||||
missing = tmp_path / "missing.toml"
|
||||
monkeypatch.setenv(ENV_CONFIG_VAR, str(missing))
|
||||
|
||||
try:
|
||||
with pytest.raises(FileNotFoundError, match="Config file not found"):
|
||||
get_config()
|
||||
except FileNotFoundError as exc:
|
||||
assert str(missing) in str(exc)
|
||||
else:
|
||||
raise AssertionError("Expected FileNotFoundError")
|
||||
|
||||
|
||||
def test_xdg_default_config_is_loaded(monkeypatch) -> None:
|
||||
path = config_file_path()
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text('[app]\ngreeting = "Hola"\n\n[database]\npath = "/tmp/default.db"\n')
|
||||
monkeypatch.delenv(ENV_CONFIG_VAR, raising=False)
|
||||
|
||||
settings = get_config()
|
||||
|
||||
assert settings.app.greeting == "Hola"
|
||||
assert settings.database.path == "/tmp/default.db"
|
||||
assert get_config_source() == path
|
||||
|
||||
|
||||
def test_unknown_key_raises_validation_error(tmp_path, monkeypatch) -> None:
|
||||
config_path = tmp_path / "config.toml"
|
||||
config_path.write_text('unknown = "value"\n')
|
||||
monkeypatch.setenv(ENV_CONFIG_VAR, str(config_path))
|
||||
|
||||
with pytest.raises(ValidationError):
|
||||
get_config()
|
||||
|
||||
|
||||
def test_settings_are_frozen() -> None:
|
||||
settings = get_config()
|
||||
|
||||
with pytest.raises(ValidationError, match="frozen"):
|
||||
settings.app.greeting = "Mutated"
|
||||
|
||||
|
||||
def test_format_greeting() -> None:
|
||||
assert format_greeting("Ada") == "Hello, Ada!"
|
||||
assert format_greeting("Ada", greeting="Hi") == "Hi, Ada!"
|
||||
|
||||
Reference in New Issue
Block a user