Mailspring/spec/components/date-input-spec.jsx

68 lines
2.3 KiB
React
Raw Normal View History

import React from 'react';
import ReactDOM from 'react-dom';
import {
Simulate,
findRenderedDOMComponentWithClass,
} from 'react-addons-test-utils';
import {DateUtils} from 'nylas-exports'
import DateInput from '../../src/components/date-input';
import {renderIntoDocument} from '../nylas-test-utils'
const {findDOMNode} = ReactDOM;
const makeInput = (props = {})=> {
const input = renderIntoDocument(<DateInput {...props} dateFormat="blah" />);
if (props.initialState) {
input.setState(props.initialState)
}
return input
};
describe('DateInput', function dateInput() {
describe('onInputKeyDown', ()=> {
it('should submit the input if Enter or Escape pressed', ()=> {
const onSubmitDate = jasmine.createSpy('onSubmitDate')
const dateInput = makeInput({onSubmitDate: onSubmitDate})
const inputNode = ReactDOM.findDOMNode(dateInput).querySelector('input')
const stopPropagation = jasmine.createSpy('stopPropagation')
const keys = ['Enter', 'Return']
inputNode.value = 'tomorrow'
spyOn(DateUtils, 'futureDateFromString').andReturn('someday')
spyOn(dateInput, 'setState')
keys.forEach((key)=> {
Simulate.keyDown(inputNode, {key, stopPropagation})
expect(stopPropagation).toHaveBeenCalled()
expect(onSubmitDate).toHaveBeenCalledWith('someday', 'tomorrow')
expect(dateInput.setState).toHaveBeenCalledWith({inputDate: null})
stopPropagation.reset()
onSubmitDate.reset()
dateInput.setState.reset()
})
});
});
describe('render', ()=> {
beforeEach(()=> {
spyOn(DateUtils, 'format').andReturn('formatted')
});
it('should render a date interpretation if a date has been inputted', ()=> {
const dateInput = makeInput({initialState: {inputDate: 'something!'}})
spyOn(dateInput, 'setState')
const dateInterpretation = findDOMNode(findRenderedDOMComponentWithClass(dateInput, 'date-interpretation'))
expect(dateInterpretation.textContent).toEqual('formatted')
});
it('should not render a date interpretation if no input date available', ()=> {
const dateInput = makeInput({initialState: {inputDate: null}})
spyOn(dateInput, 'setState')
expect(()=> {
findRenderedDOMComponentWithClass(dateInput, 'date-interpretation')
}).toThrow()
});
});
});