test_muse_only.py file-level

at sha256:2 · View file ↗ · Intel ↗

History
1 files
1 commits
0 hotspots
0 🧊 dead
0 💥 blast risk
sha256:2 fix(muse): use rev-parse for muse-only branch status · · Sep 22, 2026
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)