UNPKG

mimetext

Version:

RFC-5322 compliant, fully typed and documented email message generator for javascript runtimes.

72 lines (67 loc) 2.83 kB
import {EOL} from 'node:os' import {expect, test} from '@jest/globals' import * as mime from 'mime-types' import {MIMEMessageHeader, Mailbox} from '../src/entrypoints/node.js' const _reLineSplit = /\r\n|(?!\r\n)[\n-\r\x85\u2028\u2029]/ const envctx = { toBase64: function toBase64(data) { return (new Buffer(data)).toString('base64') }, toBase64WebSafe: function toBase64WebSafe(data) { return (new Buffer(data)).toString('base64') .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/, '') }, eol: EOL, validateContentType: (v) => { return mime.lookup(v) } } test('header fields', () => { const a = new MIMEMessageHeader(envctx) expect(a.isHeaderField({})).toBe(false) expect(a.isHeaderField({value: 1})).toBe(false) expect(a.isHeaderField({name: 'x-header'})).toBe(true) expect(a.isHeaderField({name: 'x-header', invalidProp: true})).toBe(false) expect(a.isHeaderField({name: 'x-header', value: 1, dump: '', required: true, disabled: true, generator: '', custom: ''})).toBe(true) }) test('exports heade fields as object', () => { const a = new MIMEMessageHeader(envctx) const obj = a.toObject() expect(obj.Date).toBe(undefined) expect(obj.Subject).toBe(undefined) }) test('sets and reads headers', () => { const a = new MIMEMessageHeader(envctx) a.set('From', new Mailbox('test@test.com')) a.set('To', new Mailbox('to@test.com')) a.set('Cc', [new Mailbox('cc@test.com'), new Mailbox('cc2@test.com')]) a.set('Bcc', [new Mailbox('bcc@test.com'), new Mailbox('bcc2@test.com')]) a.set('Subject', 'Testing') a.set('Date', 'Wed, 22 Mar 2023 12:12:02 +0000') a.set('Message-ID', '<qjuijvi0ie@test.com>') a.set('X-Custom', 'true') a.setCustom({name: 'X-Something', value: 'thing'}) const adump = a.dump() expect(a.get('From')).toBeInstanceOf(Mailbox) expect(a.get('Subject')).toBe('Testing') expect(adump).toBe( 'Date: Wed, 22 Mar 2023 12:12:02 +0000' + envctx.eol + 'From: <test@test.com>' + envctx.eol + 'To: <to@test.com>' + envctx.eol + 'Cc: <cc@test.com>,' + envctx.eol + ' <cc2@test.com>' + envctx.eol + 'Bcc: <bcc@test.com>,' + envctx.eol + ' <bcc2@test.com>' + envctx.eol + 'Message-ID: <qjuijvi0ie@test.com>' + envctx.eol + 'Subject: =?utf-8?B?VGVzdGluZw==?=' + envctx.eol + 'MIME-Version: 1.0' + envctx.eol + 'X-Custom: true' + envctx.eol + 'X-Something: thing' ) expect(() => a.setCustom('something')).toThrow() expect(() => a.setCustom({name: 'something'})).toThrow() expect(() => a.set('Sender', 'some')).toThrow() expect(() => a.set('From', [new Mailbox('from@test.com'), new Mailbox('from2@test.com')])).toThrow() })