132 lines
4.7 KiB
TypeScript
132 lines
4.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { RoleAuthHelper } from '../../helpers/helpers';
|
|
import { ApiHelper, HOSPITAL_ID } from '../../helpers/api-helper';
|
|
|
|
test.describe('Public Tracking Tests', () => {
|
|
test.setTimeout(120000);
|
|
|
|
test.describe.configure({ mode: 'serial' });
|
|
|
|
let complaintRef: string;
|
|
let inquiryRef: string;
|
|
let observationCode: string;
|
|
|
|
test('create entities for tracking', async ({ page }) => {
|
|
const api = new ApiHelper(page);
|
|
await api.authenticate('px_admin');
|
|
|
|
const { response: cr, body: cb } = await api.createComplaint();
|
|
expect(cr.status()).toBe(201);
|
|
complaintRef = cb?.reference_number || '';
|
|
|
|
const { response: ir, body: ib } = await api.createInquiry();
|
|
expect(ir.status()).toBe(201);
|
|
inquiryRef = ib?.reference_number || '';
|
|
|
|
await page.goto('/core/public/submit/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(1500);
|
|
const csrfCookie = await page.context().cookies();
|
|
const csrf = csrfCookie.find(c => c.name === 'csrftoken')?.value || '';
|
|
const obsResp = await page.request.post('/core/public/observation/submit/', {
|
|
form: {
|
|
description: `E2E tracking obs ${Date.now()}`,
|
|
hospital: HOSPITAL_ID,
|
|
severity: 'low',
|
|
csrfmiddlewaretoken: csrf,
|
|
},
|
|
headers: csrf ? { 'X-CSRFToken': csrf, Referer: 'http://localhost:8000/' } : {},
|
|
});
|
|
const obsBody = await obsResp.json().catch(() => null);
|
|
observationCode = obsBody?.tracking_code || obsBody?.reference || '';
|
|
expect(obsResp.status()).toBeLessThan(400);
|
|
});
|
|
|
|
test('track complaint via unified tracking page', async ({ page }) => {
|
|
if (!complaintRef) { test.skip(); return; }
|
|
|
|
await page.goto('/core/public/track/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
await page.click('[data-type="complaint"], .track-card:has-text("Complaint")').catch(() => {});
|
|
await page.waitForTimeout(800);
|
|
|
|
const refInput = page.locator('input[name="reference"], input[name="tracking_code"], #trackReference');
|
|
if (await refInput.count() > 0) {
|
|
await refInput.first().fill(complaintRef);
|
|
await page.waitForTimeout(600);
|
|
await page.click('button[type="submit"], .track-btn').catch(() => {});
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(3000);
|
|
|
|
const pageText = (await page.textContent('body')) || '';
|
|
expect(pageText).toContain(complaintRef);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('track complaint via standalone tracking page', async ({ page }) => {
|
|
if (!complaintRef) { test.skip(); return; }
|
|
|
|
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) {
|
|
await refInput.fill(complaintRef);
|
|
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(complaintRef);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('track inquiry via standalone tracking page', async ({ page }) => {
|
|
if (!inquiryRef) { test.skip(); return; }
|
|
|
|
await page.goto('/inquiries/public/track/');
|
|
await page.waitForLoadState('domcontentloaded');
|
|
await page.waitForTimeout(2500);
|
|
|
|
const refInput = page.locator('input[name="reference_number"]');
|
|
if (await refInput.count() > 0) {
|
|
await refInput.fill(inquiryRef);
|
|
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(inquiryRef);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
|
|
test('track observation via standalone tracking page', async ({ page }) => {
|
|
if (!observationCode) { test.skip(); return; }
|
|
|
|
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(observationCode);
|
|
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(observationCode);
|
|
}
|
|
await page.waitForTimeout(800);
|
|
});
|
|
});
|