Parent
#6
What to build
Promote scripts/smoke.py into a proper pytest-asyncio test suite under tests/. The suite tests the daemon's observable behaviour at the WebSocket boundary — a fake WS client connects, sends messages, and asserts daemon responses and side effects via fake sinks.
Add FakePointerSink (records emitted pointer/key events), extend the existing FakeScrollSink, and add FakeFocusBackend (an async iterator that tests drive by pushing AppInfo values). All subsequent tickets add their assertions here.
Acceptance criteria
Blocked by
None — can start immediately.
Parent
#6
What to build
Promote
scripts/smoke.pyinto a properpytest-asynciotest suite undertests/. The suite tests the daemon's observable behaviour at the WebSocket boundary — a fake WS client connects, sends messages, and asserts daemon responses and side effects via fake sinks.Add
FakePointerSink(records emitted pointer/key events), extend the existingFakeScrollSink, and addFakeFocusBackend(an async iterator that tests drive by pushingAppInfovalues). All subsequent tickets add their assertions here.Acceptance criteria
tests/directory exists withpytest-asyncioconfiguredFakePointerSink,FakeScrollSink, andFakeFocusBackendare importable test fixturesjust test(or equivalent) runs the suite and exits greenBlocked by
None — can start immediately.