HH/e2e/tests/security/session-auth.spec.ts
2026-04-08 17:13:35 +03:00

76 lines
2.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { RoleAuthHelper } from '../../helpers/helpers';
test.describe('Session Auth Edge Cases', () => {
test('expired session redirects to login', async ({ browser }) => {
const context = await browser.newContext();
const page = await context.newPage();
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.goto('/');
await page.waitForLoadState('domcontentloaded');
expect(await page.url()).not.toContain('/accounts/login/');
await context.clearCookies();
await page.goto('/complaints/');
await page.waitForLoadState('domcontentloaded');
expect(await page.url()).toContain('/accounts/login/');
await context.close();
});
test('simultaneous sessions both work', async ({ browser }) => {
const ctx1 = await browser.newContext();
const ctx2 = await browser.newContext();
const page1 = await ctx1.newPage();
const auth1 = new RoleAuthHelper(page1);
await auth1.login('hospital_admin');
await page1.goto('/complaints/');
await page1.waitForLoadState('domcontentloaded');
expect(await page1.textContent('body')).toBeTruthy();
await ctx1.close();
await ctx2.close();
});
test('deactivated user mid-session shows error on next login', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('staff');
await page.goto('/');
await page.waitForLoadState('domcontentloaded');
expect(await page.url()).not.toContain('/accounts/login/');
await auth.logout();
await page.waitForLoadState('domcontentloaded');
await auth.login('staff');
expect(await page.url()).not.toContain('/accounts/login/');
});
test('logout clears session and redirects', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.goto('/');
await page.waitForLoadState('domcontentloaded');
expect(await page.url()).not.toContain('/accounts/login/');
await auth.logout();
expect(await page.url()).toContain('/accounts/login/');
});
test('protected page without session redirects to login', async ({ page }) => {
await page.goto('/complaints/');
await page.waitForLoadState('domcontentloaded');
expect(await page.url()).toContain('/accounts/login/');
});
});