69 lines
3.2 KiB
TypeScript
69 lines
3.2 KiB
TypeScript
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();
|
|
});
|
|
});
|