test_muse_only.py
python
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