Files
pn-new-crm/tests/unit/email/signing-status-notification.test.ts

51 lines
2.0 KiB
TypeScript
Raw Normal View History

import { describe, expect, it } from 'vitest';
import { signingStatusNotificationEmail } from '@/lib/email/templates/signing-status-notification';
describe('signingStatusNotificationEmail', () => {
it('renders a per-signer "has signed" alert with progress + CRM link', async () => {
const { subject, html, text } = await signingStatusNotificationEmail({
event: 'signed',
documentLabel: 'Expression of Interest',
clientName: 'Jane Doe',
portName: 'Port Nimara',
crmUrl: 'https://crm.portnimara.com/port-nimara/documents/abc',
signerName: 'Jane Doe',
signerRole: 'client',
signedCount: 1,
totalCount: 3,
});
// Subject names who signed + the deal so sales can triage at a glance.
expect(subject).toContain('Jane Doe');
expect(subject).toContain('signed');
// Body states the signing event, the document, and progress.
expect(html).toContain('Jane Doe');
expect(html).toContain('has signed');
expect(html).toContain('Expression of Interest');
expect(html).toContain('1 of 3');
// Internal recipients get a deep link into the CRM, not a signing link.
expect(html).toContain('https://crm.portnimara.com/port-nimara/documents/abc');
expect(text).toContain('Jane Doe');
expect(text).toContain('1 of 3');
});
it('renders a completion alert when all parties have signed', async () => {
const { subject, html, text } = await signingStatusNotificationEmail({
event: 'completed',
documentLabel: 'Sales Contract',
clientName: 'Acme Holdings',
portName: 'Port Nimara',
crmUrl: 'https://crm.portnimara.com/port-nimara/documents/xyz',
});
expect(subject).toContain('Acme Holdings');
expect(subject.toLowerCase()).toContain('fully signed');
expect(html).toContain('all parties');
expect(html).toContain('Sales Contract');
expect(html).toContain('Acme Holdings');
expect(html).toContain('https://crm.portnimara.com/port-nimara/documents/xyz');
expect(text).toContain('Acme Holdings');
});
});