@transferwise/components 46.92.0 → 46.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/build/actionOption/ActionOption.js +2 -0
  2. package/build/actionOption/ActionOption.js.map +1 -1
  3. package/build/actionOption/ActionOption.mjs +2 -0
  4. package/build/actionOption/ActionOption.mjs.map +1 -1
  5. package/build/common/Option/Option.js +9 -4
  6. package/build/common/Option/Option.js.map +1 -1
  7. package/build/common/Option/Option.mjs +10 -5
  8. package/build/common/Option/Option.mjs.map +1 -1
  9. package/build/dateLookup/dateTrigger/DateTrigger.js +11 -6
  10. package/build/dateLookup/dateTrigger/DateTrigger.js.map +1 -1
  11. package/build/dateLookup/dateTrigger/DateTrigger.mjs +11 -6
  12. package/build/dateLookup/dateTrigger/DateTrigger.mjs.map +1 -1
  13. package/build/definitionList/DefinitionList.js +5 -3
  14. package/build/definitionList/DefinitionList.js.map +1 -1
  15. package/build/definitionList/DefinitionList.mjs +5 -3
  16. package/build/definitionList/DefinitionList.mjs.map +1 -1
  17. package/build/main.css +23 -32
  18. package/build/snackbar/Snackbar.js +4 -2
  19. package/build/snackbar/Snackbar.js.map +1 -1
  20. package/build/snackbar/Snackbar.mjs +4 -2
  21. package/build/snackbar/Snackbar.mjs.map +1 -1
  22. package/build/styles/common/Option/Option.css +22 -0
  23. package/build/styles/dateLookup/dateTrigger/DateTrigger.css +1 -32
  24. package/build/styles/main.css +23 -32
  25. package/build/types/actionOption/ActionOption.d.ts +2 -1
  26. package/build/types/actionOption/ActionOption.d.ts.map +1 -1
  27. package/build/types/common/Option/Option.d.ts +1 -0
  28. package/build/types/common/Option/Option.d.ts.map +1 -1
  29. package/build/types/dateLookup/dateTrigger/DateTrigger.d.ts.map +1 -1
  30. package/build/types/definitionList/DefinitionList.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/actionOption/ActionOption.story.tsx +2 -0
  33. package/src/actionOption/ActionOption.tsx +3 -0
  34. package/src/common/Option/Option.css +22 -0
  35. package/src/common/Option/Option.less +21 -0
  36. package/src/common/Option/Option.spec.tsx +21 -0
  37. package/src/common/Option/Option.tsx +7 -1
  38. package/src/dateLookup/DateLookup.spec.tsx +445 -0
  39. package/src/dateLookup/dateTrigger/DateTrigger.css +1 -32
  40. package/src/dateLookup/dateTrigger/DateTrigger.less +4 -28
  41. package/src/dateLookup/dateTrigger/DateTrigger.tsx +9 -5
  42. package/src/definitionList/DefinitionList.tsx +3 -3
  43. package/src/inputs/InputGroup.story.tsx +5 -3
  44. package/src/listItem/ListItem.spec.tsx +10 -2
  45. package/src/listItem/ListItem.story.tsx +11 -3
  46. package/src/main.css +23 -32
  47. package/src/snackbar/Snackbar.tsx +3 -3
  48. package/src/withNextPortal/withNextPortal.spec.tsx +24 -0
  49. package/src/common/Option/Option.spec.js +0 -129
  50. package/src/dateLookup/DateLookup.proptypes.spec.js +0 -28
  51. package/src/dateLookup/DateLookup.rtl.spec.tsx +0 -199
  52. package/src/dateLookup/DateLookup.state.spec.js +0 -76
  53. package/src/dateLookup/DateLookup.testingLibrary.spec.js +0 -256
  54. package/src/dateLookup/DateLookup.view.spec.js +0 -151
  55. package/src/dateLookup/dateHeader/DateHeader.spec.js +0 -95
  56. package/src/dateLookup/dateTrigger/DateTrigger.spec.js +0 -123
  57. package/src/dateLookup/dayCalendar/DayCalendar.spec.js +0 -122
  58. package/src/dateLookup/dayCalendar/table/DayCalendarTable.spec.js +0 -147
  59. package/src/dateLookup/monthCalendar/MonthCalendar.spec.js +0 -105
  60. package/src/dateLookup/monthCalendar/table/MonthCalendarTable.spec.js +0 -120
  61. package/src/dateLookup/tableLink/TableLink.spec.js +0 -109
  62. package/src/dateLookup/yearCalendar/YearCalendar.spec.js +0 -88
  63. package/src/dateLookup/yearCalendar/table/YearCalendarTable.spec.js +0 -121
  64. package/src/modal/Modal.spec.js +0 -197
  65. package/src/withNextPortal/withNextPortal.spec.js +0 -22
  66. /package/src/modal/{Modal.rtl.spec.tsx → Modal.spec.tsx} +0 -0
