Files
DeepSeek-TUI/scripts/test_measure_persistence_backlog.py
CodeWhale Bot 001921d056 fix(ci): target persistence measurement library test
Run the ignored persistence backlog receipt test from the TUI library after the integration target move. Pin the exact Cargo command in a hermetic harness test and reject successful zero-test or missing-receipt runs so future test relocations fail clearly.
2026-08-08 01:56:19 -07:00

119 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""Hermetic tests for scripts/measure-persistence-backlog.py."""
from __future__ import annotations
import importlib.util
import io
import json
import subprocess
import sys
import tempfile
import unittest
from contextlib import redirect_stdout
from pathlib import Path
from unittest import mock
ROOT = Path(__file__).resolve().parents[1]
SCRIPT = ROOT / "scripts" / "measure-persistence-backlog.py"
SPEC = importlib.util.spec_from_file_location("measure_persistence_backlog", SCRIPT)
assert SPEC and SPEC.loader
mod = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = mod
SPEC.loader.exec_module(mod)
class PersistenceBacklogMeasurementTests(unittest.TestCase):
def test_runner_targets_exact_library_test(self) -> None:
completed = subprocess.CompletedProcess(
args=[],
returncode=0,
stdout=(
"running 1 test\n"
f"test {mod.TEST_NAME} ... ok\n\n"
"test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; "
"0 filtered out\n"
),
stderr="",
)
receipt = {"document_kind": "fixture"}
with tempfile.TemporaryDirectory() as root:
receipt_path = Path(root) / "receipt.json"
receipt_path.write_text(json.dumps(receipt), encoding="utf-8")
with mock.patch.object(
mod.subprocess, "run", return_value=completed
) as run:
measured = mod.run_measurement(receipt_path, {"FIXTURE": "1"})
self.assertEqual(measured, receipt)
self.assertEqual(
run.call_args.args[0],
[
"cargo",
"test",
"--locked",
"-p",
"codewhale-tui",
"--lib",
mod.TEST_NAME,
"--",
"--exact",
"--ignored",
"--test-threads=1",
],
)
self.assertEqual(run.call_args.kwargs["cwd"], mod.ROOT)
def test_successful_zero_test_run_is_rejected(self) -> None:
completed = subprocess.CompletedProcess(
args=[],
returncode=0,
stdout=(
"running 0 tests\n\n"
"test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; "
"1 filtered out\n"
),
stderr="",
)
with tempfile.TemporaryDirectory() as root:
receipt_path = Path(root) / "receipt.json"
receipt_path.write_text("{}", encoding="utf-8")
with (
mock.patch.object(mod.subprocess, "run", return_value=completed),
redirect_stdout(io.StringIO()),
self.assertRaisesRegex(
mod.PersistenceBacklogMeasurementError, "ran zero tests"
),
):
mod.run_measurement(receipt_path, {})
def test_successful_test_without_receipt_is_rejected(self) -> None:
completed = subprocess.CompletedProcess(
args=[],
returncode=0,
stdout=(
"running 1 test\n"
f"test {mod.TEST_NAME} ... ok\n\n"
"test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; "
"0 filtered out\n"
),
stderr="",
)
with tempfile.TemporaryDirectory() as root:
with (
mock.patch.object(mod.subprocess, "run", return_value=completed),
self.assertRaisesRegex(
mod.PersistenceBacklogMeasurementError,
"emitted no valid receipt",
),
):
mod.run_measurement(Path(root) / "missing.json", {})
if __name__ == "__main__":
raise SystemExit(unittest.main())