Add Pico UART client and tests

This commit is contained in:
root
2026-06-03 02:39:30 -06:00
parent 482549b5bb
commit 9189cc7343
2 changed files with 112 additions and 0 deletions
+72
View File
@@ -78,3 +78,75 @@ def test_screen_manager():
screens.previous_screen()
assert screens.current_screen == "battery"
class FakeUart:
def __init__(self):
self.writes = []
self.read_chunks = []
def write(self, data):
self.writes.append(data)
def any(self):
return len(self.read_chunks) > 0
def read(self):
if self.read_chunks:
return self.read_chunks.pop(0)
return b""
def test_uart_client_send_message():
from comms.uart_client import UartClient
fake = FakeUart()
client = UartClient(fake)
client.send_message({"type": "status_request"})
assert fake.writes == [b'{"type":"status_request"}\n']
def test_uart_client_reads_newline_delimited_json():
from comms.uart_client import UartClient
fake = FakeUart()
fake.read_chunks = [
b'{"type":"status_response","timestamp":1}\n',
b'{"type":"relay_response","relay":"fridge","enabled":true}\n',
]
client = UartClient(fake)
messages = client.read_available_messages()
assert messages == [
{"type": "status_response", "timestamp": 1},
{"type": "relay_response", "relay": "fridge", "enabled": True},
]
def test_uart_client_handles_partial_messages():
from comms.uart_client import UartClient
fake = FakeUart()
client = UartClient(fake)
fake.read_chunks = [b'{"type":"status_', b'response"}\n']
messages = client.read_available_messages()
assert messages == [{"type": "status_response"}]
def test_uart_client_handles_invalid_json():
from comms.uart_client import UartClient
fake = FakeUart()
fake.read_chunks = [b'not json\n']
client = UartClient(fake)
messages = client.read_available_messages()
assert messages[0]["type"] == "error"
assert messages[0]["message"] == "invalid_json"