"""Unit tests for config module constants.""" from devx.config import ( CONVENTIONAL_RE, DEFAULT_PER_PAGE, DEFAULT_TIMEOUT, GITEA_API_URL, MAX_RETRIES, REPO_OWNER, RETRY_BACKOFF_BASE, RETRY_STATUS_CODES, TASK_ID_RE, TASK_PREFIX, VIKUNJA_API_URL, ) class TestConfigConstants: def test_api_urls(self) -> None: assert "api/v1" in GITEA_API_URL assert "api/v1" in VIKUNJA_API_URL def test_project_ids(self, monkeypatch: object) -> None: """VIKUNJA_PROJECT_ID defaults to 6 when DEVX_VIKUNJA_PROJECT_ID is not set.""" monkeypatch.delenv("DEVX_VIKUNJA_PROJECT_ID", raising=False) import importlib import devx.config as cfg importlib.reload(cfg) assert cfg.VIKUNJA_PROJECT_ID == 6 # Restore module state importlib.reload(cfg) def test_timeouts(self) -> None: assert DEFAULT_TIMEOUT == 30 assert DEFAULT_PER_PAGE == 50 def test_owner(self) -> None: assert REPO_OWNER == "oblachno-oss" def test_task_prefix(self) -> None: assert TASK_PREFIX == "DEVX" def test_task_id_re(self) -> None: assert TASK_ID_RE.search("DEVX-1") assert TASK_ID_RE.search("DEVX-123") assert not TASK_ID_RE.search("DEVX-") assert not TASK_ID_RE.search("other text") def test_conventional_re(self) -> None: assert CONVENTIONAL_RE.match("feat: add feature") assert CONVENTIONAL_RE.match("fix(scope): bug fix") assert not CONVENTIONAL_RE.match("random message") assert not CONVENTIONAL_RE.match("feat:") assert not CONVENTIONAL_RE.match("BREAKING CHANGE: something") def test_retry_config(self) -> None: assert MAX_RETRIES == 3 assert RETRY_BACKOFF_BASE == 2 assert 429 in RETRY_STATUS_CODES assert 500 in RETRY_STATUS_CODES assert 502 in RETRY_STATUS_CODES assert 503 in RETRY_STATUS_CODES assert 504 in RETRY_STATUS_CODES def test_env_var_override(self, monkeypatch: object) -> None: """Test that env vars override defaults at import time.""" # We can't easily re-import the module, but we can verify # the constants respect env vars by checking the module source. import devx.config as cfg assert cfg.GITEA_API_URL # always non-empty assert cfg.VIKUNJA_API_URL # always non-empty class TestTaskPrefixOverride: def test_task_prefix_from_env(self, monkeypatch: object) -> None: """Verify TASK_PREFIX reads from DEVX_TASK_PREFIX env var.""" monkeypatch.setenv("DEVX_TASK_PREFIX", "INFRA") import importlib import devx.config as cfg importlib.reload(cfg) assert cfg.TASK_PREFIX == "INFRA" assert cfg.TASK_ID_RE.search("INFRA-42") assert not cfg.TASK_ID_RE.search("DEVX-42") # Restore monkeypatch.delenv("DEVX_TASK_PREFIX", raising=False) importlib.reload(cfg)