@@ -1,256 +0,0 @@
1
- import { userEvent } from '@testing-library/user-event';
2
- import { act } from 'react';
3
-
4
- import { render, screen, mockMatchMedia } from '../test-utils';
5
- import DateLookup from './DateLookup';
6
-
7
- mockMatchMedia();
8
-
9
- jest.mock(
10
- '../dimmer',
11
- () =>
12
- function ({ children }) {
13
- return <div className="dimmer">{children}</div>;
14
- },
15
- );
16
-
17
- describe('DateLookup (events)', () => {
18
- const date = new Date(2018, 11, 27);
19
- const min = new Date(2018, 11, 26);
20
- const max = new Date(2018, 11, 28);
21
-
22
- describe('when not clearable', () => {
23
- /** @type {jest.Mock} */
24
- let handleChange;
25
-
26
- const setup = async (overrides = {}) => {
27
- handleChange = jest.fn();
28
-
29
- /** @type {import('@testing-library/react').RenderResult} */
30
- let view;
31
- await act(async () => {
32
- view = render(
33
- <>
34
- {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
35
- <label id="prioritized-label">Prioritized label</label>
36
- <DateLookup
37
- value={date}
38
- min={min}
39
- max={max}
40
- size="lg"
41
- placeholder="Select date"
42
- label="label"
43
- aria-labelledby="prioritized-label"
44
- disabled={false}
45
- clearable={false}
46
- onChange={handleChange}
47
- onClick={jest.fn()}
48
- {...overrides}
49
- />
50
- </>,
51
- );
52
- });
53
- return view;
54
- };
55
-
56
- it('switches to years', async () => {
57
- const view = await setup();
58
- await openDateLookup(view);
59
- await clickDateButton(view);
60
-
61
- expect(getActiveYearButton(view)).toHaveFocus();
62
-
63
- await closeDateLookup(view);
64
- });
65
-
66
- it('has aria-label for 20 years', async () => {
67
- const view = await setup();
68
- await openDateLookup(view);
69
- await clickDateButton(view);
70
-
71
- expect(getButtonByAriaLabel('next 20 years')).toBeInTheDocument();
72
- expect(getButtonByAriaLabel('previous 20 years')).toBeInTheDocument();
73
-
74
- await closeDateLookup(view);
75
- });
76
-
77
- it('switches to months', async () => {
78
- const view = await setup();
79
- await openDateLookup(view);
80
- await clickDateButton(view);
81
- await userEvent.click(getActiveYearButton(view));
82
-
83
- expect(getActiveMonthButton(view)).toHaveFocus();
84
-
85
- await closeDateLookup(view);
86
- });
87
-
88
- it('has aria label for year', async () => {
89
- const view = await setup();
90
- await openDateLookup(view);
91
- await clickDateButton(view);
92
- await userEvent.click(getActiveYearButton(view));
93
-
94
- expect(getButtonByAriaLabel('next year')).toBeInTheDocument();
95
- expect(getButtonByAriaLabel('previous year')).toBeInTheDocument();
96
-
97
- await closeDateLookup(view);
98
- });
99
-
100
- it('switches to days', async () => {
101
- const view = await setup();
102
- await openDateLookup(view);
103
- await clickDateButton(view);
104
- await userEvent.click(getActiveYearButton(view));
105
- await userEvent.click(getActiveMonthButton(view));
106
-
107
- expect(getActiveDayButton(view)).toHaveFocus();
108
-
109
- await closeDateLookup(view);
110
- });
111
-
112
- it('has aria label for month', async () => {
113
- const view = await setup();
114
- await openDateLookup(view);
115
- await clickDateButton(view);
116
- await userEvent.click(getActiveYearButton(view));
117
- await userEvent.click(getActiveMonthButton(view));
118
-
119
- expect(getButtonByAriaLabel('next month')).toBeInTheDocument();
120
- expect(getButtonByAriaLabel('previous month')).toBeInTheDocument();
121
-
122
- await closeDateLookup(view);
123
- });
124
-
125
- it('updates selected date and closes', async () => {
126
- const view = await setup();
127
- await openDateLookup(view);
128
- const d = new Date(2018, 11, 28);
129
- const newDay = screen.getByText(d.getDate().toString());
130
- await userEvent.click(newDay);
131
-
132
- expect(handleChange).toHaveBeenCalledWith(d);
133
- expect(getOpenButton(view)).toHaveFocus();
134
-
135
- await closeDateLookup(view);
136
- });
137
-
138
- it('has aria label on selected date', async () => {
139
- const view = await setup();
140
- await openDateLookup(view);
141
- const d = new Date(2018, 11, 28);
142
- const newDay = screen.getByText(d.getDate().toString());
143
- await userEvent.click(newDay);
144
- await openDateLookup(view);
145
- expect(screen.getByRole('button', { name: /selected day/i })).toBeInTheDocument();
146
-
147
- await closeDateLookup(view);
148
- });
149
-
150
- it('supports custom `aria-labelledby` attribute', async () => {
151
- const view = await setup();
152
- expect(screen.getByRole('button', { name: /^Prioritized label/ })).toBeInTheDocument();
153
- await closeDateLookup(view);
154
- });
155
-
156
- it('reads our the HTML label as well as the input prefix and the value', async () => {
157
- const view = await setup();
158
- expect(
159
- screen.getByRole('button', { name: 'Prioritized label label 27 December 2018' }),
160
- ).toBeInTheDocument();
161
- await closeDateLookup(view);
162
- });
163
-
164
- it('reads our the HTML label as well as the input prefix and the placeholder', async () => {
165
- const view = await setup({ value: undefined });
166
- expect(
167
- screen.getByRole('button', { name: 'Prioritized label label Select date' }),
168
- ).toBeInTheDocument();
169
- await closeDateLookup(view);
170
- });
171
- });
172
-
173
- describe('when is clearable', () => {
174
- /** @satisfies {import('./DateLookup').DateLookupProps} */
175
- const props = {
176
- value: date,
177
- onChange: jest.fn(),
178
- clearable: true,
179
- };
180
-
181
- const setup = async () => {
182
- /** @type {import('@testing-library/react').RenderResult} */
183
- let view;
184
- await act(async () => {
185
- view = render(<DateLookup {...props} />);
186
- });
187
- return view;
188
- };
189
-
190
- it(`doesn't show clear button if disable is true`, async () => {
191
- const view = await setup();
192
- expect(getClearButton(view)).toBeInTheDocument();
193
-
194
- view.rerender(<DateLookup {...props} disabled />);
195
-
196
- expect(getClearButton(view)).not.toBeInTheDocument();
197
- });
198
-
199
- it('when user clicks on clear the focus returns to btn', async () => {
200
- const view = await setup();
201
- await clickClearButton(view);
202
- expect(getOpenButton(view)).toHaveFocus();
203
- });
204
-
205
- it('onChange gets called with null when reset button is clicked', async () => {
206
- const view = await setup();
207
- await clickClearButton(view);
208
- expect(props.onChange).toHaveBeenCalledWith(null);
209
- });
210
- });
211
-
212
- const openDateLookup = async (
213
- /** @type {import('@testing-library/react').RenderResult} */ view,
214
- ) => userEvent.click(getOpenButton(view));
215
-
216
- const clickDateButton = async (
217
- /** @type {import('@testing-library/react').RenderResult} */ view,
218
- ) => userEvent.click(getDateButton(view));
219
-
220
- // Close dateLookup and removes events attached to documents.
221
- const closeDateLookup = async (
222
- /** @type {import('@testing-library/react').RenderResult} */ view,
223
- ) => userEvent.click(view.container);
224
-
225
- const clickClearButton = async (
226
- /** @type {import('@testing-library/react').RenderResult} */ view,
227
- ) => userEvent.click(getClearButton(view));
228
-
229
- const getActiveYearButton = (
230
- /** @type {import('@testing-library/react').RenderResult} */ view,
231
- ) => {
232
- return view.container.querySelector('button.tw-date-lookup-year-option.active');
233
- };
234
-
235
- const getActiveMonthButton = (
236
- /** @type {import('@testing-library/react').RenderResult} */ view,
237
- ) => {
238
- return view.container.querySelector('button.tw-date-lookup-month-option.active');
239
- };
240
-
241
- const getActiveDayButton = (
242
- /** @type {import('@testing-library/react').RenderResult} */ view,
243
- ) => {
244
- return view.container.querySelector('button.tw-date-lookup-day-option.active');
245
- };
246
-
247
- const getButtonByAriaLabel = (/** @type {string} */ ariaLabel) => {
248
- return screen.getByRole('button', { name: ariaLabel });
249
- };
250
- const getClearButton = (/** @type {import('@testing-library/react').RenderResult} */ view) =>
251
- view.container.querySelector('.clear-btn');
252
- const getOpenButton = (/** @type {import('@testing-library/react').RenderResult} */ view) =>
253
- view.container.querySelector('button.np-date-trigger');
254
- const getDateButton = (/** @type {import('@testing-library/react').RenderResult} */ view) =>
255
- view.container.querySelector('button.tw-date-lookup-header-current');
256
- });
@@ -1,151 +0,0 @@
1
- import { shallow } from 'enzyme';
2
-
3
- import { mockMatchMedia } from '../test-utils';
4
-
5
- import DateTrigger from './dateTrigger';
6
- import DayCalendar from './dayCalendar';
7
- import MonthCalendar from './monthCalendar';
8
- import YearCalendar from './yearCalendar';
9
-
10
- import { DateLookupWithoutInputAttributes as DateLookup } from './DateLookup';
11
-
12
- mockMatchMedia();
13
-
14
- const defaultLocale = 'en-GB';
15
- jest.mock('react-intl', () => ({
16
- injectIntl: (Component) =>
17
- function (props) {
18
- return <Component {...props} intl={{ locale: defaultLocale }} />;
19
- },
20
- useIntl: () => ({ locale: defaultLocale }),
21
- defineMessages: (translations) => translations,
22
- }));
23
-
24
- describe('DateLookup view', () => {
25
- const date = new Date(2018, 11, 27);
26
- const min = new Date(2018, 11, 26);
27
- const max = new Date(2018, 11, 28);
28
- let component;
29
- let props;
30
-
31
- beforeEach(() => {
32
- props = {
33
- value: date,
34
- min,
35
- max,
36
- size: 'lg',
37
- placeholder: 'Asd..',
38
- label: 'Date..',
39
- onChange: jest.fn(),
40
- id: '123456',
41
- };
42
- component = shallow(<DateLookup {...props} />);
43
- });
44
-
45
- it('shows open button', () => {
46
- expect(dateTrigger()).toHaveLength(1);
47
- });
48
-
49
- it('passes id to the component', () => {
50
- expect(component.prop('id')).toBe('123456');
51
- });
52
-
53
- it('passes props forward to open button', () => {
54
- expect(Number(dateTrigger().prop('selectedDate'))).toBe(Number(date));
55
- expect(dateTrigger().prop('size')).toBe('lg');
56
- expect(dateTrigger().prop('placeholder')).toBe('Asd..');
57
- expect(dateTrigger().prop('label')).toBe('Date..');
58
- expect(dateTrigger().prop('monthFormat')).toBe('long');
59
- expect(dateTrigger().prop('disabled')).toBe(false);
60
- expect(dateTrigger().prop('onClick')).toBe(component.instance().open);
61
- expect(dateTrigger().prop('children')).not.toBeNull();
62
- });
63
-
64
- it('passes onClear prop to open button', () => {
65
- component.setProps({ clearable: true });
66
- expect(dateTrigger().prop('onClear')).not.toBeNull();
67
- });
68
-
69
- describe('when in day mode', () => {
70
- beforeEach(() => {
71
- component.setState({ open: true, mode: 'day' });
72
- });
73
-
74
- it('renders day calendar', () => {
75
- expect(dayCalendar()).toHaveLength(1);
76
- });
77
-
78
- it('passes props forward to day calendar', () => {
79
- expect(Number(dayCalendar().prop('selectedDate'))).toBe(Number(date));
80
- expect(Number(dayCalendar().prop('min'))).toBe(Number(min));
81
- expect(Number(dayCalendar().prop('max'))).toBe(Number(max));
82
- expect(dayCalendar().prop('viewMonth')).toBe(11);
83
- expect(dayCalendar().prop('viewYear')).toBe(2018);
84
- expect(dayCalendar().prop('monthFormat')).toBe('long');
85
- });
86
-
87
- it('passes event handlers forward to day calendar', () => {
88
- expect(dayCalendar().prop('onSelect')).toBe(component.instance().handleSelectedDateUpdate);
89
- expect(dayCalendar().prop('onLabelClick')).toBe(component.instance().switchToYears);
90
- expect(dayCalendar().prop('onViewDateUpdate')).toBe(
91
- component.instance().handleViewDateUpdate,
92
- );
93
- });
94
- });
95
-
96
- describe('when in month mode', () => {
97
- beforeEach(() => {
98
- component.setState({ open: true, mode: 'month' });
99
- });
100
-
101
- it('renders month calendar', () => {
102
- expect(monthCalendar()).toHaveLength(1);
103
- });
104
-
105
- it('passes props forward to month calendar', () => {
106
- expect(Number(monthCalendar().prop('selectedDate'))).toBe(Number(date));
107
- expect(Number(monthCalendar().prop('min'))).toBe(Number(min));
108
- expect(Number(monthCalendar().prop('max'))).toBe(Number(max));
109
- expect(monthCalendar().prop('viewYear')).toBe(2018);
110
- expect(monthCalendar().prop('placeholder')).toBe('Asd..');
111
- });
112
-
113
- it('passes event handlers forward to month calendar', () => {
114
- expect(monthCalendar().prop('onSelect')).toBe(component.instance().switchToDays);
115
- expect(monthCalendar().prop('onLabelClick')).toBe(component.instance().switchToYears);
116
- expect(monthCalendar().prop('onViewDateUpdate')).toBe(
117
- component.instance().handleViewDateUpdate,
118
- );
119
- });
120
- });
121
-
122
- describe('when in year mode', () => {
123
- beforeEach(() => {
124
- component.setState({ open: true, mode: 'year' });
125
- });
126
-
127
- it('renders year calendar', () => {
128
- expect(yearCalendar()).toHaveLength(1);
129
- });
130
-
131
- it('passes props forward to year calendar', () => {
132
- expect(Number(yearCalendar().prop('selectedDate'))).toBe(Number(date));
133
- expect(Number(yearCalendar().prop('min'))).toBe(Number(min));
134
- expect(Number(yearCalendar().prop('max'))).toBe(Number(max));
135
- expect(yearCalendar().prop('viewYear')).toBe(2018);
136
- expect(yearCalendar().prop('placeholder')).toBe('Asd..');
137
- });
138
-
139
- it('passes event handlers forward to year calendar', () => {
140
- expect(yearCalendar().prop('onSelect')).toBe(component.instance().switchToMonths);
141
- expect(yearCalendar().prop('onViewDateUpdate')).toBe(
142
- component.instance().handleViewDateUpdate,
143
- );
144
- });
145
- });
146
-
147
- const dateTrigger = () => component.find(DateTrigger);
148
- const dayCalendar = () => component.find(DayCalendar);
149
- const monthCalendar = () => component.find(MonthCalendar);
150
- const yearCalendar = () => component.find(YearCalendar);
151
- });
@@ -1,95 +0,0 @@
1
- import { shallow } from 'enzyme';
2
- import { useIntl } from 'react-intl';
3
-
4
- import Chevron from '../../chevron';
5
- import { mockMatchMedia } from '../../test-utils';
6
-
7
- import DateHeader from '.';
8
-
9
- mockMatchMedia();
10
- jest.mock('react-intl');
11
- jest.mock('../DateLookup.messages', () => ({
12
- previous: {
13
- id: 'neptune.DateLookup.previous',
14
- defaultMessage: 'previous',
15
- },
16
- next: {
17
- id: 'neptune.DateLookup.next',
18
- defaultMessage: 'next',
19
- },
20
- goTo20YearView: {
21
- id: 'neptune.DateLookup.goTo20YearView',
22
- defaultMessage: 'go to 20 year view',
23
- },
24
- }));
25
- describe('DateHeader', () => {
26
- let component;
27
- let props;
28
-
29
- beforeEach(() => {
30
- useIntl.mockReturnValue({
31
- locale: 'en-GB',
32
- formatMessage: (message) => message.defaultMessage,
33
- defineMessages: (translations) => translations,
34
- });
35
- props = {
36
- onPreviousClick: jest.fn(),
37
- onNextClick: jest.fn(),
38
- dateMode: 'year',
39
- };
40
- component = shallow(<DateHeader {...props} />);
41
- });
42
-
43
- it('shows previous and next buttons', () => {
44
- const chevrons = component.find(Chevron);
45
- expect(chevrons).toHaveLength(2);
46
- });
47
-
48
- it('does not show label and middle button by default', () => {
49
- expect(component.find('button')).toHaveLength(2);
50
- expect(component.find('tw-date-lookup-header-current')).toHaveLength(0);
51
- });
52
-
53
- it('calls previous button handler on previous click', () => {
54
- component.find('button').at(0).simulate('click');
55
- expect(props.onPreviousClick).toHaveBeenCalledTimes(1);
56
- });
57
-
58
- it('calls next button handler on next click', () => {
59
- component.find('button').at(1).simulate('click');
60
- expect(props.onNextClick).toHaveBeenCalledTimes(1);
61
- });
62
-
63
- it('has aria-label on previous button', () => {
64
- let previous = component.find('button').at(0);
65
- expect(previous.prop('aria-label')).toBe('previous year');
66
- });
67
-
68
- it('has aria-label on next button', () => {
69
- let previous = component.find('button').at(1);
70
- expect(previous.prop('aria-label')).toBe('next year');
71
- });
72
-
73
- describe('when label is provided', () => {
74
- beforeEach(() => {
75
- component.setProps({ label: 'trolo' });
76
- useIntl.mockReturnValue({
77
- locale: 'en-GB',
78
- formatMessage: (message) => message,
79
- defineMessages: (translations) => translations,
80
- });
81
- });
82
-
83
- it('shows the label', () => {
84
- expect(component.find('button')).toHaveLength(3);
85
- expect(component.find('.tw-date-lookup-header-current').text()).toBe('trolo');
86
- });
87
-
88
- it('calls label click handler on label click', () => {
89
- const onLabelClick = jest.fn();
90
- component.setProps({ onLabelClick });
91
- component.find('.tw-date-lookup-header-current').simulate('click');
92
- expect(onLabelClick).toHaveBeenCalledTimes(1);
93
- });
94
- });
95
- });
@@ -1,123 +0,0 @@
1
- import * as formatting from '@transferwise/formatting';
2
- import { shallow } from 'enzyme';
3
-
4
- import Chevron from '../../chevron';
5
-
6
- import DateTrigger from '.';
7
-
8
- const locale = 'en-GB';
9
- const formatMessage = (message) => message.id;
10
-
11
- jest.mock('react-intl', () => ({
12
- ...jest.requireActual('react-intl'),
13
- useIntl: jest.fn(() => ({ locale, formatMessage })),
14
- }));
15
-
16
- jest.mock('@transferwise/formatting', () => ({
17
- formatDate: jest.fn().mockReturnValue('1.2.3'),
18
- }));
19
-
20
- describe('DateTrigger', () => {
21
- const selectedDate = new Date(1990, 11, 27);
22
- const locale = 'en-GB';
23
- let component;
24
- let props;
25
-
26
- beforeEach(() => {
27
- props = {
28
- 'aria-expanded': false,
29
- size: 'md',
30
- placeholder: 'Enter date..',
31
- label: '',
32
- monthFormat: 'long',
33
- disabled: false,
34
- onClick: jest.fn(),
35
- onClear: null,
36
- };
37
-
38
- component = shallow(<DateTrigger {...props} />);
39
- });
40
-
41
- it('shows placeholder', () => {
42
- expect(button().text()).toContain('Enter date..');
43
- });
44
-
45
- describe('when date is provided', () => {
46
- beforeEach(() => {
47
- component.setProps({ selectedDate });
48
- });
49
-
50
- it('shows selected date in long format', () => {
51
- expect(button().text()).toContain('1.2.3');
52
- expect(formatting.formatDate).toHaveBeenLastCalledWith(selectedDate, locale, {
53
- day: 'numeric',
54
- month: 'long',
55
- year: 'numeric',
56
- });
57
- });
58
-
59
- it('shows selected date in short format', () => {
60
- component.setProps({ monthFormat: 'short' });
61
- expect(formatting.formatDate).toHaveBeenLastCalledWith(selectedDate, locale, {
62
- day: 'numeric',
63
- month: 'short',
64
- year: 'numeric',
65
- });
66
- });
67
- });
68
-
69
- it('does not show label by default', () => {
70
- expect(label()).toHaveLength(0);
71
- });
72
-
73
- it('shows label when provided', () => {
74
- component.setProps({ label: 'hello' });
75
- expect(label().text()).toBe('hello');
76
- });
77
-
78
- it('adds label to clear button aria-label', () => {
79
- const onClear = jest.fn();
80
- component.setProps({ label: 'hello', onClear });
81
- expect(clearButton().prop('aria-label')).toBe('neptune.ClearButton.ariaLabel hello');
82
- });
83
-
84
- it('calls on click handler on button click', () => {
85
- button().simulate('click');
86
- expect(props.onClick).toHaveBeenCalledTimes(1);
87
- });
88
-
89
- it('can disable the button', () => {
90
- component.setProps({ disabled: true });
91
- expect(button().prop('disabled')).toBe(true);
92
- });
93
-
94
- it('shows small button', () => {
95
- component.setProps({ size: 'sm' });
96
- expect(button().hasClass('btn-sm')).toBe(true);
97
- });
98
-
99
- it('shows medium button', () => {
100
- component.setProps({ size: 'md' });
101
- expect(button().hasClass('btn-md')).toBe(true);
102
- });
103
-
104
- it('shows large button', () => {
105
- component.setProps({ size: 'lg' });
106
- expect(button().hasClass('btn-lg')).toBe(true);
107
- });
108
-
109
- it('shows chevron button when onClear is not provided', () => {
110
- expect(clearButton()).toHaveLength(0);
111
- expect(chevron()).toHaveLength(1);
112
- });
113
-
114
- it('shows clear button when onClear is provided', () => {
115
- component.setProps({ onClear: jest.fn() });
116
- expect(clearButton()).toHaveLength(1);
117
- });
118
-
119
- const button = () => component.find('.np-date-trigger');
120
- const clearButton = () => component.find('.clear-btn');
121
- const chevron = () => component.find(Chevron);
122
- const label = () => component.find('.np-date-trigger-label');
123
- });