generated from coulomb/repo-seed
chore: add local consistency sync cli
This commit is contained in:
@@ -2,8 +2,13 @@ from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
import custodian_cli
|
||||
from custodian_cli import cmd_fix_consistency
|
||||
from statehub_register import (
|
||||
RegisterInference,
|
||||
_invoke_llm,
|
||||
@@ -91,7 +96,7 @@ def test_write_registration_files_primes_codex_repo(tmp_path: Path):
|
||||
workplan = (tmp_path / "workplans" / "DEMO-WP-0001-statehub-bootstrap.md").read_text()
|
||||
assert "id: DEMO-WP-0001" in workplan
|
||||
assert "id: DEMO-WP-0001-T01" in workplan
|
||||
assert "make fix-consistency REPO=demo-service" in workplan
|
||||
assert "statehub fix-consistency" in workplan
|
||||
|
||||
|
||||
def test_write_registration_files_is_idempotent_without_force(tmp_path: Path):
|
||||
@@ -111,3 +116,129 @@ def test_write_registration_files_is_idempotent_without_force(tmp_path: Path):
|
||||
|
||||
assert write_registration_files(**kwargs)
|
||||
assert write_registration_files(**kwargs) == []
|
||||
|
||||
|
||||
def _fix_args(**overrides):
|
||||
values = {
|
||||
"repo": None,
|
||||
"all": False,
|
||||
"path": None,
|
||||
"repo_path": None,
|
||||
"remote": False,
|
||||
"max_seconds": None,
|
||||
"no_writeback": False,
|
||||
"archive_closed": False,
|
||||
"archive_workplan": None,
|
||||
"archive_date": None,
|
||||
"api_base": "http://statehub.test",
|
||||
"as_json": False,
|
||||
"strict_warnings": False,
|
||||
}
|
||||
values.update(overrides)
|
||||
return argparse.Namespace(**values)
|
||||
|
||||
|
||||
def _install_fake_checker(monkeypatch, tmp_path: Path) -> Path:
|
||||
checker = tmp_path / "scripts" / "consistency_check.py"
|
||||
checker.parent.mkdir()
|
||||
checker.write_text("#!/usr/bin/env python3\n", encoding="utf-8")
|
||||
monkeypatch.setattr(custodian_cli, "STATE_HUB_DIR", tmp_path)
|
||||
return checker
|
||||
|
||||
|
||||
def test_fix_consistency_defaults_to_here_and_normalises_warning_exit(monkeypatch, tmp_path: Path):
|
||||
checker = _install_fake_checker(monkeypatch, tmp_path)
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
calls = []
|
||||
|
||||
def fake_run(cmd):
|
||||
calls.append(cmd)
|
||||
return argparse.Namespace(returncode=2)
|
||||
|
||||
monkeypatch.setattr(custodian_cli.subprocess, "run", fake_run)
|
||||
|
||||
with pytest.raises(SystemExit) as exc:
|
||||
cmd_fix_consistency(_fix_args(path=str(repo)))
|
||||
|
||||
assert exc.value.code == 0
|
||||
assert calls == [[
|
||||
sys.executable,
|
||||
str(checker),
|
||||
"--here",
|
||||
str(repo.resolve()),
|
||||
"--fix",
|
||||
"--api-base",
|
||||
"http://statehub.test",
|
||||
]]
|
||||
|
||||
|
||||
def test_fix_consistency_strict_warnings_preserves_exit_two(monkeypatch, tmp_path: Path):
|
||||
_install_fake_checker(monkeypatch, tmp_path)
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
monkeypatch.setattr(
|
||||
custodian_cli.subprocess,
|
||||
"run",
|
||||
lambda _cmd: argparse.Namespace(returncode=2),
|
||||
)
|
||||
|
||||
with pytest.raises(SystemExit) as exc:
|
||||
cmd_fix_consistency(_fix_args(path=str(repo), strict_warnings=True))
|
||||
|
||||
assert exc.value.code == 2
|
||||
|
||||
|
||||
def test_fix_consistency_repo_remote_passes_pull_before_fix_options(monkeypatch, tmp_path: Path):
|
||||
checker = _install_fake_checker(monkeypatch, tmp_path)
|
||||
repo = tmp_path / "repo"
|
||||
repo.mkdir()
|
||||
calls = []
|
||||
|
||||
def fake_run(cmd):
|
||||
calls.append(cmd)
|
||||
return argparse.Namespace(returncode=0)
|
||||
|
||||
monkeypatch.setattr(custodian_cli.subprocess, "run", fake_run)
|
||||
|
||||
with pytest.raises(SystemExit) as exc:
|
||||
cmd_fix_consistency(
|
||||
_fix_args(
|
||||
repo="demo-service",
|
||||
repo_path=str(repo),
|
||||
remote=True,
|
||||
no_writeback=True,
|
||||
as_json=True,
|
||||
max_seconds=12,
|
||||
)
|
||||
)
|
||||
|
||||
assert exc.value.code == 0
|
||||
assert calls == [[
|
||||
sys.executable,
|
||||
str(checker),
|
||||
"--repo",
|
||||
"demo-service",
|
||||
"--repo-path",
|
||||
str(repo.resolve()),
|
||||
"--fix",
|
||||
"--remote",
|
||||
"--no-writeback",
|
||||
"--api-base",
|
||||
"http://statehub.test",
|
||||
"--json",
|
||||
"--max-seconds",
|
||||
"12",
|
||||
]]
|
||||
|
||||
|
||||
def test_fix_consistency_remote_requires_explicit_repo_or_all(monkeypatch, tmp_path: Path):
|
||||
_install_fake_checker(monkeypatch, tmp_path)
|
||||
calls = []
|
||||
monkeypatch.setattr(custodian_cli.subprocess, "run", lambda cmd: calls.append(cmd))
|
||||
|
||||
with pytest.raises(SystemExit) as exc:
|
||||
cmd_fix_consistency(_fix_args(remote=True, path=str(tmp_path)))
|
||||
|
||||
assert exc.value.code == 1
|
||||
assert calls == []
|
||||
|
||||
Reference in New Issue
Block a user