PPPAIMT-Crest/backend/test/agreementHtml.test.js

79 lines
3.4 KiB
JavaScript

import { describe, expect, it } from 'vitest';
import { agreementHtml } from '../src/pdf/agreementHtml.js';
const application = {
status: 'DRAFT',
agreement_date: '2026-09-30',
full_name: 'Asha <Rao>',
age: 42,
address: '12 Camp Road',
registration_no: 'MMC-999',
medical_council: 'Goa',
pan: 'ABCDE1234F',
gstin: '27ABCDE1234F1Z5',
bank_name: 'Example Bank',
account_holder: 'Asha Holder',
account_number: '998877665544',
ifsc: 'SBIN0001234',
};
describe('agreement HTML', () => {
it('merges every field, escapes values, and watermarks a draft', () => {
const html = agreementHtml({
application,
physicianSignature: { type: 'TYPED', typedName: 'Asha <Rao>' },
draft: true,
});
expect(html).toContain('is executed on this');
expect(html).not.toContain('is is executed');
expect(html).toContain('<p class="center title"><strong>CONSULTATION AGREEMENT</strong></p>');
expect(html).toContain('<p class="center"><strong>BETWEEN</strong></p>');
expect(html).toContain('<p class="center"><strong>… PARTY OF THE FIRST PART</strong></p>');
expect(html).toContain('<p><strong>1. PURPOSE</strong></p>');
expect(html).toContain(
'<strong>WHEREAS</strong>, Chest Research And Training Private Limited',
);
expect(html).toContain('Extended-Dose Pack versus Regular Pack');
expect(html).toContain('<strong>AND WHEREAS</strong>, the said study');
expect(html).not.toContain('<strong>1.1 CREST');
expect(html).toContain('.filled { font-weight: 700; text-decoration: underline;');
expect(html).toContain('this <span class="filled">30</span> day of <span class="filled">September</span> 2026');
expect(html).toContain('<span class="filled">Asha &lt;Rao&gt;</span>');
expect(html).not.toContain('Asha <Rao>');
expect(html).toContain('aged <span class="filled">42</span> years');
expect(html).toContain('<span class="filled">12 Camp Road</span>');
expect(html).toContain('<span class="filled">MMC-999</span>');
expect(html).toContain('<span class="filled">Goa</span> Medical Council');
expect(html).toContain('<span class="filled">ABCDE1234F</span>');
expect(html).toContain('<span class="filled">27ABCDE1234F1Z5</span>');
expect(html).toContain('<span class="filled">Example Bank</span>');
expect(html).toContain('<span class="filled">Asha Holder</span>');
expect(html).toContain('<span class="filled">998877665544</span>');
expect(html).toContain('<span class="filled">SBIN0001234</span>');
expect(html).toContain('class="typed-signature filled"');
expect(html).toContain('Pending approval');
expect(html).toContain('DRAFT - NOT SIGNED');
});
it('shows the CREST signatory only after approval', () => {
const html = agreementHtml({
application: { ...application, status: 'APPROVED' },
signatory: {
name: 'Dr Sudeep Salvi',
designation: 'Medical Director',
signatureDataUrl: 'data:image/png;base64,AAAA',
},
draft: false,
});
expect(html).toContain('<span class="filled">Dr Sudeep Salvi</span>');
expect(html).toContain('<span class="filled">Medical Director</span>');
expect(html).toContain('data:image/png;base64,AAAA');
expect(html).toContain('alt="CREST signature"');
expect(html).not.toContain('alt="CREST"');
expect(html).not.toContain('Pending approval');
expect(html).not.toContain('DRAFT - NOT SIGNED');
});
});