from tamq.service import Service from tamq.store import Store class FakeControl: instances = [] def __init__(self, session): self.session = session self.injected = [] self.__class__.instances.append(self) def start(self): return None def session_exists(self, expected_pid=None): return True def inject(self, window, text): self.injected.append((window, text)) def close(self): return None def test_service_delivery_injects_pending_messages(tmp_path, monkeypatch): store = Store(tmp_path / "queue.sqlite3") store.register_endpoint("tmux-amq-9-boot", 9, "tamq", ["repo-b"], "pane") message_id = store.add("repo-a", "repo-b", "continue") monkeypatch.setattr("tamq.service.ControlModeClient", FakeControl) Service(store=store)._deliver_once() assert FakeControl.instances[-1].injected == [("tamq:repo-b", "#repo-a: continue")] assert store.list()[0]["message_id"] == message_id assert store.list()[0]["state"] == "injected" def test_service_never_injects_manual_endpoint_messages(tmp_path, monkeypatch): store = Store(tmp_path / "queue.sqlite3") store.register_endpoint("tmux-amq-9-boot", 9, "tamq", ["repo-b"], "manual") store.add("repo-a", "repo-b", "continue") monkeypatch.setattr("tamq.service.ControlModeClient", FakeControl) Service(store=store)._deliver_once() assert FakeControl.instances[-1].injected == [] assert store.list()[0]["state"] == "pending" def test_service_disconnects_disappeared_tmux_endpoint(tmp_path, monkeypatch): store = Store(tmp_path / "queue.sqlite3") store.register_endpoint("tmux-amq-9-boot", 9, "tamq", ["repo-b"]) class MissingControl(FakeControl): def session_exists(self, expected_pid=None): assert expected_pid == 9 return False monkeypatch.setattr("tamq.service.ControlModeClient", MissingControl) Service(store=store)._deliver_once() assert store.endpoints() == []