Chat + word-check as their own screens; in-game unread badge (review item 7)
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 8s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Successful in 34s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m6s
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 8s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Successful in 34s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m6s
- Chat and word-check are now routed screens (/game/:id/chat, /game/:id/check) with a header back to the game and no tab-bar, replacing their modals. The soft keyboard just resizes the visible viewport (tracked into --vvh, which the Screen height uses since iOS does not shrink dvh for the keyboard) with the input pinned to the bottom: no modal relayout, no page jump. Supersedes the earlier bottom-sheet Modal attempt. - A new chat message raises an unread badge on the in-game hamburger + the Chat menu row (per game, cleared on opening the chat), mirroring the lobby badge. - TG native back + the header back chevron return chat/check to their game. - Exposes --tg-safe-top (device notch) for the finalised TG-fullscreen header. Tests: e2e for chat/check opening as their own screens + back. Docs: PLAN, FUNCTIONAL(+ru).
This commit is contained in:
@@ -162,6 +162,25 @@ test('a placed tile drags from one board cell to another (Stage 17 relocation)',
|
||||
expect(to).not.toBe(from);
|
||||
});
|
||||
|
||||
test('chat and word-check open as their own screens and back to the game (Stage 17)', async ({ page }) => {
|
||||
await openGame(page);
|
||||
|
||||
await page.locator('.burger').click();
|
||||
await page.getByRole('button', { name: /^Chat$/ }).click();
|
||||
await expect(page).toHaveURL(/\/game\/g1\/chat$/);
|
||||
await expect(page.locator('.pane')).toHaveCount(1); // let the slide transition settle
|
||||
await expect(page.locator('.chat')).toBeVisible();
|
||||
await page.locator('.back').click(); // header back chevron returns to the game
|
||||
await expect(page).toHaveURL(/\/game\/g1$/);
|
||||
await expect(page.locator('.pane')).toHaveCount(1);
|
||||
|
||||
await page.locator('.burger').click();
|
||||
await page.getByRole('button', { name: /Check word/ }).click();
|
||||
await expect(page).toHaveURL(/\/game\/g1\/check$/);
|
||||
await expect(page.locator('.pane')).toHaveCount(1);
|
||||
await expect(page.locator('.check input')).toBeVisible();
|
||||
});
|
||||
|
||||
test('the board-label mode in Settings changes the on-board labels', async ({ page }) => {
|
||||
await openGame(page);
|
||||
// beginner (default) renders split "3× / word" labels.
|
||||
|
||||
Reference in New Issue
Block a user