Mailspring/packages/local-sync/spec/threading-spec.js

79 lines
2.8 KiB
JavaScript

/* eslint global-require: 0 */
/* eslint import/no-dynamic-require: 0 */
const detectThread = require('../src/new-message-processor/detect-thread');
const LocalDatabaseConnector = require('../src/shared/local-database-connector');
const {FIXTURES_PATH, ACCOUNT_ID} = require('./helpers')
function messagesFromFixture({Message}, folder, name) {
const {A, B} = require(`${FIXTURES_PATH}/Threading/${name}`)
const msgA = Message.build(A);
msgA.folder = folder;
msgA.labels = [];
const msgB = Message.build(B);
msgB.folder = folder;
msgB.labels = [];
return {msgA, msgB};
}
describe('threading', function threadingSpecs() {
beforeEach(() => {
waitsForPromise({timeout: 1000}, async () => {
await LocalDatabaseConnector.ensureAccountDatabase(ACCOUNT_ID);
this.db = await LocalDatabaseConnector.forAccount(ACCOUNT_ID);
this.folder = await this.db.Folder.create({
id: 'test-folder-id',
accountId: ACCOUNT_ID,
version: 1,
name: 'Test Folder',
role: null,
});
});
});
afterEach(() => {
LocalDatabaseConnector.destroyAccountDatabase(ACCOUNT_ID)
})
describe("when remote thread ids are present", () => {
it('threads emails with the same gthreadid', () => {
waitsForPromise(async () => {
const {msgA, msgB} = messagesFromFixture(this.db, this.folder, 'remote-thread-id-yes');
const threadA = await detectThread({db: this.db, message: msgA});
const threadB = await detectThread({db: this.db, message: msgB});
expect(threadB.id).toEqual(threadA.id);
});
});
it('does not thread other emails', () => {
waitsForPromise(async () => {
const {msgA, msgB} = messagesFromFixture(this.db, this.folder, 'remote-thread-id-no');
const threadA = await detectThread({db: this.db, message: msgA});
const threadB = await detectThread({db: this.db, message: msgB});
expect(threadB.id).not.toEqual(threadA.id);
});
});
});
describe("when subject matching", () => {
it('threads emails with the same subject', () => {
waitsForPromise(async () => {
const {msgA, msgB} = messagesFromFixture(this.db, this.folder, 'subject-matching-yes');
const threadA = await detectThread({db: this.db, message: msgA});
const threadB = await detectThread({db: this.db, message: msgB});
expect(threadB.id).toEqual(threadA.id);
});
});
it('does not thread other emails', () => {
waitsForPromise(async () => {
const {msgA, msgB} = messagesFromFixture(this.db, this.folder, 'subject-matching-no');
const threadA = await detectThread({db: this.db, message: msgA});
const threadB = await detectThread({db: this.db, message: msgB});
expect(threadB.id).not.toEqual(threadA.id);
});
});
});
});