Some checks failed
Use-case regression gate / usecase-regressions (push) Has been cancelled
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a18e2d-f513-7742-b8e7-12af0b744ff3
48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
"""Keep registered use-case coverage present before any marker deselection."""
|
|
|
|
import pytest
|
|
|
|
from tests.usecases.registry import load_cases, validate_coverage
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def django_db_modify_db_settings(
|
|
tmp_path_factory, django_db_modify_db_settings_parallel_suffix,
|
|
):
|
|
"""Give browser request threads separate connections to an isolated database.
|
|
|
|
Django's in-memory live-server path shares one SQLite connection between
|
|
request threads. Parallel private-image reads race its debug-query cursor.
|
|
A per-run/worker temporary file preserves transactions and permits the same
|
|
concurrent browser traffic as the app's PostgreSQL deployment.
|
|
"""
|
|
from django.conf import settings
|
|
|
|
if settings.DATABASES["default"]["ENGINE"] != "django.db.backends.sqlite3":
|
|
return
|
|
directory = tmp_path_factory.mktemp("csoc-test-db")
|
|
settings.DATABASES["default"].setdefault("TEST", {})["NAME"] = str(
|
|
directory / "test.sqlite3"
|
|
)
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
parser.addoption("--verify-usecases", action="store_true",
|
|
help="Fail if established use cases lose registered test coverage")
|
|
|
|
|
|
@pytest.hookimpl(tryfirst=True)
|
|
def pytest_collection_modifyitems(config, items):
|
|
if not config.getoption("--verify-usecases"):
|
|
return
|
|
collected = {}
|
|
for item in items:
|
|
collected[item.nodeid] = {
|
|
"usecases": {m.args[0] for m in item.iter_markers("usecase") if m.args},
|
|
"browser": item.get_closest_marker("browser") is not None,
|
|
"disabled": any(item.get_closest_marker(m) for m in ("skip", "skipif", "xfail")),
|
|
}
|
|
try:
|
|
validate_coverage(load_cases(), collected)
|
|
except (KeyError, ValueError, TypeError, OSError) as exc:
|
|
raise pytest.UsageError(f"Use-case regression contract failed: {exc}") from exc
|