{ "baseUrl": "http://localhost:3000", "viewports": { "mobile": {"width": 375, "height": 812}, "tablet": {"width": 768, "height": 1024}, "desktop": {"width": 1440, "height": 900} }, "routes": [ { "path": "/", "name": "landing", "selectors": [ "[data-testid=create-room-cta]", "[data-testid=join-room-cta]", "[data-testid=mode-card-skribbl]", "[data-testid=mode-card-gartic]", "[data-testid=mode-card-color]" ], "actions": [] }, { "path": "/create", "name": "create-room", "selectors": [ "[data-testid=nickname-input]", "[data-testid=mode-skribbl]", "[data-testid=mode-gartic]", "[data-testid=mode-color]", "[data-testid=create-submit]" ], "actions": [ {"type": "fill", "selector": "[data-testid=nickname-input]", "value": "TestUser"}, {"type": "click", "selector": "[data-testid=mode-skribbl]"} ] }, { "path": "/join", "name": "join-room", "selectors": [ "[data-testid=room-code-input]", "[data-testid=nickname-input]", "[data-testid=join-submit]" ], "actions": [ {"type": "fill", "selector": "[data-testid=room-code-input]", "value": "ABC123"}, {"type": "fill", "selector": "[data-testid=nickname-input]", "value": "Tester"} ] }, { "path": "/room/TESTRM", "name": "lobby", "selectors": [ "[data-testid=room-pill]", "[data-testid=panel-players]", "[data-testid=room-code]" ], "actions": [], "note": "Will redirect to /join?code=TESTRM unless a session exists. Test with a real created room." }, { "path": "/room/TESTRM/play", "name": "play", "selectors": [ "[data-testid=room-pill]" ], "actions": [], "note": "Requires an active game session." }, { "path": "/room/TESTRM/results", "name": "results", "selectors": [ "[data-testid=scoreboard-final]" ], "actions": [], "note": "Visible after a Skribbl/Color game finishes." }, { "path": "/api/health", "name": "health-api", "selectors": [], "actions": [], "note": "GET expects {status:'ok', uptime:N}" } ], "apiTests": [ {"method": "GET", "path": "/api/health", "expectStatus": 200, "expectJsonContains": {"status": "ok"}}, {"method": "GET", "path": "/api/room/NOPE/exists", "expectStatus": 200, "expectJsonContains": {"exists": false}} ] }