112 lines
3.8 KiB
TypeScript
112 lines
3.8 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { RoleAuthHelper } from '../../helpers/helpers';
|
|
import { ApiHelper, sessionPost } from '../../helpers/api-helper';
|
|
|
|
test.describe('Tracking Status Tests', () => {
|
|
test.setTimeout(120000);
|
|
|
|
test('track complaint status changes', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
const { body: cb } = await api.createComplaint();
|
|
const complaintId = cb?.id;
|
|
const ref = cb?.reference_number || '';
|
|
if (!complaintId) { test.skip(); return; }
|
|
|
|
await api.activateComplaint(complaintId);
|
|
await api.changeComplaintStatus(complaintId, 'resolved', {
|
|
resolution: 'E2E test - resolved',
|
|
resolution_category: 'full_action_taken',
|
|
});
|
|
|
|
await page.goto('/complaints/public/track/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const refInput = page.locator('input[name="reference_number"]');
|
|
if (await refInput.count() > 0 && ref) {
|
|
await refInput.fill(ref);
|
|
await page.waitForTimeout(600);
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(3000);
|
|
|
|
const pageText = (await page.textContent('body')) || '';
|
|
expect(pageText).toContain(ref);
|
|
expect(pageText).toMatch(/resolved|Resolved/i);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('track inquiry status via unified page', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
const { body: ib } = await api.createInquiry();
|
|
const inquiryId = ib?.id;
|
|
const ref = ib?.reference_number || '';
|
|
if (!inquiryId || !ref) { test.skip(); return; }
|
|
|
|
await api.respondToInquiry(inquiryId, 'E2E test - inquiry resolved');
|
|
|
|
const trackResp = await page.request.get(`/core/api/track/?type=inquiry&reference=${encodeURIComponent(ref)}`);
|
|
expect(trackResp.status()).toBe(200);
|
|
const trackBody = await trackResp.json().catch(() => null);
|
|
if (trackBody) {
|
|
expect(trackBody.found || trackBody.status || trackBody.reference).toBeTruthy();
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('track observation status changes', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
|
|
const obsResp = await page.request.post('/core/public/observation/submit/', {
|
|
data: {
|
|
description: `E2E track obs ${Date.now()}`,
|
|
hospital: '7e4d08ce-2e0a-4184-8297-7acd418184a6',
|
|
},
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
const obsBody = await obsResp.json().catch(() => null);
|
|
const trackingCode = obsBody?.tracking_code || '';
|
|
const obsId = obsBody?.id || '';
|
|
|
|
if (!trackingCode) { test.skip(); return; }
|
|
|
|
if (obsId) {
|
|
const auth = new RoleAuthHelper(page);
|
|
await auth.login('hospital_admin');
|
|
await page.waitForTimeout(800);
|
|
|
|
await sessionPost(page, `/observations/${obsId}/triage/`, {
|
|
status: 'assigned',
|
|
note: 'E2E triage',
|
|
});
|
|
await page.waitForTimeout(800);
|
|
|
|
await sessionPost(page, `/observations/${obsId}/status/`, {
|
|
status: 'resolved',
|
|
comment: 'E2E resolved',
|
|
});
|
|
}
|
|
|
|
await page.goto('/observations/track/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const codeInput = page.locator('input[name="tracking_code"]');
|
|
if (await codeInput.count() > 0) {
|
|
await codeInput.fill(trackingCode);
|
|
await page.waitForTimeout(600);
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(3000);
|
|
|
|
const pageText = (await page.textContent('body')) || '';
|
|
expect(pageText).toContain(trackingCode);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
});
|