76 lines
2.3 KiB
TypeScript
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/');
|
|
});
|
|
});
|