@kaizen/components 1.61.0 → 1.61.2
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.
- package/codemods/utils/__snapshots__/transformSource.spec.ts.snap +2 -2
- package/dist/cjs/RichTextEditor/RichTextContent/RichTextContent.cjs +10 -1
- package/dist/esm/RichTextEditor/RichTextContent/RichTextContent.mjs +11 -2
- package/dist/styles.css +115 -114
- package/package.json +5 -4
- package/src/Avatar/Avatar.spec.tsx +1 -1
- package/src/Calendar/utils/setFocusInCalendar.spec.tsx +2 -2
- package/src/Checkbox/Checkbox/Checkbox.spec.tsx +2 -2
- package/src/Collapsible/Collapsible/Collapsible.spec.tsx +2 -14
- package/src/Collapsible/Collapsible/_docs/Collapsible.stickersheet.stories.tsx +49 -0
- package/src/Collapsible/Collapsible/_docs/Collapsible.stories.tsx +0 -11
- package/src/DateInput/DateInputDescription/DateInputDescription.spec.tsx +5 -6
- package/src/DateInput/DateInputWithIconButton/DateInputWithIconButton.spec.tsx +4 -6
- package/src/DatePicker/DatePicker.spec.tsx +32 -36
- package/src/DatePicker/subcomponents/DateInputField/DateInputField.spec.tsx +13 -13
- package/src/DatePicker/utils/validateDate.spec.ts +5 -6
- package/src/EmptyState/EmptyState.spec.tsx +1 -1
- package/src/ErrorPage/ErrorPage.spec.tsx +19 -19
- package/src/Filter/FilterBar/FilterBar.spec.tsx +26 -26
- package/src/Filter/FilterBar/context/utils/updateDependentFilters.spec.ts +2 -4
- package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.spec.tsx +3 -4
- package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.spec.tsx +3 -6
- package/src/Filter/FilterBar/subcomponents/FilterBarDatePicker/FilterBarDatePicker.spec.tsx +10 -12
- package/src/Filter/FilterBar/subcomponents/FilterBarDateRangePicker/FilterBarDateRangePicker.spec.tsx +9 -10
- package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.spec.tsx +12 -14
- package/src/Filter/FilterBar/subcomponents/FilterBarSelect/FilterBarSelect.spec.tsx +11 -13
- package/src/Filter/FilterButton/FilterButtonRemovable/FilterButtonRemovable.spec.tsx +5 -5
- package/src/Filter/FilterDatePicker/FilterDatePicker.spec.tsx +12 -15
- package/src/Filter/FilterDatePicker/hooks/useDateInputHandlers.spec.ts +12 -15
- package/src/Filter/FilterDatePicker/hooks/useDateValidation.spec.ts +3 -5
- package/src/Filter/FilterDatePicker/subcomponents/FilterDatePickerField/FilterDatePickerField.spec.tsx +23 -28
- package/src/Filter/FilterDatePicker/utils/getDateValidationHandler.spec.tsx +2 -6
- package/src/Filter/FilterDatePicker/utils/validateDate.spec.ts +5 -6
- package/src/Filter/FilterDateRangePicker/FilterDateRangePicker.spec.tsx +2 -3
- package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.stickersheet.stories.tsx +27 -0
- package/src/Filter/FilterDateRangePicker/subcomponents/DateRangeInputField/DateRangeInputField.spec.tsx +9 -11
- package/src/Filter/FilterDateRangePicker/subcomponents/DateRangeValidationMessage/DateRangeValidationMessage.spec.tsx +1 -63
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/FilterDateRangePickerField.spec.tsx +32 -32
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useEndDateValidation.spec.ts +3 -8
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/hooks/useStartDateValidation.spec.ts +2 -5
- package/src/Filter/FilterDateRangePicker/subcomponents/FilterDateRangePickerField/utils/validateEndDateBeforeStartDate.spec.ts +2 -3
- package/src/Filter/FilterMultiSelect/FilterMultiSelect.spec.tsx +9 -10
- package/src/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.spec.tsx +2 -1
- package/src/Filter/FilterMultiSelect/context/SelectionProvider/SelectionProvider.spec.tsx +32 -32
- package/src/Filter/FilterMultiSelect/subcomponents/MultiSelectOption/MultiSelectOption.spec.tsx +9 -7
- package/src/Filter/FilterMultiSelect/subcomponents/SearchInput/SearchInput.spec.tsx +12 -12
- package/src/Filter/FilterMultiSelect/subcomponents/SelectionControlButton/ClearButton/ClearButton.spec.tsx +7 -7
- package/src/Filter/FilterMultiSelect/subcomponents/SelectionControlButton/SelectAllButton/SelectAllButton.spec.tsx +9 -9
- package/src/Filter/FilterSelect/FilterSelect.spec.tsx +2 -2
- package/src/Heading/Heading.spec.tsx +1 -31
- package/src/Illustration/subcomponents/VideoPlayer/VideoPlayer.spec.tsx +43 -97
- package/src/Illustration/subcomponents/VideoPlayer/VideoPlayer.stickersheet.stories.tsx +68 -0
- package/src/Illustration/subcomponents/VideoPlayer/VideoPlayer.stories.tsx +37 -0
- package/src/Input/InputRange/InputRange.spec.tsx +2 -2
- package/src/Input/InputSearch/InputSearch.spec.tsx +3 -5
- package/src/KaizenProvider/KaizenProvider.spec.tsx +2 -2
- package/src/KaizenProvider/subcomponents/OptionalIntlProvider/OptionalIntlProvider.spec.tsx +2 -3
- package/src/Modal/ConfirmationModal/ConfirmationModal.spec.tsx +7 -7
- package/src/Modal/ContextModal/ContextModal.spec.tsx +5 -5
- package/src/Modal/GenericModal/GenericModal.spec.tsx +4 -4
- package/src/Modal/InputEditModal/InputEditModal.spec.tsx +7 -7
- package/src/MultiSelect/subcomponents/MultiSelectOptionField/MultiSelectOptionField.spec.tsx +3 -3
- package/src/MultiSelect/subcomponents/MultiSelectOptions/MultiSelectOptions.spec.tsx +3 -3
- package/src/MultiSelect/subcomponents/MultiSelectToggle/MultiSelectToggle.spec.tsx +2 -2
- package/src/Notification/subcomponents/GenericNotification/GenericNotification.stories.tsx +60 -0
- package/src/Pagination/Pagination.spec.tsx +2 -2
- package/src/RichTextEditor/EditableRichTextContent/EditableRichTextContent.spec.tsx +4 -4
- package/src/RichTextEditor/RichTextContent/RichTextContent.tsx +11 -2
- package/src/RichTextEditor/utils/commands/addMark.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/fixtures/helpers.ts +4 -3
- package/src/RichTextEditor/utils/commands/getMarkAttrs.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/getMarkRange.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/listIsActive.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/markContainsSelection.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/markIsActive.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/removeMark.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/updateMark.spec.ts +2 -2
- package/src/RichTextEditor/utils/commands/validateAndRemoveMarks.spec.ts +3 -3
- package/src/RichTextEditor/utils/core/createRichTextEditor.spec.ts +11 -11
- package/src/RichTextEditor/utils/core/hooks/useRichTextEditor.spec.tsx +2 -2
- package/src/SplitButton/SplitButton.spec.tsx +5 -5
- package/src/SplitButton/subcomponents/DropdownButton/DropdownButton.spec.tsx +3 -4
- package/src/Text/Text.spec.tsx +1 -57
- package/src/TextArea/TextArea.spec.tsx +2 -2
- package/src/TimeField/TimeField.spec.tsx +2 -2
- package/src/TitleBlockZen/TitleBlockZen.spec.tsx +36 -68
- package/src/TitleBlockZen/_docs/TitleBlockZen.stories.tsx +78 -8
- package/src/TitleBlockZen/subcomponents/MobileActions.spec.tsx +2 -2
- package/src/TitleBlockZen/subcomponents/NavigationTabs.spec.tsx +8 -2
- package/src/ToggleSwitch/ToggleSwitch/ToggleSwitch.spec.tsx +2 -2
- package/src/__actions__/Menu/v1/Menu.spec.tsx +2 -2
- package/src/__containers__/GuidanceBlock/v1/GuidanceBlock.spec.tsx +5 -5
- package/src/__containers__/GuidanceBlock/v2/GuidanceBlock.spec.tsx +5 -5
- package/src/__future__/Select/Select.spec.tsx +4 -4
- package/src/__layout__/Workflow/v3/_docs/Workflow.stories.tsx +8 -2
- package/src/__layout__/Workflow/v3/subcomponents/Footer/components/Root/FooterRoot.module.css +1 -0
- package/src/__layout__/Workflow/v3/subcomponents/Header/components/Root/Root.module.css +1 -1
- package/src/__overlays__/Tooltip/v1/Tooltip.spec.tsx +1 -1
- package/src/__overlays__/Tooltip/v1/utils/isSemanticElement.spec.tsx +4 -9
- package/src/utils/useMediaQueries.spec.tsx +7 -7
- package/src/Heading/__snapshots__/Heading.spec.tsx.snap +0 -85
- package/src/Illustration/utils/usePausePlay.spec.tsx +0 -85
- package/src/Notification/subcomponents/GenericNotification/GenericNotification.spec.tsx +0 -76
- package/src/Text/__snapshots__/Text.spec.tsx.snap +0 -49
- package/src/__overlays__/Tooltip/v1/subcomponents/AppearanceAnim.spec.tsx +0 -39
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState } from "react"
|
|
2
2
|
import { render, screen, waitFor, within } from "@testing-library/react"
|
|
3
3
|
import userEvent from "@testing-library/user-event"
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
import { FilterButton } from "~components/Filter/FilterButton"
|
|
6
6
|
import { FilterDatePicker, FilterDatePickerProps } from "."
|
|
7
7
|
|
|
@@ -42,9 +42,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
42
42
|
|
|
43
43
|
describe("Filter button", () => {
|
|
44
44
|
it("should show the selected date in the button", async () => {
|
|
45
|
-
|
|
46
|
-
<FilterDatePickerWrapper selectedDate={new Date("2022-05-01")} />
|
|
47
|
-
)
|
|
45
|
+
render(<FilterDatePickerWrapper selectedDate={new Date("2022-05-01")} />)
|
|
48
46
|
await waitFor(() => {
|
|
49
47
|
const filterButton = screen.getByRole("button", {
|
|
50
48
|
name: "Drank : 1 May 2022",
|
|
@@ -54,7 +52,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
54
52
|
})
|
|
55
53
|
|
|
56
54
|
it("should show the calendar when the filter button is clicked", async () => {
|
|
57
|
-
|
|
55
|
+
render(<FilterDatePickerWrapper />)
|
|
58
56
|
|
|
59
57
|
const filterButton = screen.getByRole("button", {
|
|
60
58
|
name: "Drank",
|
|
@@ -67,7 +65,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
67
65
|
})
|
|
68
66
|
|
|
69
67
|
it("closes the popover when a valid date has been submitted via the calendar picker", async () => {
|
|
70
|
-
const { getByRole } =
|
|
68
|
+
const { getByRole } = render(<FilterDatePickerWrapper />)
|
|
71
69
|
const triggerButton = getByRole("button", {
|
|
72
70
|
name: "Drank",
|
|
73
71
|
})
|
|
@@ -90,7 +88,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
90
88
|
|
|
91
89
|
describe("Text input", () => {
|
|
92
90
|
it("validates the date on blur", async () => {
|
|
93
|
-
const { getByRole, getByLabelText, getByText } =
|
|
91
|
+
const { getByRole, getByLabelText, getByText } = render(
|
|
94
92
|
<FilterDatePickerWrapper />
|
|
95
93
|
)
|
|
96
94
|
const triggerButton = getByRole("button", {
|
|
@@ -116,7 +114,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
116
114
|
|
|
117
115
|
describe("Pressing Enter in the text input", () => {
|
|
118
116
|
it("closes the popover when a valid date has been submitted via the text input field", async () => {
|
|
119
|
-
const { getByRole, getByLabelText } =
|
|
117
|
+
const { getByRole, getByLabelText } = render(
|
|
120
118
|
<FilterDatePickerWrapper />
|
|
121
119
|
)
|
|
122
120
|
const triggerButton = getByRole("button", {
|
|
@@ -141,7 +139,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
141
139
|
})
|
|
142
140
|
|
|
143
141
|
it("does not close the popover when an invalid date has been submitted via the text input field", async () => {
|
|
144
|
-
const { getByRole, getByLabelText, getByText } =
|
|
142
|
+
const { getByRole, getByLabelText, getByText } = render(
|
|
145
143
|
<FilterDatePickerWrapper />
|
|
146
144
|
)
|
|
147
145
|
const triggerButton = getByRole("button", {
|
|
@@ -168,10 +166,9 @@ describe("<FilterDatePicker />", () => {
|
|
|
168
166
|
})
|
|
169
167
|
|
|
170
168
|
it("does not close the popover when the text input field has been cleared", async () => {
|
|
171
|
-
const { getByRole, getByLabelText, getByText, queryByText } =
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
)
|
|
169
|
+
const { getByRole, getByLabelText, getByText, queryByText } = render(
|
|
170
|
+
<FilterDatePickerWrapper selectedDate={new Date("32/13/2022")} />
|
|
171
|
+
)
|
|
175
172
|
const triggerButton = getByRole("button", {
|
|
176
173
|
name: "Drank : Invalid Date",
|
|
177
174
|
})
|
|
@@ -198,7 +195,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
198
195
|
})
|
|
199
196
|
|
|
200
197
|
it("does not close the popover when there is a selected date and the user navigates months", async () => {
|
|
201
|
-
const { getByRole } =
|
|
198
|
+
const { getByRole } = render(
|
|
202
199
|
<FilterDatePickerWrapper selectedDate={new Date("01/01/2022")} />
|
|
203
200
|
)
|
|
204
201
|
const triggerButton = getByRole("button", {
|
|
@@ -224,7 +221,7 @@ describe("<FilterDatePicker />", () => {
|
|
|
224
221
|
})
|
|
225
222
|
|
|
226
223
|
it("updates the selected value in the trigger button when typing a date", async () => {
|
|
227
|
-
const { getByRole, getByLabelText } =
|
|
224
|
+
const { getByRole, getByLabelText } = render(
|
|
228
225
|
<FilterDatePickerWrapper selectedDate={new Date("06-06-2022")} />
|
|
229
226
|
)
|
|
230
227
|
const triggerButton = getByRole("button", {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { ChangeEvent, FocusEvent, KeyboardEvent } from "react"
|
|
2
2
|
import { renderHook, act } from "@testing-library/react"
|
|
3
3
|
import { enAU } from "date-fns/locale"
|
|
4
|
+
import { vi } from "vitest"
|
|
4
5
|
import * as isSelectingDayInCalendar from "~components/Calendar/utils/isSelectingDayInCalendar"
|
|
5
6
|
import { useDateInputHandlers } from "./useDateInputHandlers"
|
|
6
|
-
|
|
7
7
|
const locale = enAU
|
|
8
|
-
const setInputValue =
|
|
9
|
-
const onDateChange =
|
|
8
|
+
const setInputValue = vi.fn()
|
|
9
|
+
const onDateChange = vi.fn()
|
|
10
10
|
|
|
11
11
|
describe("useDateInputHandlers", () => {
|
|
12
12
|
beforeEach(() => {
|
|
13
|
-
|
|
13
|
+
vi.clearAllMocks()
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
describe("onChange", () => {
|
|
@@ -34,7 +34,7 @@ describe("useDateInputHandlers", () => {
|
|
|
34
34
|
})
|
|
35
35
|
|
|
36
36
|
it("calls custom onChange when provided", () => {
|
|
37
|
-
const onChangeMock =
|
|
37
|
+
const onChangeMock = vi.fn()
|
|
38
38
|
|
|
39
39
|
const { result } = renderHook(() =>
|
|
40
40
|
useDateInputHandlers({
|
|
@@ -97,7 +97,7 @@ describe("useDateInputHandlers", () => {
|
|
|
97
97
|
})
|
|
98
98
|
|
|
99
99
|
it("calls custom onFocus when provided", () => {
|
|
100
|
-
const onFocusMock =
|
|
100
|
+
const onFocusMock = vi.fn()
|
|
101
101
|
|
|
102
102
|
const { result } = renderHook(() =>
|
|
103
103
|
useDateInputHandlers({
|
|
@@ -122,7 +122,7 @@ describe("useDateInputHandlers", () => {
|
|
|
122
122
|
|
|
123
123
|
describe("onBlur", () => {
|
|
124
124
|
it("does not do anything when selecting a day in the calendar", () => {
|
|
125
|
-
const onBlurMock =
|
|
125
|
+
const onBlurMock = vi.fn()
|
|
126
126
|
const { result } = renderHook(() =>
|
|
127
127
|
useDateInputHandlers({
|
|
128
128
|
locale,
|
|
@@ -136,10 +136,7 @@ describe("useDateInputHandlers", () => {
|
|
|
136
136
|
currentTarget: { value: "" },
|
|
137
137
|
} as FocusEvent<HTMLInputElement>
|
|
138
138
|
|
|
139
|
-
const spy =
|
|
140
|
-
isSelectingDayInCalendar,
|
|
141
|
-
"isSelectingDayInCalendar"
|
|
142
|
-
)
|
|
139
|
+
const spy = vi.spyOn(isSelectingDayInCalendar, "isSelectingDayInCalendar")
|
|
143
140
|
spy.mockReturnValue(true)
|
|
144
141
|
|
|
145
142
|
act(() => {
|
|
@@ -238,7 +235,7 @@ describe("useDateInputHandlers", () => {
|
|
|
238
235
|
})
|
|
239
236
|
|
|
240
237
|
it("calls custom onBlur when provided on input with value", () => {
|
|
241
|
-
const onBlurMock =
|
|
238
|
+
const onBlurMock = vi.fn()
|
|
242
239
|
const { result } = renderHook(() =>
|
|
243
240
|
useDateInputHandlers({
|
|
244
241
|
locale,
|
|
@@ -260,7 +257,7 @@ describe("useDateInputHandlers", () => {
|
|
|
260
257
|
})
|
|
261
258
|
|
|
262
259
|
it("calls custom onBlur when provided on empty", () => {
|
|
263
|
-
const onBlurMock =
|
|
260
|
+
const onBlurMock = vi.fn()
|
|
264
261
|
const { result } = renderHook(() =>
|
|
265
262
|
useDateInputHandlers({
|
|
266
263
|
locale,
|
|
@@ -305,7 +302,7 @@ describe("useDateInputHandlers", () => {
|
|
|
305
302
|
})
|
|
306
303
|
|
|
307
304
|
it("calls onDateSubmit when provided", () => {
|
|
308
|
-
const onDateSubmit =
|
|
305
|
+
const onDateSubmit = vi.fn()
|
|
309
306
|
|
|
310
307
|
const { result } = renderHook(() =>
|
|
311
308
|
useDateInputHandlers({
|
|
@@ -330,7 +327,7 @@ describe("useDateInputHandlers", () => {
|
|
|
330
327
|
})
|
|
331
328
|
|
|
332
329
|
it("calls custom onKeyDown when provided", () => {
|
|
333
|
-
const onKeyDownMock =
|
|
330
|
+
const onKeyDownMock = vi.fn()
|
|
334
331
|
|
|
335
332
|
const { result } = renderHook(() =>
|
|
336
333
|
useDateInputHandlers({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { act } from "react"
|
|
2
|
-
import { waitFor, renderHook } from "@testing-library/react"
|
|
3
|
-
|
|
2
|
+
import { waitFor, renderHook, render } from "@testing-library/react"
|
|
3
|
+
|
|
4
4
|
import { useDateValidation } from "./useDateValidation"
|
|
5
5
|
|
|
6
6
|
describe("useDateValidation()", () => {
|
|
@@ -40,9 +40,7 @@ describe("useDateValidation()", () => {
|
|
|
40
40
|
|
|
41
41
|
expect(result.current.validationMessage?.status).toBe("error")
|
|
42
42
|
|
|
43
|
-
const { container } =
|
|
44
|
-
result.current.validationMessage?.message
|
|
45
|
-
)
|
|
43
|
+
const { container } = render(result.current.validationMessage?.message)
|
|
46
44
|
await waitFor(() => {
|
|
47
45
|
expect(container).toHaveTextContent("Date:potato is an invalid date")
|
|
48
46
|
})
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import React, { useState
|
|
2
|
-
import { screen, waitFor, within } from "@testing-library/react"
|
|
1
|
+
import React, { useState } from "react"
|
|
2
|
+
import { screen, waitFor, within, render } from "@testing-library/react"
|
|
3
3
|
import userEvent from "@testing-library/user-event"
|
|
4
|
-
import { renderWithIntl } from "~tests"
|
|
5
4
|
import { FilterDatePickerField, FilterDatePickerFieldProps } from "."
|
|
6
5
|
|
|
7
6
|
const user = userEvent.setup()
|
|
8
7
|
|
|
9
|
-
const inputDateOnSubmit =
|
|
8
|
+
const inputDateOnSubmit = vi.fn()
|
|
10
9
|
|
|
11
10
|
const FilterDatePickerFieldWrapper = ({
|
|
12
11
|
selectedDate,
|
|
@@ -36,19 +35,19 @@ const waitForI18nContent = async (): Promise<void> => {
|
|
|
36
35
|
|
|
37
36
|
describe("<FilterDatePickerField />", () => {
|
|
38
37
|
beforeEach(() => {
|
|
39
|
-
|
|
38
|
+
vi.clearAllMocks()
|
|
40
39
|
})
|
|
41
40
|
|
|
42
41
|
describe("Inputs", () => {
|
|
43
42
|
it("has empty inputs when a date is not provided", async () => {
|
|
44
|
-
|
|
43
|
+
render(<FilterDatePickerFieldWrapper />)
|
|
45
44
|
await waitForI18nContent()
|
|
46
45
|
const inputDate = screen.getByLabelText("Date")
|
|
47
46
|
expect(inputDate).toHaveValue("")
|
|
48
47
|
})
|
|
49
48
|
|
|
50
49
|
it("pre-fills the inputs when date is provided", async () => {
|
|
51
|
-
|
|
50
|
+
render(
|
|
52
51
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-01")} />
|
|
53
52
|
)
|
|
54
53
|
await waitForI18nContent()
|
|
@@ -57,7 +56,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
57
56
|
})
|
|
58
57
|
|
|
59
58
|
it("allows customising the input labels", async () => {
|
|
60
|
-
|
|
59
|
+
render(
|
|
61
60
|
<FilterDatePickerFieldWrapper
|
|
62
61
|
selectedDate={new Date("2022-05-01")}
|
|
63
62
|
inputProps={{
|
|
@@ -73,9 +72,9 @@ describe("<FilterDatePickerField />", () => {
|
|
|
73
72
|
|
|
74
73
|
describe("onBlur", () => {
|
|
75
74
|
it("updates date input and calendar values correctly on blur", async () => {
|
|
76
|
-
const inputDateOnBlur =
|
|
75
|
+
const inputDateOnBlur = vi.fn()
|
|
77
76
|
|
|
78
|
-
|
|
77
|
+
render(
|
|
79
78
|
<FilterDatePickerFieldWrapper
|
|
80
79
|
selectedDate={new Date("2022-05-02")}
|
|
81
80
|
onBlur={inputDateOnBlur}
|
|
@@ -108,7 +107,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
108
107
|
|
|
109
108
|
describe("Press Enter key", () => {
|
|
110
109
|
it("updates calendar values and calls submit when the date is valid", async () => {
|
|
111
|
-
|
|
110
|
+
render(
|
|
112
111
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-02")} />
|
|
113
112
|
)
|
|
114
113
|
await waitForI18nContent()
|
|
@@ -134,7 +133,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
134
133
|
})
|
|
135
134
|
|
|
136
135
|
it("does not call submit when the date is invalid", async () => {
|
|
137
|
-
|
|
136
|
+
render(
|
|
138
137
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-02")} />
|
|
139
138
|
)
|
|
140
139
|
await waitForI18nContent()
|
|
@@ -152,7 +151,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
152
151
|
})
|
|
153
152
|
|
|
154
153
|
it("updates the calendar month to match the new start date input", async () => {
|
|
155
|
-
|
|
154
|
+
render(
|
|
156
155
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-02")} />
|
|
157
156
|
)
|
|
158
157
|
await waitForI18nContent()
|
|
@@ -175,7 +174,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
175
174
|
|
|
176
175
|
describe("Calendar", () => {
|
|
177
176
|
it("shows the default month as the start month when there isn't a selected value", async () => {
|
|
178
|
-
|
|
177
|
+
render(
|
|
179
178
|
<FilterDatePickerFieldWrapper defaultMonth={new Date("2022-05-02")} />
|
|
180
179
|
)
|
|
181
180
|
await waitForI18nContent()
|
|
@@ -183,7 +182,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
183
182
|
})
|
|
184
183
|
|
|
185
184
|
it("shows the selected start date month as the start month when provided", async () => {
|
|
186
|
-
|
|
185
|
+
render(
|
|
187
186
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-01")} />
|
|
188
187
|
)
|
|
189
188
|
await waitForI18nContent()
|
|
@@ -191,9 +190,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
191
190
|
})
|
|
192
191
|
|
|
193
192
|
it("shows the current month as the start month when selected date is invalid", async () => {
|
|
194
|
-
|
|
195
|
-
<FilterDatePickerFieldWrapper selectedDate={new Date("potato")} />
|
|
196
|
-
)
|
|
193
|
+
render(<FilterDatePickerFieldWrapper selectedDate={new Date("potato")} />)
|
|
197
194
|
await waitForI18nContent()
|
|
198
195
|
const currentMonth = new Date().toLocaleDateString("en-AU", {
|
|
199
196
|
month: "long",
|
|
@@ -203,7 +200,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
203
200
|
})
|
|
204
201
|
|
|
205
202
|
it("calls the onDateSubmit when selecting a date", async () => {
|
|
206
|
-
|
|
203
|
+
render(
|
|
207
204
|
<FilterDatePickerFieldWrapper defaultMonth={new Date("2022-05-01")} />
|
|
208
205
|
)
|
|
209
206
|
const targetMonth = screen.getByRole("grid", { name: "May 2022" })
|
|
@@ -218,7 +215,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
218
215
|
})
|
|
219
216
|
|
|
220
217
|
it("updates the input when changing the date", async () => {
|
|
221
|
-
|
|
218
|
+
render(
|
|
222
219
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-15")} />
|
|
223
220
|
)
|
|
224
221
|
await waitForI18nContent()
|
|
@@ -240,7 +237,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
240
237
|
})
|
|
241
238
|
|
|
242
239
|
it("clears the inputs when clearing the calendar value", async () => {
|
|
243
|
-
|
|
240
|
+
render(
|
|
244
241
|
<FilterDatePickerFieldWrapper selectedDate={new Date("2022-05-15")} />
|
|
245
242
|
)
|
|
246
243
|
await waitForI18nContent()
|
|
@@ -266,7 +263,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
266
263
|
|
|
267
264
|
describe("Custom validation", () => {
|
|
268
265
|
it("shows validation messages passed in from the consumer", async () => {
|
|
269
|
-
|
|
266
|
+
render(
|
|
270
267
|
<FilterDatePickerFieldWrapper
|
|
271
268
|
onValidate={(): void => undefined}
|
|
272
269
|
validationMessage={{
|
|
@@ -282,7 +279,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
282
279
|
|
|
283
280
|
describe("Inbuilt validation", () => {
|
|
284
281
|
it("shows inbuilt validation messages", async () => {
|
|
285
|
-
const { container } =
|
|
282
|
+
const { container } = render(<FilterDatePickerFieldWrapper />)
|
|
286
283
|
await waitForI18nContent()
|
|
287
284
|
|
|
288
285
|
const inputDate = screen.getByLabelText("Date")
|
|
@@ -301,7 +298,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
301
298
|
})
|
|
302
299
|
|
|
303
300
|
it("shows inbuilt validation messages for pre-existing values", async () => {
|
|
304
|
-
const { container } =
|
|
301
|
+
const { container } = render(
|
|
305
302
|
<FilterDatePickerFieldWrapper
|
|
306
303
|
selectedDate={new Date("2022-05-15")}
|
|
307
304
|
disabledDays={[new Date("2022-05-15")]}
|
|
@@ -317,9 +314,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
317
314
|
})
|
|
318
315
|
|
|
319
316
|
it("does not call onDateSubmit when the input value is invalid", async () => {
|
|
320
|
-
const { getByLabelText } =
|
|
321
|
-
<FilterDatePickerFieldWrapper />
|
|
322
|
-
)
|
|
317
|
+
const { getByLabelText } = render(<FilterDatePickerFieldWrapper />)
|
|
323
318
|
await waitForI18nContent()
|
|
324
319
|
|
|
325
320
|
const inputDate = getByLabelText("Date")
|
|
@@ -333,7 +328,7 @@ describe("<FilterDatePickerField />", () => {
|
|
|
333
328
|
})
|
|
334
329
|
|
|
335
330
|
it("re-validates values when selecting a value using the calendar", async () => {
|
|
336
|
-
const { container } =
|
|
331
|
+
const { container } = render(
|
|
337
332
|
<FilterDatePickerFieldWrapper
|
|
338
333
|
selectedDate={new Date("potato")}
|
|
339
334
|
defaultMonth={new Date("2022-05-01")}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import { LabelledMessage } from "~components/LabelledMessage"
|
|
3
|
-
import { DateValidationResponse, ValidationMessage } from "../types"
|
|
4
3
|
import { getDateValidationHandler } from "./getDateValidationHandler"
|
|
5
4
|
|
|
6
|
-
const onValidate =
|
|
7
|
-
const setInbuiltValidationMessage =
|
|
8
|
-
void,
|
|
9
|
-
[ValidationMessage | undefined]
|
|
10
|
-
>()
|
|
5
|
+
const onValidate = vi.fn()
|
|
6
|
+
const setInbuiltValidationMessage = vi.fn()
|
|
11
7
|
|
|
12
8
|
describe("getDateValidationHandler()", () => {
|
|
13
9
|
afterEach(() => {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { waitFor, screen } from "@testing-library/react"
|
|
2
|
-
import { renderWithIntl } from "~tests"
|
|
1
|
+
import { waitFor, screen, render } from "@testing-library/react"
|
|
3
2
|
import { validateDate } from "./validateDate"
|
|
4
3
|
|
|
5
4
|
describe("validateDate()", () => {
|
|
@@ -41,7 +40,7 @@ describe("validateDate()", () => {
|
|
|
41
40
|
|
|
42
41
|
expect(validationMessage?.status).toBe("error")
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
render(validationMessage?.message)
|
|
45
44
|
await waitFor(() => {
|
|
46
45
|
expect(screen.getByText("Date is invalid")).toBeVisible()
|
|
47
46
|
})
|
|
@@ -67,7 +66,7 @@ describe("validateDate()", () => {
|
|
|
67
66
|
|
|
68
67
|
expect(validationMessage?.status).toBe("error")
|
|
69
68
|
|
|
70
|
-
|
|
69
|
+
render(validationMessage?.message)
|
|
71
70
|
await waitFor(() => {
|
|
72
71
|
expect(screen.getByText("Date is invalid")).toBeVisible()
|
|
73
72
|
})
|
|
@@ -93,7 +92,7 @@ describe("validateDate()", () => {
|
|
|
93
92
|
|
|
94
93
|
expect(validationMessage?.status).toBe("error")
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
render(validationMessage?.message)
|
|
97
96
|
await waitFor(() => {
|
|
98
97
|
expect(screen.getByText("potato is an invalid date")).toBeVisible()
|
|
99
98
|
})
|
|
@@ -124,7 +123,7 @@ describe("validateDate()", () => {
|
|
|
124
123
|
|
|
125
124
|
expect(validationMessage?.status).toBe("error")
|
|
126
125
|
|
|
127
|
-
|
|
126
|
+
render(validationMessage?.message)
|
|
128
127
|
await waitFor(() => {
|
|
129
128
|
expect(
|
|
130
129
|
screen.getByText("03/01/2022 is not available, try another date")
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { useState } from "react"
|
|
2
2
|
import { render, waitFor } from "@testing-library/react"
|
|
3
3
|
import userEvent from "@testing-library/user-event"
|
|
4
|
-
import { renderWithIntl } from "~tests"
|
|
5
4
|
import { DateRange } from "~components/Calendar"
|
|
6
5
|
import { FilterButton } from "~components/Filter/FilterButton"
|
|
7
6
|
import { FilterDateRangePicker, FilterDateRangePickerProps } from "./index"
|
|
@@ -82,7 +81,7 @@ describe("<FilterDateRangePicker />", () => {
|
|
|
82
81
|
})
|
|
83
82
|
|
|
84
83
|
it("should show the calendar when the filter button is clicked", async () => {
|
|
85
|
-
const { queryByRole, getByRole, getByText } =
|
|
84
|
+
const { queryByRole, getByRole, getByText } = render(
|
|
86
85
|
<FilterDateRangePickerWrapper defaultMonth={new Date("2022-05-01")} />
|
|
87
86
|
)
|
|
88
87
|
expect(queryByRole("dialog")).not.toBeInTheDocument()
|
|
@@ -96,7 +95,7 @@ describe("<FilterDateRangePicker />", () => {
|
|
|
96
95
|
})
|
|
97
96
|
|
|
98
97
|
it("should not show a date range in the button if the selected range is not valid", async () => {
|
|
99
|
-
const { getByRole, getByLabelText } =
|
|
98
|
+
const { getByRole, getByLabelText } = render(
|
|
100
99
|
<FilterDateRangePickerWrapper
|
|
101
100
|
selectedRange={{ from: new Date("2022-05-01") }}
|
|
102
101
|
/>
|
package/src/Filter/FilterDateRangePicker/_docs/FilterDateRangePicker.stickersheet.stories.tsx
CHANGED
|
@@ -135,6 +135,33 @@ const StickerSheetTemplate: StickerSheetStory = {
|
|
|
135
135
|
"data-testid": "test__filter-drp-field--validation--end",
|
|
136
136
|
}}
|
|
137
137
|
/>
|
|
138
|
+
<FilterDateRangePickerField
|
|
139
|
+
id="stickersheet--filter-drp-field--validation-merged"
|
|
140
|
+
label="Dates"
|
|
141
|
+
locale="en-US"
|
|
142
|
+
selectedRange={rangeFieldValidation}
|
|
143
|
+
onRangeChange={setRangeFieldValidation}
|
|
144
|
+
onValidate={{
|
|
145
|
+
dateStart: action("Validation story: date start onValidate"),
|
|
146
|
+
dateEnd: action("Validation story: date end onValidate"),
|
|
147
|
+
}}
|
|
148
|
+
validationMessage={{
|
|
149
|
+
dateStart: {
|
|
150
|
+
status: "error",
|
|
151
|
+
message:
|
|
152
|
+
"(Start date custom message) Jelly-filled doughnuts are my favourite!",
|
|
153
|
+
},
|
|
154
|
+
dateEnd: {
|
|
155
|
+
status: "caution",
|
|
156
|
+
message:
|
|
157
|
+
"(End date custom message) Jelly-filled doughnuts are dangerous!",
|
|
158
|
+
},
|
|
159
|
+
}}
|
|
160
|
+
inputEndDateProps={{
|
|
161
|
+
"data-testid":
|
|
162
|
+
"test__filter-drp-field--validation-merged--end",
|
|
163
|
+
}}
|
|
164
|
+
/>
|
|
138
165
|
</StickerSheet.Row>
|
|
139
166
|
</StickerSheet.Body>
|
|
140
167
|
</StickerSheet>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { useRef } from "react"
|
|
2
|
-
import { screen, waitFor } from "@testing-library/react"
|
|
2
|
+
import { screen, waitFor, render } from "@testing-library/react"
|
|
3
3
|
import userEvent from "@testing-library/user-event"
|
|
4
4
|
import { enAU } from "date-fns/locale"
|
|
5
|
-
import {
|
|
5
|
+
import { vi } from "vitest"
|
|
6
6
|
import {
|
|
7
7
|
DateRangeInputField,
|
|
8
8
|
DateRangeInputFieldProps,
|
|
@@ -25,9 +25,7 @@ const DateRangeInputFieldWrapper = (
|
|
|
25
25
|
|
|
26
26
|
describe("<DateRangeInputField />", () => {
|
|
27
27
|
it("has unique ids for both inputs", async () => {
|
|
28
|
-
const { container } =
|
|
29
|
-
<DateRangeInputFieldWrapper id="range" />
|
|
30
|
-
)
|
|
28
|
+
const { container } = render(<DateRangeInputFieldWrapper id="range" />)
|
|
31
29
|
const inputStart = container.querySelector("#range--from")
|
|
32
30
|
const inputEnd = container.querySelector("#range--to")
|
|
33
31
|
await waitFor(() => {
|
|
@@ -37,14 +35,14 @@ describe("<DateRangeInputField />", () => {
|
|
|
37
35
|
})
|
|
38
36
|
|
|
39
37
|
it("has an accessible name for the fieldset", async () => {
|
|
40
|
-
|
|
38
|
+
render(<DateRangeInputFieldWrapper />)
|
|
41
39
|
await waitFor(() => {
|
|
42
40
|
expect(screen.getByRole("group", { name: "Dates" })).toBeVisible()
|
|
43
41
|
})
|
|
44
42
|
})
|
|
45
43
|
|
|
46
44
|
it("adds description to both inputs", async () => {
|
|
47
|
-
|
|
45
|
+
render(<DateRangeInputFieldWrapper />)
|
|
48
46
|
const inputStart = screen.getByRole("textbox", { name: "Date from" })
|
|
49
47
|
const inputEnd = screen.getByRole("textbox", { name: "Date to" })
|
|
50
48
|
await waitFor(() => {
|
|
@@ -56,7 +54,7 @@ describe("<DateRangeInputField />", () => {
|
|
|
56
54
|
})
|
|
57
55
|
|
|
58
56
|
it("adds validation message to description if it exists", async () => {
|
|
59
|
-
|
|
57
|
+
render(
|
|
60
58
|
<DateRangeInputFieldWrapper
|
|
61
59
|
validationMessage={{
|
|
62
60
|
dateStart: {
|
|
@@ -77,7 +75,7 @@ describe("<DateRangeInputField />", () => {
|
|
|
77
75
|
|
|
78
76
|
describe("Disabled", () => {
|
|
79
77
|
it("disables both inputs", async () => {
|
|
80
|
-
|
|
78
|
+
render(<DateRangeInputFieldWrapper disabled />)
|
|
81
79
|
const inputStart = screen.getByRole("textbox", { name: "Date from" })
|
|
82
80
|
const inputEnd = screen.getByRole("textbox", { name: "Date to" })
|
|
83
81
|
await waitFor(() => {
|
|
@@ -89,7 +87,7 @@ describe("<DateRangeInputField />", () => {
|
|
|
89
87
|
|
|
90
88
|
describe("Refs", () => {
|
|
91
89
|
it("correctly passes through both input refs", async () => {
|
|
92
|
-
const onButtonClick =
|
|
90
|
+
const onButtonClick = vi.fn()
|
|
93
91
|
|
|
94
92
|
const Wrapper = (): JSX.Element => {
|
|
95
93
|
const inputStartDateRef = useRef<HTMLInputElement>(null)
|
|
@@ -119,7 +117,7 @@ describe("<DateRangeInputField />", () => {
|
|
|
119
117
|
)
|
|
120
118
|
}
|
|
121
119
|
|
|
122
|
-
|
|
120
|
+
render(<Wrapper />)
|
|
123
121
|
|
|
124
122
|
await user.click(screen.getByText("Click me"))
|
|
125
123
|
expect(onButtonClick).toHaveBeenCalledWith(
|
|
@@ -1,70 +1,8 @@
|
|
|
1
1
|
import React from "react"
|
|
2
|
-
import { render
|
|
2
|
+
import { render } from "@testing-library/react"
|
|
3
3
|
import { DateRangeValidationMessage } from "./DateRangeValidationMessage"
|
|
4
4
|
|
|
5
5
|
describe("<DateRangeValidationMessage />", () => {
|
|
6
|
-
describe("when the consumer has given it a node", () => {
|
|
7
|
-
it("will render a single validation field message", () => {
|
|
8
|
-
render(
|
|
9
|
-
<DateRangeValidationMessage
|
|
10
|
-
validationMessage={{
|
|
11
|
-
dateEnd: {
|
|
12
|
-
status: "error",
|
|
13
|
-
message: <p>Validation message</p>,
|
|
14
|
-
},
|
|
15
|
-
}}
|
|
16
|
-
/>
|
|
17
|
-
)
|
|
18
|
-
expect(screen.getByText("Validation message")).toBeVisible()
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it("combines multiple validation messages with the same status", () => {
|
|
22
|
-
const { container } = render(
|
|
23
|
-
<DateRangeValidationMessage
|
|
24
|
-
validationMessage={{
|
|
25
|
-
dateStart: {
|
|
26
|
-
status: "error",
|
|
27
|
-
message: '"Date from" is not a valid date selection.',
|
|
28
|
-
},
|
|
29
|
-
dateEnd: {
|
|
30
|
-
status: "error",
|
|
31
|
-
message:
|
|
32
|
-
'Date to" cannot be earlier than the "Date from" selection.',
|
|
33
|
-
},
|
|
34
|
-
}}
|
|
35
|
-
/>
|
|
36
|
-
)
|
|
37
|
-
const validationList = screen.getByRole("list")
|
|
38
|
-
const { getAllByRole } = within(validationList)
|
|
39
|
-
const items = getAllByRole("listitem")
|
|
40
|
-
|
|
41
|
-
expect(items.length).toBe(2)
|
|
42
|
-
expect(container.getElementsByClassName("error").length).toBe(1)
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
describe("when consumer passes validationMessage object and has different status", () => {
|
|
47
|
-
it("will render two validation field messages", () => {
|
|
48
|
-
const { container } = render(
|
|
49
|
-
<DateRangeValidationMessage
|
|
50
|
-
validationMessage={{
|
|
51
|
-
dateStart: {
|
|
52
|
-
status: "error",
|
|
53
|
-
message: '"Date from" is close to the submission date.',
|
|
54
|
-
},
|
|
55
|
-
dateEnd: {
|
|
56
|
-
status: "caution",
|
|
57
|
-
message:
|
|
58
|
-
'"Date to" cannot be earlier than the "Date from" selection.',
|
|
59
|
-
},
|
|
60
|
-
}}
|
|
61
|
-
/>
|
|
62
|
-
)
|
|
63
|
-
expect(container.getElementsByClassName("error").length).toBe(1)
|
|
64
|
-
expect(container.getElementsByClassName("caution").length).toBe(1)
|
|
65
|
-
})
|
|
66
|
-
})
|
|
67
|
-
|
|
68
6
|
it("renders an id when passed in", () => {
|
|
69
7
|
const { container } = render(
|
|
70
8
|
<DateRangeValidationMessage
|