This commit is contained in:
gili8420 2026-08-14 00:01:49 +09:00
commit b43955e0d9
162 changed files with 15425 additions and 0 deletions

54
tests/e2e/admin.spec.ts Normal file
View file

@ -0,0 +1,54 @@
import { test, expect, type Page } from '@playwright/test';
async function login(page: Page, user: string, pass: string) {
await page.goto('/login/');
await page.fill('#lg-username', user);
await page.fill('#lg-password', pass);
await page.click('button[type=submit]');
await expect(page.getByTestId('nav-menu')).toBeVisible();
}
test('a non-staff user cannot reach the admin panel', async ({ page }) => {
await login(page, 'demo', 'demo');
// The menu entry is staff-only...
await page.getByTestId('nav-menu').click();
await expect(page.getByTestId('nav-admin')).toHaveCount(0);
// ...and visiting the route directly redirects away from it.
await page.goto('/admin/');
await expect(page).toHaveURL(/\/app/);
await expect(page.getByTestId('admin-table')).toHaveCount(0);
});
test('staff can list, search and deactivate a user', async ({ page }) => {
await login(page, 'admin', 'admin');
await page.getByTestId('nav-menu').click();
await page.getByTestId('nav-admin').click();
await expect(page.getByTestId('admin-table')).toBeVisible();
// Both seeded users are listed.
await expect(page.getByTestId('admin-row')).toHaveCount(2);
// Search narrows the list.
await page.getByTestId('admin-search').fill('demo');
await expect(page.getByTestId('admin-row')).toHaveCount(1);
// Deactivation asks for an inline confirm first.
await page.getByTestId('admin-deactivate').click();
await page.getByTestId('admin-confirm-deactivate').click();
await expect(page.getByTestId('admin-state')).toContainText(/отключён|disabled/i);
// And it can be reversed.
await page.getByTestId('admin-activate').click();
await expect(page.getByTestId('admin-state')).toContainText(/активен|active/i);
});
test('staff cannot deactivate their own account', async ({ page }) => {
await login(page, 'admin', 'admin');
await page.goto('/admin/');
await page.getByTestId('admin-search').fill('admin');
await expect(page.getByTestId('admin-row')).toHaveCount(1);
// The row is marked as "you" and offers no deactivate control.
await expect(page.getByTestId('admin-row')).toContainText(/вы|you/i);
await expect(page.getByTestId('admin-deactivate')).toHaveCount(0);
});