51 lines
2.0 KiB
TypeScript
51 lines
2.0 KiB
TypeScript
|
|
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');
|
||
|
|
});
|
||
|
|
});
|