Mailspring/packages/local-sync/spec/message-factory-spec.js
Christine Spang a23c68092e [local-sync] Add specs for message parsing
Summary:
This commit also fixes snippets for HTML-only messages to strip out HTML
tags, and makes us preserve whitespace for plaintext emails by
displaying them in <pre class="nylas-plaintext"> tags, and makes us log
messages that fail to parse at all to a tempdir.

The only issue I found with using <pre> tags for plaintext email was
that some lines may trigger scrolling, so there is an associated commit
(D3484) that changes the CSS for <pre class="nylas-plaintext"> to wrap
lines.

In the future, we can add regression tests to this test suite whenever
we fix parsing bugs.

Test Plan: unit tests included

Reviewers: bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D3483
2016-12-07 07:25:28 -08:00

44 lines
1.6 KiB
JavaScript

const LocalDatabaseConnector = require('../src/shared/local-database-connector');
const {parseFromImap} = require('../src/shared/message-factory');
const {forEachJSONFixture, ACCOUNT_ID} = require('./helpers');
describe('MessageFactory', function MessageFactorySpecs() {
beforeEach(() => {
waitsForPromise(async () => {
await LocalDatabaseConnector.ensureAccountDatabase(ACCOUNT_ID);
const db = await LocalDatabaseConnector.forAccount(ACCOUNT_ID);
const folder = await db.Folder.create({
id: 'test-folder-id',
accountId: ACCOUNT_ID,
version: 1,
name: 'Test Folder',
role: null,
});
this.options = { accountId: ACCOUNT_ID, db, folder };
})
})
afterEach(() => {
LocalDatabaseConnector.destroyAccountDatabase(ACCOUNT_ID)
})
describe("parseFromImap", () => {
forEachJSONFixture('MessageFactory/parseFromImap', (filename, json) => {
it(`should correctly build message properties for ${filename}`, () => {
const {imapMessage, desiredParts, result} = json;
// requiring these to match makes it overly arduous to generate test
// cases from real accounts
const excludeKeys = new Set(['id', 'accountId', 'folderId', 'folder', 'labels']);
waitsForPromise(async () => {
const actual = await parseFromImap(imapMessage, desiredParts, this.options);
for (const key of Object.keys(result)) {
if (!excludeKeys.has(key)) {
expect(actual[key]).toEqual(result[key]);
}
}
});
});
})
});
});