test_adapter_factory.py file-level

at sha256:a · View file ↗ · Intel ↗

History
1 files
1 commits
0 hotspots
0 🧊 dead
0 💥 blast risk
sha256:8 docs: queue board-identity follow-ups so they survive the session Capt… · aaronrene · Sep 5, 2026
1 """Integration tests — config + factory + adapter composition."""
2
3 from __future__ import annotations
4
5 from pathlib import Path
6
7 import pytest
8
9 from adapters import load_adapter
10 from adapters.errors import ConfigError, ReadError
11 from adapters.git_only.adapter import GitOnlyAdapter
12 from adapters.muse_git_mirror.adapter import MuseGitMirrorAdapter
13 from adapters.muse_only.adapter import MuseOnlyAdapter
14 from tests.support import fail, make_runner, ok, write_config
15
16
17 def test_load_adapter_git_only(repo_root: Path) -> None:
18 write_config(repo_root, "config-git-only.yaml")
19 runner = make_runner(
20 {
21 "git rev-parse": ok("main"),
22 "git status": ok(""),
23 }
24 )
25 adapter = load_adapter(repo_root, runner=runner)
26 assert isinstance(adapter, GitOnlyAdapter)
27 status = adapter.status()
28 assert status.branch == "main"
29
30
31 def test_load_adapter_muse_only(repo_root: Path) -> None:
32 write_config(repo_root, "config-muse-only.yaml")
33 root = str(repo_root.resolve())
34 runner = make_runner(
35 {
36 f"muse -C {root} branch": ok("main"),
37 f"muse -C {root} status": ok(""),
38 }
39 )
40 adapter = load_adapter(repo_root, runner=runner)
41 assert isinstance(adapter, MuseOnlyAdapter)
42
43
44 def test_load_adapter_muse_git_mirror(repo_root: Path) -> None:
45 write_config(repo_root, "config-muse-git-mirror.yaml")
46 root = str(repo_root.resolve())
47 runner = make_runner(
48 {
49 f"muse -C {root} rev-parse --abbrev-ref HEAD": ok("main"),
50 f"muse -C {root} status --porcelain": ok(""),
51 "git rev-parse --abbrev-ref HEAD": ok("main"),
52 "git status --porcelain": ok(""),
53 }
54 )
55 adapter = load_adapter(repo_root, runner=runner)
56 assert isinstance(adapter, MuseGitMirrorAdapter)
57
58
59 def test_load_adapter_missing_config(tmp_path: Path) -> None:
60 with pytest.raises(ConfigError):
61 load_adapter(tmp_path)
62
63
64 def test_end_to_end_read_head_chain_fails_closed(repo_root: Path) -> None:
65 write_config(repo_root, "config-git-only.yaml")
66 runner = make_runner({"git rev-parse": fail("network down")})
67 adapter = load_adapter(repo_root, runner=runner)
68 result = adapter.read_head("origin/main")
69 assert isinstance(result, ReadError)
70 assert result.exit_code == 1