Skip to content

Commit cfff1b0

Browse files
🎉 Add test case for DatePicker.
1 parent 2420945 commit cfff1b0

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
import React from 'react';
2+
import { DatePicker } from '../../../src';
3+
4+
import '@testing-library/jest-dom';
5+
import { fireEvent, render, act, screen } from '@testing-library/react';
6+
7+
const CreateDatePicker = (props: { date?: Date; withTimePicker?: Record<string, unknown> }) => {
8+
const [date, updateDate] = React.useState<Date>(props.date);
9+
return (
10+
<DatePicker label="Enter Date" date={date} onChange={(e) => updateDate(e)} timePickerProps={props.withTimePicker} />
11+
);
12+
};
13+
14+
describe('DatePicker', () => {
15+
it('Should render a datepicker component', () => {
16+
render(<CreateDatePicker />);
17+
18+
const popoverElement = document.querySelector('.popover-element');
19+
expect(popoverElement).toHaveStyle(`
20+
display: block;
21+
`);
22+
23+
const datePickerInput = popoverElement.querySelector('.sha-el-input');
24+
25+
expect(datePickerInput.querySelector('label').innerHTML).toBe('Enter Date ');
26+
27+
const datePickerbutton = datePickerInput.querySelector('button');
28+
expect(datePickerbutton.querySelector('svg').innerHTML).toContain(
29+
// Path for MdTimer icon
30+
'M368.005 272h-96v96h96v-96zm-32-208v32h-160V64h-48v32h-24.01c-22.002 0-40 17.998-40 40v272c0 22.002 17.998 40 40 40h304.01c22.002 0 40-17.998 40-40V136c0-22.002-17.998-40-40-40h-24V64h-48zm72 344h-304.01V196h304.01v212z',
31+
);
32+
});
33+
34+
it('Should open a datepicker', () => {
35+
render(<CreateDatePicker />);
36+
37+
let datePickerCalendar = document.querySelector('.sha-el-calendar');
38+
expect(datePickerCalendar).toBeNull();
39+
40+
act(() => {
41+
fireEvent.click(document.querySelector('input'));
42+
});
43+
44+
datePickerCalendar = document.querySelector('.sha-el-calendar');
45+
expect(datePickerCalendar).toBeDefined();
46+
const timePicker = document.querySelector('.rc-tooltip').querySelectorAll('.popover-element')[2];
47+
expect(timePicker).not.toBeDefined();
48+
});
49+
50+
it('Should render a datepicker with today date', () => {
51+
render(<CreateDatePicker date={new Date()} />);
52+
53+
const datePickerInput = document.querySelector('input');
54+
expect(datePickerInput.value).toBe(new Date().toLocaleDateString());
55+
});
56+
57+
it('Should re-render on date change', () => {
58+
render(<CreateDatePicker />);
59+
60+
act(() => {
61+
fireEvent.click(document.querySelector('input'));
62+
});
63+
64+
let datePickerCalendar = document.querySelector('.sha-el-calendar');
65+
66+
const monthButton = datePickerCalendar.querySelectorAll('.sha-el-col')[0].querySelector('button');
67+
act(() => {
68+
fireEvent.click(monthButton);
69+
});
70+
const monthArray = document.querySelectorAll('.rc-tooltip')[1].querySelectorAll('li');
71+
act(() => {
72+
fireEvent.click(monthArray[6]);
73+
});
74+
75+
const yearButton = datePickerCalendar.querySelectorAll('.sha-el-col')[1].querySelector('button');
76+
act(() => {
77+
fireEvent.click(yearButton);
78+
});
79+
const yearArray = document.querySelectorAll('.rc-tooltip')[2].querySelectorAll('li');
80+
act(() => {
81+
fireEvent.click(yearArray[2007 - 1980]);
82+
});
83+
84+
const dateArray = datePickerCalendar.querySelectorAll('.sha-el-row')[2].querySelectorAll('.sha-el-col');
85+
act(() => {
86+
fireEvent.click(dateArray[6].querySelector('button'));
87+
});
88+
89+
datePickerCalendar = document.querySelector('.sha-el-calendar');
90+
expect(datePickerCalendar).toBeNull();
91+
92+
const datePickerInput = document.querySelector('input');
93+
expect(datePickerInput.value).toBe('7/7/2007');
94+
});
95+
96+
it('Should render a datepicker with timepicker', () => {
97+
render(<CreateDatePicker withTimePicker={{}} />);
98+
99+
act(() => {
100+
fireEvent.click(document.querySelector('input'));
101+
});
102+
103+
const timePicker = document.querySelector('.rc-tooltip').querySelectorAll('.popover-element')[2];
104+
expect(timePicker).toBeDefined();
105+
});
106+
107+
it('Should render datepicker with today date and time', () => {
108+
let currentDateTime: string;
109+
act(() => {
110+
render(<CreateDatePicker withTimePicker={{}} date={new Date()} />);
111+
currentDateTime = new Date().toLocaleString();
112+
});
113+
114+
const datePickerInput = document.querySelector('input');
115+
expect(datePickerInput.value).toBe(currentDateTime);
116+
});
117+
118+
it('Should close datepicker', () => {
119+
render(<CreateDatePicker withTimePicker={{}} />);
120+
121+
expect(document.querySelectorAll('.rc-tooltip').length).toBe(0);
122+
123+
act(() => {
124+
fireEvent.click(document.querySelector('input'));
125+
});
126+
expect(document.querySelectorAll('.rc-tooltip').length).toBe(1);
127+
128+
act(() => {
129+
fireEvent.click(screen.getByText('Close').parentElement);
130+
});
131+
expect(document.querySelectorAll('.rc-tooltip').length).toBe(0);
132+
});
133+
134+
it('Should not close datepicker with time picker when clicked on a date', () => {
135+
render(<CreateDatePicker withTimePicker={{}} date={new Date(2007, 6, 7)} />);
136+
137+
act(() => {
138+
fireEvent.click(document.querySelector('input'));
139+
});
140+
141+
let datePickerCalendar = document.querySelector('.sha-el-calendar');
142+
143+
const dateArray = datePickerCalendar.querySelectorAll('.sha-el-row')[2].querySelectorAll('.sha-el-col');
144+
act(() => {
145+
fireEvent.click(dateArray[0].querySelector('button'));
146+
});
147+
148+
datePickerCalendar = document.querySelector('.sha-el-calendar');
149+
expect(datePickerCalendar).toBeDefined();
150+
});
151+
152+
it('Should re-render on time change', () => {
153+
render(<CreateDatePicker withTimePicker={{}} date={new Date(2021, 6, 7)} />);
154+
155+
act(() => {
156+
fireEvent.click(document.querySelector('input'));
157+
});
158+
159+
const timePicker = document.querySelector('.rc-tooltip').querySelectorAll('.popover-element')[2];
160+
act(() => {
161+
fireEvent.click(timePicker.querySelector('input'));
162+
});
163+
const timePickerContainer = document.querySelectorAll('.rc-tooltip')[1].querySelector('.sha-el-row').parentElement;
164+
165+
const hours = timePickerContainer.querySelector('.hour-column').querySelectorAll('p');
166+
act(() => {
167+
fireEvent.click(hours[22]);
168+
});
169+
170+
const minutes = timePickerContainer.querySelector('.min-column').querySelectorAll('p');
171+
act(() => {
172+
fireEvent.click(minutes[45]);
173+
});
174+
175+
const seconds = timePickerContainer.querySelector('.sec-column').querySelectorAll('p');
176+
act(() => {
177+
fireEvent.click(seconds[49]);
178+
});
179+
180+
act(() => {
181+
fireEvent.click(screen.getByText('Close').parentElement);
182+
});
183+
expect(document.querySelector('input').value).toBe('7/7/2021, 10:45:49 PM');
184+
});
185+
});

0 commit comments

Comments
 (0)