feat(admin): E2E content/system mock-сьюты, row testids, IFT smoke. Refs EventHub/EventHubFrontAdmin#33 #37 #38 #39
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { seedAuthenticatedSession } from '../helpers/session';
|
||||
|
||||
test.describe('content explore (mock)', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await seedAuthenticatedSession(page);
|
||||
});
|
||||
|
||||
test('users: список, поиск, detail', async ({ page }) => {
|
||||
await page.goto('/users');
|
||||
await expect(page.getByTestId('page-users')).toBeVisible();
|
||||
await expect(page.getByTestId('row-user-e2e-1')).toBeVisible();
|
||||
await page.getByTestId('filter-users-search-input').fill('Alice');
|
||||
await page.getByTestId('filter-users-search').locator('button[type="submit"]').click();
|
||||
await expect(page.getByTestId('row-user-e2e-1')).toBeVisible();
|
||||
await page.goto('/users/user-e2e-1');
|
||||
await expect(page.getByTestId('page-user-detail')).toBeVisible();
|
||||
});
|
||||
|
||||
test('calendars: список и detail', async ({ page }) => {
|
||||
await page.goto('/calendars');
|
||||
await expect(page.getByTestId('page-calendars')).toBeVisible();
|
||||
await expect(page.getByTestId('row-cal-e2e-1')).toBeVisible();
|
||||
await page.goto('/calendars/cal-e2e-1');
|
||||
await expect(page.getByTestId('page-calendar-detail')).toBeVisible();
|
||||
});
|
||||
|
||||
test('events: список и detail', async ({ page }) => {
|
||||
await page.goto('/events');
|
||||
await expect(page.getByTestId('page-events')).toBeVisible();
|
||||
await expect(page.getByTestId('row-evt-e2e-1')).toBeVisible();
|
||||
await page.goto('/events/evt-e2e-1');
|
||||
await expect(page.getByTestId('page-event-detail')).toBeVisible();
|
||||
});
|
||||
|
||||
test('subscriptions: список', async ({ page }) => {
|
||||
await page.goto('/subscriptions');
|
||||
await expect(page.getByTestId('page-subscriptions')).toBeVisible();
|
||||
await expect(page.getByTestId('row-sub-e2e-1')).toBeVisible();
|
||||
});
|
||||
|
||||
test('banned-words: список и add', async ({ page }) => {
|
||||
await page.goto('/banned-words');
|
||||
await expect(page.getByTestId('page-banned-words')).toBeVisible();
|
||||
await expect(page.getByTestId('row-spamword')).toBeVisible();
|
||||
await page.getByTestId('input-banned-word').fill('newbad');
|
||||
await page.getByTestId('btn-add-banned-word').click();
|
||||
await expect(page.getByTestId('row-newbad')).toBeVisible();
|
||||
});
|
||||
});
|
||||
@@ -1,10 +1,20 @@
|
||||
import { test } from '@playwright/test';
|
||||
import { test, expect } from '@playwright/test';
|
||||
|
||||
/** IFT smoke project placeholder — filled in phase 6. */
|
||||
/**
|
||||
* IFT smoke — заполняется секретами E2E_ADMIN_EMAIL / E2E_ADMIN_PASSWORD.
|
||||
* Запуск: `npm run test:e2e:ift` (без моков).
|
||||
*/
|
||||
test.describe('IFT smoke', () => {
|
||||
test.skip(!process.env.E2E_ADMIN_EMAIL, 'Set E2E_ADMIN_EMAIL / E2E_ADMIN_PASSWORD for IFT');
|
||||
test.skip(!process.env.E2E_ADMIN_EMAIL || !process.env.E2E_ADMIN_PASSWORD, 'E2E_ADMIN_* secrets required');
|
||||
|
||||
test('placeholder', async () => {
|
||||
// Implemented in E2E phase 6
|
||||
test('login → dashboard → logout', async ({ page }) => {
|
||||
await page.goto('/login');
|
||||
await page.getByLabel(/email/i).fill(process.env.E2E_ADMIN_EMAIL!);
|
||||
await page.getByLabel(/пароль|password/i).fill(process.env.E2E_ADMIN_PASSWORD!);
|
||||
await page.getByTestId('btn-login').click();
|
||||
await expect(page.getByTestId('layout-shell')).toBeVisible({ timeout: 30_000 });
|
||||
await page.getByTestId('menu-user').click();
|
||||
await page.getByTestId('btn-logout').click();
|
||||
await expect(page.getByTestId('page-login')).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { seedAuthenticatedSession } from '../helpers/session';
|
||||
|
||||
test.describe('system / overview (mock)', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await seedAuthenticatedSession(page);
|
||||
});
|
||||
|
||||
test('admins: список, create dialog, detail', async ({ page }) => {
|
||||
await page.goto('/admins');
|
||||
await expect(page.getByTestId('page-admins')).toBeVisible();
|
||||
await expect(page.getByTestId('row-admin-e2e-2')).toBeVisible();
|
||||
await page.getByTestId('btn-create-admin').click();
|
||||
await expect(page.getByTestId('dialog-create-admin')).toBeVisible();
|
||||
await page.goto('/admins/admin-e2e-2');
|
||||
await expect(page.getByTestId('page-admin-detail')).toBeVisible();
|
||||
await expect(page.getByTestId('btn-edit-admin')).toBeVisible();
|
||||
});
|
||||
|
||||
test('audit: страница и фильтры', async ({ page }) => {
|
||||
await page.goto('/audit');
|
||||
await expect(page.getByTestId('page-audit')).toBeVisible();
|
||||
await expect(page.getByTestId('filter-audit')).toBeVisible();
|
||||
await expect(page.getByTestId('row-audit-e2e-1')).toBeVisible();
|
||||
});
|
||||
|
||||
test('monitoring: страница и range', async ({ page }) => {
|
||||
await page.goto('/monitoring');
|
||||
await expect(page.getByTestId('page-monitoring')).toBeVisible();
|
||||
await page.getByTestId('filter-monitoring-range-30').click();
|
||||
await expect(page.getByTestId('filter-monitoring-range-30')).toBeVisible();
|
||||
});
|
||||
|
||||
test('profile: view и edit', async ({ page }) => {
|
||||
await page.goto('/profile');
|
||||
await expect(page.getByTestId('page-profile')).toBeVisible();
|
||||
await page.getByTestId('btn-edit-profile').click();
|
||||
await expect(page.getByTestId('btn-save-profile')).toBeVisible();
|
||||
await page.getByTestId('btn-cancel-profile').click();
|
||||
await expect(page.getByTestId('btn-edit-profile')).toBeVisible();
|
||||
});
|
||||
|
||||
test('dashboard остаётся доступен', async ({ page }) => {
|
||||
await page.goto('/dashboard');
|
||||
await expect(page.getByTestId('page-dashboard')).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('i18n (mock)', () => {
|
||||
test('переключение языка через меню', async ({ page }) => {
|
||||
await seedAuthenticatedSession(page);
|
||||
await page.goto('/dashboard');
|
||||
await page.getByTestId('menu-user').click();
|
||||
await page.getByTestId('lang-en').click();
|
||||
// profile language mutation returns user with language=en; menu stays open or reopens
|
||||
await page.getByTestId('menu-user').click().catch(() => undefined);
|
||||
await expect(page.getByTestId('lang-en')).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user