mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-15 14:20:38 +08:00
97 lines
3.6 KiB
JavaScript
97 lines
3.6 KiB
JavaScript
/* eslint react/no-render-return-value: 0 */
|
|
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import {findRenderedDOMComponentWithClass} from 'react-addons-test-utils';
|
|
|
|
import {DateUtils, NylasAPIHelpers, Actions} from 'nylas-exports'
|
|
import SendLaterButton from '../lib/send-later-button';
|
|
import {PLUGIN_ID, PLUGIN_NAME} from '../lib/send-later-constants'
|
|
|
|
const node = document.createElement('div');
|
|
|
|
const makeButton = (initialState, metadataValue) => {
|
|
const draft = {
|
|
accountId: 'accountId',
|
|
metadataForPluginId: () => metadataValue,
|
|
}
|
|
const session = {
|
|
changes: {
|
|
add: jasmine.createSpy('add'),
|
|
addPluginMetadata: jasmine.createSpy('addPluginMetadata'),
|
|
},
|
|
}
|
|
const button = ReactDOM.render(<SendLaterButton draft={draft} session={session} isValidDraft={() => true} />, node);
|
|
if (initialState) {
|
|
button.setState(initialState)
|
|
}
|
|
return button
|
|
};
|
|
|
|
xdescribe('SendLaterButton', function sendLaterButton() {
|
|
beforeEach(() => {
|
|
spyOn(DateUtils, 'format').andReturn('formatted')
|
|
});
|
|
|
|
describe('onSendLater', () => {
|
|
it('sets scheduled date to "saving" and adds plugin metadata to the session', () => {
|
|
const button = makeButton(null, {sendLaterDate: 'date'})
|
|
spyOn(button, 'setState')
|
|
spyOn(NylasAPIHelpers, 'authPlugin').andReturn(Promise.resolve());
|
|
spyOn(Actions, 'finalizeDraftAndSyncbackMetadata')
|
|
|
|
const sendLaterDate = {utc: () => 'utc'}
|
|
button.onSendLater(sendLaterDate)
|
|
advanceClock()
|
|
|
|
expect(button.setState).toHaveBeenCalledWith({saving: true})
|
|
expect(NylasAPIHelpers.authPlugin).toHaveBeenCalledWith(PLUGIN_ID, PLUGIN_NAME, button.props.draft.accountId)
|
|
expect(button.props.session.changes.addPluginMetadata).toHaveBeenCalledWith(PLUGIN_ID, {sendLaterDate})
|
|
});
|
|
|
|
it('displays dialog if an auth error occurs', () => {
|
|
const button = makeButton(null, {sendLaterDate: 'date'})
|
|
spyOn(button, 'setState')
|
|
spyOn(NylasEnv, 'reportError')
|
|
spyOn(NylasEnv, 'showErrorDialog')
|
|
spyOn(NylasAPIHelpers, 'authPlugin').andReturn(Promise.reject(new Error('Oh no!')))
|
|
spyOn(Actions, 'finalizeDraftAndSyncbackMetadata')
|
|
button.onSendLater({utc: () => 'utc'})
|
|
advanceClock()
|
|
expect(NylasEnv.reportError).toHaveBeenCalled()
|
|
expect(NylasEnv.showErrorDialog).toHaveBeenCalled()
|
|
});
|
|
|
|
it('closes the composer window if a sendLaterDate has been set', () => {
|
|
const button = makeButton(null, {sendLaterDate: 'date'})
|
|
spyOn(button, 'setState')
|
|
spyOn(NylasEnv, 'close')
|
|
spyOn(NylasAPIHelpers, 'authPlugin').andReturn(Promise.resolve());
|
|
spyOn(NylasEnv, 'isComposerWindow').andReturn(true)
|
|
spyOn(Actions, 'finalizeDraftAndSyncbackMetadata')
|
|
button.onSendLater({utc: () => 'utc'})
|
|
advanceClock()
|
|
expect(NylasEnv.close).toHaveBeenCalled()
|
|
});
|
|
});
|
|
|
|
describe('render', () => {
|
|
it('renders spinner if saving', () => {
|
|
const button = ReactDOM.findDOMNode(makeButton({saving: true}, null))
|
|
expect(button.title).toEqual('Saving send date...')
|
|
});
|
|
|
|
it('renders date if message is scheduled', () => {
|
|
spyOn(DateUtils, 'futureDateFromString').andReturn({fromNow: () => '5 minutes'})
|
|
const button = makeButton({saving: false}, {sendLaterDate: 'date'})
|
|
const span = ReactDOM.findDOMNode(findRenderedDOMComponentWithClass(button, 'at'))
|
|
expect(span.textContent).toEqual('Sending in 5 minutes')
|
|
});
|
|
|
|
it('does not render date if message is not scheduled', () => {
|
|
const button = makeButton(null, null)
|
|
expect(() => {
|
|
findRenderedDOMComponentWithClass(button, 'at')
|
|
}).toThrow()
|
|
});
|
|
});
|
|
});
|