/**
* Copyright (c) 2019 Paul Armstrong
*/
import DatePicker from '../DatePicker';
import DateTextField from '../DateTextField';
import React from 'react';
import { TextInput } from 'react-native';
import { fireEvent, flushMicrotasksQueue, render } from 'react-native-testing-library';
describe('DateTextField', () => {
describe('on press tab key', () => {
test('hides the date picker', async () => {
const { getByType, queryAllByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
expect(queryAllByType(DatePicker)).toHaveLength(1);
fireEvent(getByType(TextInput), 'keyPress', { key: 'Tab' });
expect(queryAllByType(DatePicker)).toHaveLength(0);
});
});
describe('onChangeText', () => {
test('calls onSet for a valid date', async () => {
const handleSet = jest.fn();
const { getByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
fireEvent(getByType(TextInput), 'changeText', '2019-03-26');
expect(handleSet).toHaveBeenCalledWith(new Date('2019-03-26'));
expect(getByType(DatePicker).props.selectedDate).toEqual(new Date('2019-03-26'));
});
test('does not call onSet for invalid date', async () => {
const handleSet = jest.fn();
const { getByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
fireEvent(getByType(TextInput), 'changeText', '2019-0');
expect(handleSet).not.toHaveBeenCalled();
expect(getByType(DatePicker).props.selectedDate).toBeUndefined();
});
});
describe('when selecting a date', () => {
test('hides the date picker', async () => {
const { getByType, queryAllByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
expect(queryAllByType(DatePicker)).toHaveLength(1);
fireEvent(getByType(DatePicker), 'select', new Date());
expect(queryAllByType(DatePicker)).toHaveLength(0);
});
test('calls onSet', async () => {
const handleSet = jest.fn();
const { getByType, queryAllByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
expect(queryAllByType(DatePicker)).toHaveLength(1);
const now = new Date();
fireEvent(getByType(DatePicker), 'select', now);
expect(handleSet).toHaveBeenCalledWith(now);
});
test('sets the text field value', async () => {
const { getByType, queryAllByType } = render();
fireEvent(getByType(TextInput), 'focus');
await flushMicrotasksQueue();
expect(queryAllByType(DatePicker)).toHaveLength(1);
fireEvent(getByType(DatePicker), 'select', new Date(2019, 2, 26));
expect(getByType(TextInput).props.value).toBe('2019-03-26');
});
});
});