c94cd3c3bf
- Grafana: disable Live (GF_LIVE_MAX_CONNECTIONS=0) so its WebSocket no longer trips caddy Basic-Auth and re-prompts; admin console gains a Grafana nav link - deploy: force-recreate config-only services so reseeded Grafana dashboards / Caddyfile are actually picked up (the move-duration panel was invisible because the bind-mount went stale) - rate-limit: raise per-user budget 120/40 -> 300/80; UI skips reloading on the echo of the player's own move (fewer requests, no double-load) - iOS/Telegram reconnect: suppress the connection banner while backgrounded and for a short grace after resume; reconnect silently; wire visibilitychange + pageshow/pagehide + Telegram activated/deactivated (Bot API 8.0) - hint button disabled when 0 hints remain; nudge button shows a disabled state on your own turn - players plaque: invert so the active seat pops (accent chip, raised) and others recede - make-move UX: a direct ✅ commit button (no hold/popover); the Shuffle tab becomes ↩️ Reset while tiles are pending
31 lines
1.4 KiB
TypeScript
31 lines
1.4 KiB
TypeScript
import { expect, test } from './fixtures';
|
|
|
|
// The playable-slice smoke against the mock transport: guest login -> lobby shows the
|
|
// seeded active game -> open it -> the board renders committed tiles -> place a rack
|
|
// tile (tap) and see the score preview.
|
|
test('guest reaches a board and previews a placement', async ({ page }) => {
|
|
await page.goto('/');
|
|
|
|
await page.getByRole('button', { name: /guest/i }).click();
|
|
|
|
await expect(page.getByText('Active games')).toBeVisible();
|
|
const activeRow = page.getByRole('button', { name: /Ann/ });
|
|
await expect(activeRow).toBeVisible();
|
|
await activeRow.click();
|
|
|
|
// Board renders, including a committed tile from the seeded HELLO play.
|
|
await expect(page.locator('[data-cell]').first()).toBeVisible();
|
|
await expect(page.locator('[data-cell] .letter', { hasText: 'H' }).first()).toBeVisible();
|
|
|
|
// Tap a rack tile, then an empty board cell -> a pending tile + score preview.
|
|
const rackTile = page.locator('.rack .tile').first();
|
|
await rackTile.click();
|
|
await page.locator('[data-cell]:not(.filled)').nth(30).click();
|
|
await expect(page.locator('[data-cell].pending')).toHaveCount(1);
|
|
// The score preview appears where the hints count used to be.
|
|
await expect(page.locator('.scores')).toContainText(/\d/);
|
|
|
|
// The contextual MakeMove control (✅) appears once a tile is pending.
|
|
await expect(page.locator('.make')).toBeVisible();
|
|
});
|