Mailspring/app/internal_packages/notifications/specs/account-error-notif-spec.jsx
Ben Gotow 1a3cca8d0a
Totally overhauled composer based on Slate (#524)
* 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
2018-01-11 15:55:56 -08:00

105 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);
});
});
});