"""Tests for IPC protocol JSON-line encoding/decoding.""" import io import json from voice_to_notes.ipc.messages import IPCMessage from voice_to_notes.ipc.protocol import read_message, write_message def test_write_message(capsys): msg = IPCMessage(id="req-1", type="pong", payload={"ok": True}) write_message(msg) captured = capsys.readouterr() parsed = json.loads(captured.out.strip()) assert parsed["id"] == "req-1" assert parsed["type"] == "pong" assert parsed["payload"]["ok"] is True def test_read_message(monkeypatch): line = json.dumps({"id": "req-1", "type": "ping", "payload": {}}) + "\n" monkeypatch.setattr("sys.stdin", io.StringIO(line)) msg = read_message() assert msg is not None assert msg.id == "req-1" assert msg.type == "ping" def test_read_message_eof(monkeypatch): monkeypatch.setattr("sys.stdin", io.StringIO("")) msg = read_message() assert msg is None def test_read_message_invalid_json(monkeypatch): monkeypatch.setattr("sys.stdin", io.StringIO("not json\n")) msg = read_message() assert msg is None