nxtgauge-admin-solid/tests/e2e/admin-auth.spec.ts

88 lines
2.6 KiB
TypeScript

import { expect, test } from '@playwright/test';
test.describe('Admin Auth Split', () => {
test('blocks external identities on internal management login', async ({ page }) => {
await page.route('**/api/auth/login', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({
success: true,
audience: 'public',
user: {
audience: 'public',
user_type: 'external_user',
},
}),
});
});
await page.goto('/login');
await expect(page.getByRole('heading', { name: /sign in/i })).toBeVisible();
await page.getByPlaceholder('Enter your email').fill('external.user@example.com');
await page.getByPlaceholder('Enter your password').fill('StrongPass123!');
await page.getByRole('button', { name: /sign in/i }).click();
await expect(page.getByText('External users cannot use this portal.')).toBeVisible();
await expect(page).toHaveURL(/\/login/);
});
test('allows internal identities and lands on admin shell', async ({ page }) => {
await page.context().addCookies([
{
name: 'nxtgauge_admin_session',
value: 'internal_management',
domain: '127.0.0.1',
path: '/',
},
]);
await page.route('**/api/auth/session**', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({
id: 'admin-1',
audience: 'admin',
full_name: 'Admin User',
active_role: 'SUPER_ADMIN',
}),
});
});
await page.route('**/api/runtime-config**', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ active_role: 'SUPER_ADMIN', allowed_modules: [] }),
});
});
await page.goto('/admin');
await expect(page).toHaveURL(/\/admin/);
});
test('keeps admin shell when cookie session exists even if session payload is external', async ({ page }) => {
await page.context().addCookies([
{
name: 'nxtgauge_admin_session',
value: 'internal_management',
domain: '127.0.0.1',
path: '/',
},
]);
await page.route('**/api/auth/session**', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({
audience: 'public',
user_type: 'external_user',
}),
});
});
await page.goto('/admin');
await expect(page).toHaveURL(/\/admin/);
});
});