import { test, expect } from '@playwright/test'; import { seedAuthenticatedSession } from '../helpers/session'; import { loginAsE2EAdmin } from '../helpers/auth'; import { installAdminApiMocks } from '../mocks/adminApi'; test.describe('shell / layout (mock)', () => { test('после логина видны sidebar, nav dashboard и user menu', async ({ page }) => { await installAdminApiMocks(page); await loginAsE2EAdmin(page); await expect(page.getByTestId('layout-shell')).toBeVisible(); await expect(page.getByTestId('layout-sidebar')).toBeVisible(); await expect(page.getByTestId('nav-dashboard')).toBeVisible(); await expect(page.getByTestId('nav-users')).toBeVisible(); await expect(page.getByTestId('nav-admins')).toBeVisible(); await page.getByTestId('menu-user').click(); await expect(page.getByTestId('menu-user-content')).toBeVisible(); await expect(page.getByTestId('menu-profile')).toBeVisible(); await expect(page.getByTestId('btn-logout')).toBeVisible(); }); test('command palette открывается и навигирует', async ({ page }) => { await seedAuthenticatedSession(page); await page.goto('/dashboard'); await expect(page.getByTestId('layout-shell')).toBeVisible(); await page.getByTestId('btn-open-palette').click(); await expect(page.getByTestId('command-palette')).toBeVisible(); await page.getByTestId('palette-input').fill('Пользователи'); await page.keyboard.press('Enter'); await expect(page).toHaveURL(/\/users/); }); test('logout возвращает на login', async ({ page }) => { await seedAuthenticatedSession(page); await page.goto('/dashboard'); await page.getByTestId('menu-user').click(); await page.getByTestId('btn-logout').click(); await expect(page).toHaveURL(/\/login/); await expect(page.getByTestId('page-login')).toBeVisible(); }); }); test.describe('shell / roles (mock)', () => { test('moderator: нет nav users, admins запрещён', async ({ page }) => { await seedAuthenticatedSession(page, { role: 'moderator', nickname: 'Mod' }); await page.goto('/dashboard'); await expect(page.getByTestId('nav-inbox-reports')).toBeVisible(); await expect(page.getByTestId('nav-users')).toHaveCount(0); await expect(page.getByTestId('nav-admins')).toHaveCount(0); await page.goto('/admins'); await expect(page.getByTestId('page-forbidden')).toBeVisible(); await page.getByTestId('btn-to-dashboard').click(); await expect(page).toHaveURL(/\/dashboard/); }); test('support: tickets inbox есть, reports inbox нет', async ({ page }) => { await seedAuthenticatedSession(page, { role: 'support', nickname: 'Support' }); await page.goto('/dashboard'); await expect(page.getByTestId('nav-inbox-tickets')).toBeVisible(); await expect(page.getByTestId('nav-inbox-reports')).toHaveCount(0); await page.goto('/inbox/reports'); await expect(page.getByTestId('page-forbidden')).toBeVisible(); }); });