mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-22 16:26:08 +08:00
149b389508
* Switch to using Typescript instead of Babel * Switch all es6 / jsx file extensions to ts / tsx * Convert Utils to a TS module from module.exports style module * Move everything from module.exports to typescript exports * Define .d.ts files for mailspring-exports and component kit… Yes it seems this is the best option :( * Load up on those @types * Synthesize TS types from PropTypes for standard components * Add types to Model classes and move constructor constants to instance vars * 9800 => 7700 TS errors * 7700 => 5600 TS errors * 5600 => 5330 TS errors * 5330 => 4866 TS errors * 4866 => 4426 TS errors * 4426 => 2411 TS errors * 2411 > 1598 TS errors * 1598 > 769 TS errors * 769 > 129 TS errors * 129 > 22 TS errors * Fix runtime errors * More runtime error fixes * Remove support for custom .es6 file extension * Remove a few odd remaining references to Nylas * Don’t ship Typescript support in the compiled app for now * Fix issues in compiled app - module resolution in TS is case sensitive? * README updates * Fix a few more TS errors * Make “No Signature” option clickable + selectable * Remove flicker when saving file and reloading keymaps * Fix mail rule item height in preferences * Fix missing spacing in thread sharing popover * Fix scrollbar ticks being nested incorrectly * Add Japanese as a manually reviewed language * Prevent the thread list from “sticking” * Re-use Sheet when switching root tabs, prevent sidebar from resetting * Ensure specs run * Update package configuration to avoid shpping types * Turn eslint back on - we will opt-in to the TS rules one by one
117 lines
4.1 KiB
JavaScript
117 lines
4.1 KiB
JavaScript
import { AccountStore, CategoryStore, Thread, Actions, Folder } from 'mailspring-exports';
|
|
import * as SnoozeUtils from '../lib/snooze-utils';
|
|
import { SnoozeStore } from '../lib/snooze-store';
|
|
|
|
xdescribe('SnoozeStore', function snoozeStore() {
|
|
beforeEach(() => {
|
|
this.store = new SnoozeStore('plug-id', 'plug-name');
|
|
this.name = 'Snooze folder';
|
|
this.accounts = [{ id: 123 }, { id: 321 }];
|
|
|
|
this.snoozeCatsByAccount = {
|
|
123: new Folder({ accountId: 123, displayName: this.name, id: 'sn-1' }),
|
|
321: new Folder({ accountId: 321, displayName: this.name, id: 'sn-2' }),
|
|
};
|
|
this.inboxCatsByAccount = {
|
|
123: new Folder({ accountId: 123, name: 'inbox', id: 'in-1' }),
|
|
321: new Folder({ accountId: 321, name: 'inbox', id: 'in-2' }),
|
|
};
|
|
this.threads = [
|
|
new Thread({ accountId: 123, id: 's-1' }),
|
|
new Thread({ accountId: 123, id: 's-2' }),
|
|
new Thread({ accountId: 321, id: 's-3' }),
|
|
];
|
|
this.updatedThreadsByAccountId = {
|
|
123: {
|
|
threads: [this.threads[0], this.threads[1]],
|
|
snoozeCategoryId: 'sn-1',
|
|
returnCategoryId: 'in-1',
|
|
},
|
|
321: {
|
|
threads: [this.threads[2]],
|
|
snoozeCategoryId: 'sn-2',
|
|
returnCategoryId: 'in-2',
|
|
},
|
|
};
|
|
this.store.snoozeCategoriesPromise = Promise.resolve();
|
|
spyOn(this.store, 'recordSnoozeEvent');
|
|
spyOn(this.store, 'groupUpdatedThreads').andReturn(
|
|
Promise.resolve(this.updatedThreadsByAccountId)
|
|
);
|
|
|
|
spyOn(AccountStore, 'accountsForItems').andReturn(this.accounts);
|
|
spyOn(SnoozeUtils, 'moveThreads');
|
|
spyOn(Actions, 'closePopover');
|
|
spyOn(AppEnv, 'reportError');
|
|
spyOn(AppEnv, 'showErrorDialog');
|
|
});
|
|
|
|
describe('groupUpdatedThreads', () => {
|
|
it('groups the threads correctly by account id, with their snooze and inbox categories', () => {
|
|
spyOn(CategoryStore, 'getInboxCategory').andCallFake(
|
|
accId => this.inboxCatsByAccount[accId]
|
|
);
|
|
|
|
waitsForPromise(() => {
|
|
return this.store
|
|
.groupUpdatedThreads(this.threads, this.snoozeCatsByAccount)
|
|
.then(result => {
|
|
expect(result['123']).toEqual({
|
|
threads: [this.threads[0], this.threads[1]],
|
|
snoozeCategoryId: 'sn-1',
|
|
returnCategoryId: 'in-1',
|
|
});
|
|
expect(result['321']).toEqual({
|
|
threads: [this.threads[2]],
|
|
snoozeCategoryId: 'sn-2',
|
|
returnCategoryId: 'in-2',
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('onSnoozeThreads', () => {
|
|
it('calls Actions.queueTask with the correct metadata', () => {
|
|
waitsForPromise(() => {
|
|
return this.store.onSnoozeThreads(this.threads, 'date', 'label').then(() => {
|
|
expect(Actions.queueTask).toHaveBeenCalled();
|
|
const task1 = Actions.queueTask.calls[0].args[0];
|
|
expect(task1.pluginId).toEqual('plug-id');
|
|
expect(task1.modelId).toEqual(this.updatedThreadsByAccountId['123'].threads[0].id);
|
|
expect(task1.value).toEqual({
|
|
snoozeDate: 'date',
|
|
snoozeCategoryId: 'sn-1',
|
|
returnCategoryId: 'in-1',
|
|
});
|
|
|
|
const task2 = Actions.queueTask.calls[1].args[0];
|
|
expect(task2.pluginId).toEqual('plug-id');
|
|
expect(task2.modelId).toEqual(this.updatedThreadsByAccountId['321'].threads[0].id);
|
|
expect(task2.value).toEqual({
|
|
snoozeDate: 'date',
|
|
snoozeCategoryId: 'sn-2',
|
|
returnCategoryId: 'in-2',
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
it('displays dialog on error', () => {
|
|
jasmine.unspy(SnoozeUtils, 'moveThreads');
|
|
spyOn(SnoozeUtils, 'moveThreads').andReturn(Promise.reject(new Error('Oh no!')));
|
|
|
|
waitsForPromise(async () => {
|
|
try {
|
|
await this.store.onSnoozeThreads(this.threads, 'date', 'label');
|
|
} catch (err) {
|
|
//
|
|
}
|
|
expect(SnoozeUtils.moveThreads).toHaveBeenCalled();
|
|
expect(AppEnv.reportError).toHaveBeenCalled();
|
|
expect(AppEnv.showErrorDialog).toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
});
|