mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-04 07:10:06 +08:00
1a3cca8d0a
* Remove the composer contenteditable, replace with basic <textarea> * Beginning broader cleanup of draft session * DraftJS composer with color, style support * Serialization/unserialization of basic styles, toolbar working * WIP * Switch to draft-js-plugins approach, need to revisit HTML * Move HTML conversion functionality into plugins * Add spellcheck context menu to editor * Initial work on quoted text * Further work on quoted text * BLOCK approach * Entity approach - better, does not bump out to top level * Hiding and showing quoted text via CSS * Get rid of ability to inject another subject line component * Clean up specs, DraftFactory to ES6 * Remove old initial focus hack * Fix focusing, initial text selection * Remove participant “collapsing” support, it can be confusing * Correctly terminate links on carriage returns * Initial signature support, allow removal of uneditable blocks * Sync body string with body editorstate * Simplify draft editor session, finish signatures * Templates * Minor fixes * Simplify link/open tracking, ensure it works * Reorg composer, rework template editor * Omg the slowness is all the stupid emoji button * Polish and small fixes * Performance improvements, new templates UI * Don’t assume nodes are elements * Fix for sending drafts twice due to back-to-back saves * Fix order of operations on app quit to save drafts reliably * Improve DraftJS-Convert whitespace handling * Use contentID throughout attachment lifecycle * Try to fix images * Switch to Slate instead of DraftJS… much better * Fix newline handling * Bug fixes * Cleanup * Finish templates plugin * Clean up text editing / support for Gmail email styles * Support for color + size on the same node, clean trailing whitespace * Restore emoji typeahead / emoji picker * Fix scrolling in template editor * Fix specs * Fix newlines * Re-implement spellcheck to be faster * Make spellcheck decorator changes invisible to the undo/redo stack * Remove comment * Polish themplates panel * Fix #521
104 lines
3.9 KiB
JavaScript
104 lines
3.9 KiB
JavaScript
import { mount } from 'enzyme';
|
|
import { AccountStore, Account, Actions, React, KeyManager } from 'mailspring-exports';
|
|
import { ipcRenderer } from 'electron';
|
|
import AccountErrorNotification from '../lib/items/account-error-notif';
|
|
|
|
describe('AccountErrorNotif', function AccountErrorNotifTests() {
|
|
describe('when one account is in the `invalid` state', () => {
|
|
beforeEach(() => {
|
|
spyOn(AccountStore, 'accounts').andReturn([
|
|
new Account({
|
|
id: 'A',
|
|
syncState: Account.SYNC_STATE_AUTH_FAILED,
|
|
emailAddress: '123@gmail.com',
|
|
}),
|
|
new Account({ id: 'B', syncState: Account.SYNC_STATE_OK, emailAddress: 'other@gmail.com' }),
|
|
]);
|
|
});
|
|
|
|
it('renders an error bar that mentions the account email', () => {
|
|
const notif = mount(<AccountErrorNotification />);
|
|
expect(
|
|
notif
|
|
.find('.title')
|
|
.text()
|
|
.indexOf('123@gmail.com') > 0
|
|
).toBe(true);
|
|
});
|
|
|
|
it('allows the user to refresh the account', () => {
|
|
spyOn(AppEnv.mailsyncBridge, 'forceRelaunchClient').andReturn(Promise.resolve());
|
|
const notif = mount(<AccountErrorNotification />);
|
|
notif.find('#action-0').simulate('click'); // Expects first action to be the refresh action
|
|
expect(AppEnv.mailsyncBridge.forceRelaunchClient).toHaveBeenCalled();
|
|
});
|
|
|
|
it('allows the user to reconnect the account', () => {
|
|
const notif = mount(<AccountErrorNotification />);
|
|
spyOn(KeyManager, 'insertAccountSecrets').andCallFake(acct => acct);
|
|
spyOn(ipcRenderer, 'send');
|
|
notif.find('#action-1').simulate('click'); // Expects second action to be the reconnect action
|
|
|
|
waitsFor(() => {
|
|
return ipcRenderer.send.callCount > 0;
|
|
});
|
|
runs(() => {
|
|
expect(ipcRenderer.send).toHaveBeenCalledWith('command', 'application:add-account', {
|
|
existingAccountJSON: AccountStore.accounts()[0],
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when more than one account is in the `invalid` state', () => {
|
|
beforeEach(() => {
|
|
spyOn(AccountStore, 'accounts').andReturn([
|
|
new Account({
|
|
id: 'A',
|
|
syncState: Account.SYNC_STATE_AUTH_FAILED,
|
|
emailAddress: '123@gmail.com',
|
|
}),
|
|
new Account({
|
|
id: 'B',
|
|
syncState: Account.SYNC_STATE_AUTH_FAILED,
|
|
emailAddress: 'other@gmail.com',
|
|
}),
|
|
]);
|
|
});
|
|
|
|
it('renders an error bar', () => {
|
|
const notif = mount(<AccountErrorNotification />);
|
|
expect(notif.find('.notification').exists()).toEqual(true);
|
|
});
|
|
|
|
it('allows the user to refresh the accounts', () => {
|
|
spyOn(AppEnv.mailsyncBridge, 'forceRelaunchClient').andReturn(Promise.resolve());
|
|
const notif = mount(<AccountErrorNotification />);
|
|
notif.find('#action-0').simulate('click'); // Expects first action to be the refresh action
|
|
expect(AppEnv.mailsyncBridge.forceRelaunchClient).toHaveBeenCalled();
|
|
});
|
|
|
|
it('allows the user to open preferences', () => {
|
|
spyOn(Actions, 'switchPreferencesTab');
|
|
spyOn(Actions, 'openPreferences');
|
|
const notif = mount(<AccountErrorNotification />);
|
|
notif.find('#action-1').simulate('click'); // Expects second action to be the preferences action
|
|
expect(Actions.openPreferences).toHaveBeenCalled();
|
|
expect(Actions.switchPreferencesTab).toHaveBeenCalledWith('Accounts');
|
|
});
|
|
});
|
|
|
|
describe('when all accounts are fine', () => {
|
|
beforeEach(() => {
|
|
spyOn(AccountStore, 'accounts').andReturn([
|
|
new Account({ id: 'A', syncState: Account.SYNC_STATE_OK, emailAddress: '123@gmail.com' }),
|
|
new Account({ id: 'B', syncState: Account.SYNC_STATE_OK, emailAddress: 'other@gmail.com' }),
|
|
]);
|
|
});
|
|
|
|
it('renders nothing', () => {
|
|
const notif = mount(<AccountErrorNotification />);
|
|
expect(notif.find('.notification').exists()).toEqual(false);
|
|
});
|
|
});
|
|
});
|