Files
voice-to-notes/python/tests/test_protocol.py
T

46 lines
1.3 KiB
Python
Raw Normal View History

"""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
import voice_to_notes.ipc.protocol as protocol
def test_write_message():
buf = io.StringIO()
# Temporarily replace the IPC output stream
old_out = protocol._ipc_out
protocol._ipc_out = buf
try:
msg = IPCMessage(id="req-1", type="pong", payload={"ok": True})
write_message(msg)
parsed = json.loads(buf.getvalue().strip())
assert parsed["id"] == "req-1"
assert parsed["type"] == "pong"
assert parsed["payload"]["ok"] is True
finally:
protocol._ipc_out = old_out
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