test_muse_only.py python
71 lines 2.5 KB
Raw
sha256:208d9dc47f0c6d8553ee80aafc8f0993a6ebf0a88410746f47f58b4e7c6fd6a6 fix(muse): use rev-parse for muse-only branch status Human minor ⚠ breaking 1 day ago
1 """Unit tests for muse-only adapter fail-closed branches."""
2
3 from __future__ import annotations
4
5 from adapters.errors import ReadError, WriteError
6 from tests.support import adapter_for, fail, make_runner, ok
7
8 GIT_FORBIDDEN = "git forbidden in this regime"
9
10
11 def test_status_success(muse_only_config, repo_root) -> None:
12 root = str(repo_root)
13 runner = make_runner(
14 {
15 f"muse -C {root} rev-parse --abbrev-ref HEAD": ok("feat/hub"),
16 f"muse -C {root} status --json": ok('{"dirty": false, "branch": "feat/hub"}'),
17 }
18 )
19 adapter = adapter_for(muse_only_config, repo_root, runner)
20 result = adapter.status()
21 assert result.regime == "muse-only"
22 assert result.branch == "feat/hub"
23 assert "git-forbidden" in result.notes[1]
24
25
26 def test_status_fails_closed_on_muse_error(muse_only_config, repo_root) -> None:
27 root = str(repo_root)
28 runner = make_runner(
29 {f"muse -C {root} rev-parse --abbrev-ref HEAD": fail("muse unavailable")}
30 )
31 adapter = adapter_for(muse_only_config, repo_root, runner)
32 result = adapter.status()
33 assert isinstance(result, ReadError)
34 assert "muse -C" in result.command
35
36
37 def test_read_head_rejects_git_ref(muse_only_config, repo_root) -> None:
38 adapter = adapter_for(muse_only_config, repo_root, make_runner({}))
39 result = adapter.read_head("origin/main")
40 assert isinstance(result, ReadError)
41 assert result.message == GIT_FORBIDDEN
42
43
44 def test_read_canonical_anchor(muse_only_config, repo_root) -> None:
45 root = str(repo_root)
46 runner = make_runner(
47 {f"muse -C {root} rev-parse main": ok('sha256:abc')}
48 )
49 adapter = adapter_for(muse_only_config, repo_root, runner)
50 result = adapter.read_canonical_anchor()
51 assert result.anchor_sha == "sha256:abc"
52 assert result.source == "muse:main"
53
54
55 def test_realign_noop(muse_only_config, repo_root) -> None:
56 adapter = adapter_for(muse_only_config, repo_root, make_runner({}))
57 result = adapter.realign(dry_run=False, max_commits=50)
58 assert result.reason == "single-history"
59
60
61 def test_mirror_reports_git_forbidden(muse_only_config, repo_root) -> None:
62 adapter = adapter_for(muse_only_config, repo_root, make_runner({}))
63 result = adapter.mirror(dry_run=True)
64 assert result.reason == GIT_FORBIDDEN
65 assert result.pushed is False
66
67
68 def test_commit_feature_refuses_main(muse_only_config, repo_root) -> None:
69 adapter = adapter_for(muse_only_config, repo_root, make_runner({}))
70 result = adapter.commit_feature(branch="main", message="x", paths=[])
71 assert isinstance(result, WriteError)
File History 2 commits
sha256:208d9dc47f0c6d8553ee80aafc8f0993a6ebf0a88410746f47f58b4e7c6fd6a6 fix(muse): use rev-parse for muse-only branch status Human minor 1 day ago
sha256:8461d44b77376fbf06fa7c3e085d309e3010fd8d5886d63c63e69ce118811ad4 docs: record AFF-b feature-tip SHAs after AFF-b-ISR commit. Human 3 days ago