"""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 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