88 lines
2.6 KiB
TypeScript
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/);
|
|
});
|
|
});
|