test_adapter_factory.py
file-level
1
files
1
commits
0
hotspots
0
🧊 dead
0
💥 blast risk
| 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 |