HH/e2e/tests/workflows/inquiry-scenarios.spec.ts
ismail c5f76b3855
Some checks are pending
Build and Push Docker Image / build (push) Waiting to run
updates
2026-05-11 14:45:30 +03:00

281 lines
9.9 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { RoleAuthHelper } from '../../helpers/helpers';
import { ApiHelper, DEPT_ID, sessionPost } from '../../helpers/api-helper';
test.describe('Inquiry Scenario Tests', () => {
test.describe('Scenario A: Raised to Department (Outgoing)', () => {
test.describe.configure({ mode: 'serial' });
let inquiryId: string;
test('create outgoing inquiry and activate', async ({ page }) => {
const api = new ApiHelper(page);
await api.authenticate('px_admin');
const { response, body } = await api.createInquiry({
subject: `E2E Dept Inquiry ${Date.now()}`,
message: 'E2E scenario test - raised to department flow. Please ignore.',
is_straightforward: false,
is_outgoing: true,
});
expect(response.status()).toBe(201);
inquiryId = body.id;
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const activateResp = await sessionPost(page, `/inquiries/${inquiryId}/activate/`, {});
if (![200, 302].includes(activateResp.status())) {
console.log(`Activate failed with status: ${activateResp.status}, ok: ${activateResp.ok}`);
const bodyText = await page.textContent('body');
console.log(`Page snippet: ${bodyText?.substring(0, 300)}`);
}
expect([200, 302].includes(activateResp.status())).toBeTruthy();
await page.waitForTimeout(800);
await page.reload();
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(1500);
});
test('transfer to department', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const transferResp = await sessionPost(page, `/inquiries/${inquiryId}/transfer-to-department/`, {
department_id: DEPT_ID,
note_en: 'E2E test - transferring to department for response',
recipient_type: 'staff',
});
expect([200, 302].includes(transferResp.status())).toBeTruthy();
await page.waitForTimeout(800);
await page.reload();
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(1500);
});
test('submit department response and review', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const deptResp = await sessionPost(page, `/inquiries/${inquiryId}/department-response/`, {
response_en: 'E2E test - department has investigated and provided response',
});
expect([200, 302].includes(deptResp.status())).toBeTruthy();
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const reviewResp = await sessionPost(page, `/inquiries/${inquiryId}/review-dept-response/`, {
acceptance_status: 'acceptable',
acceptance_notes: 'E2E test - department response is acceptable',
});
expect([200, 302].includes(reviewResp.status())).toBeTruthy();
await page.waitForTimeout(800);
await page.reload();
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(1500);
});
test('respond to inquiry and verify resolution', async ({ page }) => {
const api = new ApiHelper(page);
await api.authenticate('px_admin');
const respondResp = await api.respondToInquiry(
inquiryId,
'E2E test - inquiry resolved based on department response. Thank you for your patience.'
);
expect([200, 201, 204].includes(respondResp.status())).toBeTruthy();
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const pageText = await page.textContent('body');
expect(pageText).toMatch(/resolved|Resolved/i);
await page.waitForTimeout(800);
});
test('verify transfer count and department info in detail', async ({ page }) => {
if (!inquiryId) { test.skip(); return; }
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const pageText = (await page.textContent('body')) || '';
expect(pageText).toContain('INQ-');
await page.waitForTimeout(800);
});
});
test.describe('Scenario B: Handled Immediately (Straightforward)', () => {
test.describe.configure({ mode: 'serial' });
let inquiryId: string;
test('create straightforward inquiry and resolve directly', async ({ page }) => {
const api = new ApiHelper(page);
await api.authenticate('px_admin');
const { response, body } = await api.createInquiry({
subject: `E2E Direct Inquiry ${Date.now()}`,
message: 'E2E scenario test - handled immediately. Please ignore.',
is_straightforward: true,
});
expect(response.status()).toBe(201);
inquiryId = body.id;
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
await sessionPost(page, `/inquiries/${inquiryId}/activate/`, {});
await page.waitForTimeout(800);
const respondResp = await api.respondToInquiry(
inquiryId,
'E2E test - direct response provided, no department coordination needed.'
);
expect([200, 201, 204].includes(respondResp.status())).toBeTruthy();
await page.reload();
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(1500);
});
test('verify resolved status in admin UI', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const pageText = await page.textContent('body');
expect(pageText).toMatch(/resolved|Resolved/i);
await page.waitForTimeout(800);
});
test('verify no department transfer shown', async ({ page }) => {
if (!inquiryId) { test.skip(); return; }
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const pageText = (await page.textContent('body')) || '';
expect(pageText).toMatch(/resolved|Resolved/i);
await page.waitForTimeout(800);
});
});
test.describe('Scenario C: Let Expire (SLA Breach)', () => {
test.describe.configure({ mode: 'serial' });
let inquiryId: string;
test('create inquiry, activate and backdate SLA', async ({ page }) => {
const api = new ApiHelper(page);
await api.authenticate('px_admin');
const { response, body } = await api.createInquiry({
subject: `E2E Expire Inquiry ${Date.now()}`,
message: 'E2E scenario test - SLA expiry flow. Please ignore.',
});
expect(response.status()).toBe(201);
inquiryId = body.id;
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
await sessionPost(page, `/inquiries/${inquiryId}/activate/`, {});
await page.waitForTimeout(800);
const patchResp = await api.setDueAtPast('inquiries', inquiryId, 7);
expect([200, 204].includes(patchResp.status())).toBeTruthy();
});
test('verify overdue indicator in inquiry list', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto('/inquiries/');
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const tableText = await page.locator('table').textContent();
expect(tableText).toBeTruthy();
await page.waitForTimeout(800);
});
test('verify overdue indicator in inquiry detail', async ({ page }) => {
const auth = new RoleAuthHelper(page);
await auth.login('hospital_admin');
await page.waitForTimeout(800);
await page.goto(`/inquiries/${inquiryId}/`);
await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2500);
const pageText = await page.textContent('body');
expect(pageText).toContain('INQ-');
await page.waitForTimeout(800);
});
test('inquiry can still be responded to after SLA breach', async ({ page }) => {
const api = new ApiHelper(page);
await api.authenticate('px_admin');
const respondResp = await api.respondToInquiry(
inquiryId,
'E2E test - response provided after SLA breach'
);
expect([200, 201, 204].includes(respondResp.status())).toBeTruthy();
});
});
});