fix(opencode): Mac review of the Linux fixes - a clean db has no sidecars on Mac either, the placeholder needs its example, a home install must run, status and reconcile read the db read-only (Issue #60, PR #62)
- tests: macOS SQLite keeps -wal/-shm after the last close (persistent WAL); the `clean` state removes them after the checkpointing close - the 2.x placeholder pattern requires the quoted example, so a typed `Ask anything…` is read as a draft - auth_ok takes ~/.opencode/bin/opencode only as an executable file - status.sh and reconcile.sh (drift C) open opencode.db with _ro_connect Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
6a4e385a78
commit
6a37c0019b
4 files changed
+40
-7
No files matched your search
@@ -81,6 +81,8 @@ def test_the_narrow_screen_stops_at_its_status_line_and_reads_ready():
|
||||
'Ask anything… "x" and fix it',
|
||||
"Ask anything about the build",
|
||||
'Ask anything… "a"b',
|
||||
"Ask anything…",
|
||||
"Ask anything...",
|
||||
])
|
||||
def test_typed_text_is_read_as_typed(name, typed):
|
||||
text, n = PLACEHOLDER_LINE.subn(lambda m: m.group(1) + typed, _pane(name), count=1)
|
||||
@@ -153,6 +155,11 @@ def wal_home(tmp_path, monkeypatch):
|
||||
def make(state):
|
||||
if state == "clean":
|
||||
_wal_writer(db, ws).close()
|
||||
# macOS SQLite keeps both sidecars after the last close (persistent
|
||||
# WAL); the close checkpointed them, so the Linux state is the same rows.
|
||||
for suffix in ("-wal", "-shm"):
|
||||
if os.path.exists(str(db) + suffix):
|
||||
os.remove(str(db) + suffix)
|
||||
elif state in ("leftover", "walonly"):
|
||||
src = tmp_path / "src" / "opencode.db"
|
||||
src.parent.mkdir()
|
||||
@@ -184,6 +191,16 @@ def test_a_query_reads_right_and_leaves_the_sidecars_alone(wal_home, state, list
|
||||
assert sorted(os.listdir(os.path.dirname(db))) == listing
|
||||
|
||||
|
||||
@pytest.mark.parametrize("script,count", [
|
||||
("multi-agent-mux-status/scripts/status.sh", 2),
|
||||
("multi-agent-mux-monitor/scripts/reconcile.sh", 1),
|
||||
])
|
||||
def test_status_and_reconcile_open_the_database_read_only(script, count):
|
||||
text = (SKILLS / script).read_text()
|
||||
assert text.count("_ro_connect(odb)") == count
|
||||
assert "sqlite3.connect(odb)" not in text
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 6. `debug paths` once per (binary, HOME, XDG_DATA_HOME)
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -314,6 +331,16 @@ def test_keys_and_auth_json_without_the_binary_are_not_enough(bare_home, monkeyp
|
||||
assert opencode.auth_ok() is False
|
||||
|
||||
|
||||
def test_a_home_install_that_cannot_run_is_not_enough(bare_home):
|
||||
local = bare_home / "home" / ".opencode" / "bin" / "opencode"
|
||||
_executable(local).chmod(0o644)
|
||||
assert get_adapter("opencode").auth_ok() is False
|
||||
local.unlink()
|
||||
local.mkdir()
|
||||
local.chmod(0o755)
|
||||
assert get_adapter("opencode").auth_ok() is False
|
||||
|
||||
|
||||
@pytest.mark.parametrize("where", ["path", "home"])
|
||||
def test_the_binary_alone_is_enough(bare_home, monkeypatch, where):
|
||||
if where == "path":
|
||||
|
||||
Reference in new issue
Block a user