import { expect, test } from '@playwright/test'; for (const width of [1280, 1920]) { test(`mini chat keeps the page and draft at ${width}px`, async ({ page }, info) => { await page.setViewportSize({ width, height: 900 }); await page.addInitScript(() => localStorage.setItem('pipu.locale', 'ru')); await page.goto('/login'); await page.getByLabel('Логин', { exact: true }).fill('alice'); await page.getByRole('textbox', { name: 'Пароль', exact: true }).fill('alice-password'); await page.getByRole('button', { name: 'Войти', exact: true }).click(); if (width === 1920) { await page.getByRole('button', { name: 'Меню профиля', exact: true }).click(); await page.getByRole('menuitem', { name: 'Настройки', exact: true }).click(); await page.getByRole('button', { name: 'Остров', exact: true }).click(); await expect(page.getByRole('button', { name: 'Остров', exact: true })).toHaveAttribute('aria-pressed', 'true'); await page.getByRole('link', { name: 'Главная', exact: true }).first().click(); } const dock = page.getByRole('complementary', { name: 'Друзья и чат', exact: true }); const toggle = dock.getByRole('button', { name: 'Друзья и чат', exact: true }); await toggle.click(); const panel = dock.getByRole('region', { name: 'Друзья и общение', exact: true }); await panel.getByRole('textbox', { name: 'Найти диалог', exact: true }).fill('moderator'); await panel.getByRole('button', { name: /moderator/ }).click(); const composer = panel.getByRole('textbox', { name: 'Сообщение', exact: true }); await composer.fill('Черновик из мини-чата'); await expect(page).toHaveURL(/\/$/); await panel.getByRole('button', { name: 'Свернуть чат', exact: true }).click(); await expect(panel).toBeHidden(); await expect(toggle).toBeFocused(); await page.getByRole('link', { name: 'История', exact: true }).first().click(); await toggle.click(); await expect(composer).toHaveValue('Черновик из мини-чата'); await panel.getByRole('button', { name: 'Отправить', exact: true }).click(); await expect(panel.getByText('Черновик из мини-чата', { exact: true })).toBeVisible(); await expect(composer).toBeEmpty(); await expect(page).toHaveURL(/\/collection\/history$/); const panelBox = (await panel.boundingBox())!; const playerBox = (await page.getByRole('contentinfo', { name: 'Плеер', exact: true }).boundingBox())!; expect(panelBox.width).toBeLessThanOrEqual(600); expect(panelBox.x).toBeGreaterThanOrEqual(width - 640); expect(panelBox.y).toBeGreaterThanOrEqual(60); expect(panelBox.y + panelBox.height).toBeLessThan(playerBox.y); await page.screenshot({ path: info.outputPath('mini-chat.png'), fullPage: true }); await composer.fill('Продолжить в полном чате'); await composer.press('Escape'); await expect(panel).toBeHidden(); await toggle.click(); await expect(composer).toHaveValue('Продолжить в полном чате'); await page.setViewportSize({ width: 800, height: 900 }); await expect(dock).toHaveCount(0); await page.setViewportSize({ width, height: 900 }); await expect(composer).toHaveValue('Продолжить в полном чате'); await panel.getByRole('button', { name: 'Открыть раздел', exact: true }).click(); await expect(page).toHaveURL(/\/friends\?/); await expect(dock).toHaveCount(0); await expect(page.getByRole('textbox', { name: 'Сообщение', exact: true })).toHaveValue('Продолжить в полном чате'); }); }