149 lines
5.4 KiB
TypeScript
149 lines
5.4 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { RoleAuthHelper } from '../../helpers/helpers';
|
|
import { ApiHelper, sessionPost } from '../../helpers/api-helper';
|
|
|
|
test.describe('Reopen/Reassign Tests', () => {
|
|
test.setTimeout(120000);
|
|
|
|
test('reopen closed complaint', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
const { body: cb } = await api.createComplaint();
|
|
const complaintId = cb?.id;
|
|
if (!complaintId) { test.skip(); return; }
|
|
|
|
await api.activateComplaint(complaintId);
|
|
await api.changeComplaintStatus(complaintId, 'resolved', {
|
|
resolution: 'E2E test - initial resolution',
|
|
resolution_category: 'full_action_taken',
|
|
});
|
|
await api.changeComplaintStatus(complaintId, 'closed');
|
|
|
|
const auth = new RoleAuthHelper(page);
|
|
await auth.login('hospital_admin');
|
|
await page.waitForTimeout(800);
|
|
|
|
await page.goto(`/complaints/${complaintId}/`);
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const reopenResp = await sessionPost(page, `/complaints/${complaintId}/reopen/`, {
|
|
note: 'E2E test - reopening complaint for further action',
|
|
});
|
|
expect([200, 302].includes(reopenResp.status())).toBeTruthy();
|
|
await page.waitForTimeout(800);
|
|
|
|
await page.goto(`/complaints/${complaintId}/`);
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const pageText = (await page.textContent('body')) || '';
|
|
expect(pageText).toMatch(/in_progress|reopened|Reopened/i);
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('reassign complaint to another user', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
const { body: cb } = await api.createComplaint();
|
|
const complaintId = cb?.id;
|
|
if (!complaintId) { test.skip(); return; }
|
|
await api.activateComplaint(complaintId);
|
|
|
|
const auth = new RoleAuthHelper(page);
|
|
await auth.login('hospital_admin');
|
|
await page.waitForTimeout(800);
|
|
|
|
await page.goto(`/complaints/${complaintId}/`);
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const assignResp = await sessionPost(page, `/complaints/${complaintId}/assign/`, {
|
|
user_id: '8bc6170f-b64b-4946-9e2f-5a9b93006cea',
|
|
note: 'E2E test - reassigning complaint',
|
|
});
|
|
expect([200, 302].includes(assignResp.status())).toBeTruthy();
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('reopen resolved inquiry', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
const { body: ib } = await api.createInquiry();
|
|
const inquiryId = ib?.id;
|
|
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);
|
|
|
|
await sessionPost(page, `/inquiries/${inquiryId}/activate/`, {});
|
|
await page.waitForTimeout(800);
|
|
|
|
await api.respondToInquiry(inquiryId, 'E2E test - initial response');
|
|
|
|
await page.goto(`/inquiries/${inquiryId}/`);
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const reopenResp = await sessionPost(page, `/inquiries/${inquiryId}/reopen/`, {
|
|
note: 'E2E test - reopening inquiry',
|
|
});
|
|
expect([200, 302].includes(reopenResp.status())).toBeTruthy();
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('reopen closed observation', async ({ page }) => {
|
|
const auth = new RoleAuthHelper(page);
|
|
await auth.login('hospital_admin');
|
|
await page.waitForTimeout(800);
|
|
|
|
await page.goto('/observations/create/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
await page.fill('textarea[name="description"]', `E2E reopen obs ${Date.now()}. Please ignore.`);
|
|
const dt = page.locator('input[name="incident_datetime"]');
|
|
if (await dt.count() > 0) {
|
|
const now = new Date();
|
|
const p = (n: number) => String(n).padStart(2, '0');
|
|
await dt.fill(`${now.getFullYear()}-${p(now.getMonth()+1)}-${p(now.getDate())}T${p(now.getHours())}:${p(now.getMinutes())}`);
|
|
}
|
|
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
|
|
await page.waitForTimeout(1200);
|
|
await page.evaluate(() => {
|
|
const f = document.getElementById('observationForm') as HTMLFormElement;
|
|
if (f) f.submit();
|
|
});
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(3000);
|
|
|
|
const url = page.url();
|
|
const m = url.match(/\/observations\/([0-9a-f-]+)\/?$/);
|
|
const obsId = m ? m[1] : '';
|
|
if (!obsId) { test.skip(); return; }
|
|
|
|
await sessionPost(page, `/observations/${obsId}/triage/`, {
|
|
status: 'assigned',
|
|
note: 'E2E test',
|
|
});
|
|
await page.waitForTimeout(800);
|
|
|
|
await sessionPost(page, `/observations/${obsId}/status/`, { status: 'resolved', comment: 'E2E resolved' });
|
|
await page.waitForTimeout(800);
|
|
|
|
await sessionPost(page, `/observations/${obsId}/status/`, { status: 'closed', comment: 'E2E closed' });
|
|
await page.waitForTimeout(800);
|
|
|
|
const reopenResp = await sessionPost(page, `/observations/${obsId}/reopen/`, {
|
|
comment: 'E2E test - reopening observation',
|
|
});
|
|
expect([200, 302].includes(reopenResp.status())).toBeTruthy();
|
|
await page.waitForTimeout(800);
|
|
});
|
|
});
|