Public Access
Post-merge / detect-type (push) Successful in 8s
Post-merge / validate-commit-msg (push) Successful in 13s
Post-merge / configure-repo (push) Successful in 25s
Post-merge / release (push) Successful in 50s
Post-merge / vikunja (push) Successful in 10s
Post-merge / sync-wiki (push) Successful in 41s
Post-merge / badges (push) Successful in 40s
92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
"""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 == ""
|
|
|
|
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)
|