| import pytest | |
| from TerraFin.interface.config import RuntimeConfigError, load_runtime_config | |
| def test_runtime_config_defaults_when_env_missing() -> None: | |
| config = load_runtime_config(env={}) | |
| assert config.host == "127.0.0.1" | |
| assert config.port == 8001 | |
| assert config.base_path == "" | |
| assert config.cache_timezone == "UTC" | |
| def test_runtime_config_invalid_port_non_integer() -> None: | |
| with pytest.raises(RuntimeConfigError, match="Invalid TERRAFIN_PORT"): | |
| load_runtime_config(env={"TERRAFIN_PORT": "invalid"}) | |
| def test_runtime_config_invalid_port_out_of_range_low() -> None: | |
| with pytest.raises(RuntimeConfigError, match="Invalid TERRAFIN_PORT"): | |
| load_runtime_config(env={"TERRAFIN_PORT": "0"}) | |
| def test_runtime_config_invalid_port_out_of_range_high() -> None: | |
| with pytest.raises(RuntimeConfigError, match="Invalid TERRAFIN_PORT"): | |
| load_runtime_config(env={"TERRAFIN_PORT": "65536"}) | |
| def test_runtime_config_base_path_normalization_adds_leading_slash() -> None: | |
| config = load_runtime_config(env={"TERRAFIN_BASE_PATH": "terrafin"}) | |
| assert config.base_path == "/terrafin" | |
| def test_runtime_config_base_path_normalization_removes_trailing_slash() -> None: | |
| config = load_runtime_config(env={"TERRAFIN_BASE_PATH": "/terrafin/"}) | |
| assert config.base_path == "/terrafin" | |
| def test_runtime_config_base_path_normalization_empty_values() -> None: | |
| config_empty = load_runtime_config(env={"TERRAFIN_BASE_PATH": ""}) | |
| config_root = load_runtime_config(env={"TERRAFIN_BASE_PATH": "/"}) | |
| assert config_empty.base_path == "" | |
| assert config_root.base_path == "" | |
| def test_runtime_config_accepts_valid_cache_timezone() -> None: | |
| config = load_runtime_config(env={"TERRAFIN_CACHE_TIMEZONE": "Asia/Seoul"}) | |
| assert config.cache_timezone == "Asia/Seoul" | |
| def test_runtime_config_rejects_invalid_cache_timezone() -> None: | |
| with pytest.raises(RuntimeConfigError, match="Invalid TERRAFIN_CACHE_TIMEZONE"): | |
| load_runtime_config(env={"TERRAFIN_CACHE_TIMEZONE": "Mars/Olympus"}) | |