import { TEMPLATES, missingPlaceholders, renderTemplate } from '../../src/emailTemplates'; /** * The template that carries an upload link (#260). * * The one failure worth making impossible is a link email with no link in it: * it sends, it looks fine in the log, and it is useless to the person who gets * it. That is the same guard `verification` has on `verifyUrl`. */ describe('the upload link template', () => { it('is offered in the admin like the others', () => { expect(TEMPLATES.uploadLink.label).toBeTruthy(); }); it('requires the submit link', () => { expect(TEMPLATES.uploadLink.required).toContain('submitUrl'); }); it('refuses a body that has no link in it', () => { expect(missingPlaceholders('uploadLink', 'Hello, a link is on its way.')).toEqual(['submitUrl']); }); it('accepts a body that has one', () => { expect(missingPlaceholders('uploadLink', 'Send your items: {{submitUrl}}')).toEqual([]); }); it('offers the label and the allowance as placeholders', () => { expect(TEMPLATES.uploadLink.available).toEqual( expect.arrayContaining(['submitUrl', 'label', 'submissionsAllowed']) ); }); // The default body has to satisfy the guard it declares, or the feature ships // unable to send its own default. it('has a default body that satisfies its own requirement', () => { expect(missingPlaceholders('uploadLink', TEMPLATES.uploadLink.defaultBody)).toEqual([]); }); it('renders the link into the body', () => { const rendered = renderTemplate( 'uploadLink', { subject: 'Send us your items', body: 'Here: {{submitUrl}}' }, { submitUrl: 'https://example.com/submit/abc', label: 'Sarah', submissionsAllowed: '25 items' } ); expect(rendered.html).toContain('https://example.com/submit/abc'); }); });