59 lines
3.7 KiB
TypeScript
59 lines
3.7 KiB
TypeScript
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('Продолжить в полном чате');
|
|
});
|
|
}
|