Matchmaking integration harnesses
Two harnesses for the matchmaking client integration (the matchmaking-modal
close-code/reconnect contract from the matchmaking API handoff). Neither runs
as part of npm test — they drive a real headless browser.
Contained — npm run test:matchmaking
Integration test against a fake matchmaking server (fakeServer.mjs, an
in-process ws server speaking the documented protocol). The browser's
WebSocket for /matchmaking/join is redirected to it, so real close-code
semantics apply. Covers:
| Scenario | Expected client behavior |
|---|---|
| join after connect | {type:"join", jwt} sent |
| abrupt drop (deploy/restart, 1006) | reconnect + rejoin (backoff) |
1008 Invalid session |
reconnect + rejoin, fresh token |
match-assignment |
gameId recorded, socket done |
1000 Replaced by newer connection |
message shown, no retry |
| intentional close (user backs out) | no retry, no message |
Prerequisite: npm run dev (app on :9000). No API worker needed.
E2E — npm run test:matchmaking:e2e
Real integration against the API worker on localhost:8787. Two browser
players join the real queue through the real modal; the dev game server's
/matchmaking/checkin long-poll receives the assignment and creates the
game; the test asserts all players get the same gameId, dispatch
join-lobby once the game exists, that the game carries the mode's config,
and that the allowedPublicIds allowlist admits every matched player.
Modes:
- default: 1v1 with two players
MM_MODE=2v2 npm run test:matchmaking:e2e: four players into the 2v2 queue; additionally rides the real flow into the started game and asserts the in-game team split is 2 vs 2 and identical on every client.
Prerequisites:
npm run dev(app + game server on :9000; the game server polls checkin on :8787 out of the box in dev)- the API worker running locally:
wrangler devin the API repo (port 8787)
On failure the harness dumps both players' browser consoles — close code
1008 means the worker rejected the play token; no assignment usually means
the worker rejected the game server's x-api-key checkin.