/* 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( 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() }); }); });