@simplysm/solid 13.0.70 → 13.0.71
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/README.md +1 -1
- package/dist/components/disclosure/Dropdown.d.ts +6 -4
- package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
- package/dist/components/disclosure/Dropdown.js +24 -8
- package/dist/components/disclosure/Dropdown.js.map +2 -2
- package/dist/components/disclosure/dialogZIndex.d.ts +2 -0
- package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
- package/dist/components/disclosure/dialogZIndex.js +4 -0
- package/dist/components/disclosure/dialogZIndex.js.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
- package/dist/components/features/crud-detail/CrudDetail.js +16 -7
- package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
- package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
- package/dist/components/features/crud-sheet/CrudSheet.js +14 -5
- package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
- package/dist/components/features/crudRegistry.d.ts +16 -0
- package/dist/components/features/crudRegistry.d.ts.map +1 -0
- package/dist/components/features/crudRegistry.js +37 -0
- package/dist/components/features/crudRegistry.js.map +6 -0
- package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
- package/dist/components/features/permission-table/PermissionTable.js +71 -86
- package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelect.js +2 -4
- package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts +2 -4
- package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
- package/dist/components/features/shared-data/SharedDataSelectList.js +11 -46
- package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
- package/dist/components/form-control/select/Select.d.ts.map +1 -1
- package/dist/components/form-control/select/Select.js +1 -1
- package/dist/components/form-control/select/Select.js.map +1 -1
- package/dist/helpers/createAppStructure.d.ts.map +1 -1
- package/dist/helpers/createAppStructure.js +3 -2
- package/dist/helpers/createAppStructure.js.map +1 -1
- package/dist/helpers/createHmrSafeContext.d.ts +3 -0
- package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
- package/dist/helpers/createHmrSafeContext.js +10 -0
- package/dist/helpers/createHmrSafeContext.js.map +6 -0
- package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
- package/dist/hooks/createSelectionGroup.js +3 -2
- package/dist/hooks/createSelectionGroup.js.map +2 -2
- package/package.json +6 -5
- package/src/components/disclosure/Dropdown.tsx +31 -17
- package/src/components/disclosure/dialogZIndex.ts +5 -0
- package/src/components/features/crud-detail/CrudDetail.tsx +16 -5
- package/src/components/features/crud-sheet/CrudSheet.tsx +13 -3
- package/src/components/features/crudRegistry.ts +60 -0
- package/src/components/features/permission-table/PermissionTable.tsx +49 -46
- package/src/components/features/shared-data/SharedDataSelect.tsx +2 -2
- package/src/components/features/shared-data/SharedDataSelectList.tsx +11 -36
- package/src/components/form-control/select/Select.tsx +1 -5
- package/src/helpers/createAppStructure.ts +3 -2
- package/src/helpers/createHmrSafeContext.ts +8 -0
- package/src/hooks/createSelectionGroup.tsx +4 -2
- package/tests/components/data/List.spec.tsx +52 -52
- package/tests/components/data/Pagination.spec.tsx +43 -43
- package/tests/components/data/Table.spec.tsx +4 -4
- package/tests/components/data/kanban/Kanban.selection.spec.tsx +21 -21
- package/tests/components/data/sheet/DataSheet.spec.tsx +50 -50
- package/tests/components/disclosure/Collapse.spec.tsx +24 -24
- package/tests/components/disclosure/Dialog.spec.tsx +33 -33
- package/tests/components/disclosure/DialogProvider.spec.tsx +9 -9
- package/tests/components/disclosure/Dropdown.spec.tsx +134 -14
- package/tests/components/disclosure/Tabs.spec.tsx +21 -21
- package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
- package/tests/components/display/Alert.spec.tsx +4 -4
- package/tests/components/display/Barcode.spec.tsx +7 -7
- package/tests/components/display/Card.spec.tsx +3 -3
- package/tests/components/display/Link.spec.tsx +5 -5
- package/tests/components/display/Tag.spec.tsx +4 -4
- package/tests/components/features/address/AddressSearch.spec.tsx +3 -3
- package/tests/components/features/crudRegistry.spec.ts +119 -0
- package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +8 -8
- package/tests/components/features/permission-table/PermissionTable.spec.tsx +43 -43
- package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +2 -17
- package/tests/components/feedback/busy/BusyContainer.spec.tsx +7 -7
- package/tests/components/feedback/notification/NotificationBell.spec.tsx +9 -9
- package/tests/components/feedback/print/Print.spec.tsx +4 -4
- package/tests/components/form-control/Button.spec.tsx +18 -18
- package/tests/components/form-control/checkbox/Checkbox.spec.tsx +20 -20
- package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +12 -12
- package/tests/components/form-control/checkbox/Radio.spec.tsx +21 -21
- package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +12 -12
- package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +10 -10
- package/tests/components/form-control/combobox/Combobox.spec.tsx +16 -16
- package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +7 -7
- package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +24 -24
- package/tests/components/form-control/field/DatePicker.spec.tsx +50 -50
- package/tests/components/form-control/field/DateTimePicker.spec.tsx +47 -47
- package/tests/components/form-control/field/NumberInput.spec.tsx +54 -54
- package/tests/components/form-control/field/TextInput.spec.tsx +49 -49
- package/tests/components/form-control/field/Textarea.spec.tsx +33 -33
- package/tests/components/form-control/field/TimePicker.spec.tsx +42 -42
- package/tests/components/form-control/numpad/Numpad.spec.tsx +40 -40
- package/tests/components/form-control/select/Select.spec.tsx +9 -9
- package/tests/components/form-control/select/SelectItem.spec.tsx +10 -10
- package/tests/helpers/createAppStructure.spec.tsx +57 -57
- package/tests/helpers/mergeStyles.spec.ts +31 -31
|
@@ -2,7 +2,7 @@ import { render, fireEvent, waitFor } from "@solidjs/testing-library";
|
|
|
2
2
|
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
3
|
import { Combobox } from "../../../../src/components/form-control/combobox/Combobox";
|
|
4
4
|
|
|
5
|
-
describe("Combobox
|
|
5
|
+
describe("Combobox component", () => {
|
|
6
6
|
const mockLoadItems = vi.fn(() => Promise.resolve([]));
|
|
7
7
|
|
|
8
8
|
beforeEach(() => {
|
|
@@ -29,7 +29,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
29
29
|
expect(input?.getAttribute("placeholder")).toBe("검색하세요");
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
it("input
|
|
32
|
+
it("defaults input autocomplete to one-time-code", () => {
|
|
33
33
|
const { container } = render(() => (
|
|
34
34
|
<Combobox loadItems={mockLoadItems} renderValue={(v) => <>{v}</>} />
|
|
35
35
|
));
|
|
@@ -37,7 +37,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
37
37
|
expect(input.autocomplete).toBe("one-time-code");
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
it("
|
|
40
|
+
it("sets aria-disabled when disabled", () => {
|
|
41
41
|
const { getByRole } = render(() => (
|
|
42
42
|
<Combobox loadItems={mockLoadItems} disabled renderValue={(v) => <>{v}</>} />
|
|
43
43
|
));
|
|
@@ -46,7 +46,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
describe("dropdown opening/closing", () => {
|
|
49
|
-
it("
|
|
49
|
+
it("opens dropdown on input", async () => {
|
|
50
50
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
51
51
|
const { container } = render(() => (
|
|
52
52
|
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
@@ -60,7 +60,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
60
60
|
});
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
it("
|
|
63
|
+
it("closes dropdown when item is selected", async () => {
|
|
64
64
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
65
65
|
const { container, getByRole } = render(() => (
|
|
66
66
|
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
@@ -81,7 +81,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
|
|
84
|
-
it("
|
|
84
|
+
it("closes dropdown with Escape key", async () => {
|
|
85
85
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
86
86
|
const { container, getByRole } = render(() => (
|
|
87
87
|
<Combobox loadItems={loadItems} renderValue={(v: { name: string }) => <>{v.name}</>} />
|
|
@@ -102,8 +102,8 @@ describe("Combobox 컴포넌트", () => {
|
|
|
102
102
|
});
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
describe("
|
|
106
|
-
it("
|
|
105
|
+
describe("value selection", () => {
|
|
106
|
+
it("calls onValueChange when item is selected", async () => {
|
|
107
107
|
const handleChange = vi.fn();
|
|
108
108
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "사과" }]));
|
|
109
109
|
|
|
@@ -129,8 +129,8 @@ describe("Combobox 컴포넌트", () => {
|
|
|
129
129
|
});
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
-
describe("
|
|
133
|
-
it("
|
|
132
|
+
describe("debounce", () => {
|
|
133
|
+
it("calls loadItems after debounce delay", async () => {
|
|
134
134
|
const loadItems = vi.fn(() => Promise.resolve([{ id: 1, name: "결과" }]));
|
|
135
135
|
|
|
136
136
|
const { container } = render(() => (
|
|
@@ -144,7 +144,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
144
144
|
const input = container.querySelector("input")!;
|
|
145
145
|
fireEvent.input(input, { target: { value: "검색어" } });
|
|
146
146
|
|
|
147
|
-
//
|
|
147
|
+
// loadItems is called after debounce
|
|
148
148
|
await waitFor(
|
|
149
149
|
() => {
|
|
150
150
|
expect(loadItems).toHaveBeenCalledWith("검색어");
|
|
@@ -155,7 +155,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
155
155
|
});
|
|
156
156
|
|
|
157
157
|
describe("allowCustomValue", () => {
|
|
158
|
-
it("
|
|
158
|
+
it("allows entering custom value with Enter when allowCustomValue is true", () => {
|
|
159
159
|
const handleChange = vi.fn();
|
|
160
160
|
const loadItems = vi.fn(() => Promise.resolve([]));
|
|
161
161
|
|
|
@@ -175,7 +175,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
175
175
|
expect(handleChange).toHaveBeenCalledWith("새로운 값");
|
|
176
176
|
});
|
|
177
177
|
|
|
178
|
-
it("
|
|
178
|
+
it("transforms custom value using parseCustomValue", () => {
|
|
179
179
|
const handleChange = vi.fn();
|
|
180
180
|
const loadItems = vi.fn(() => Promise.resolve([]));
|
|
181
181
|
|
|
@@ -211,7 +211,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
211
211
|
expect(hiddenInput.validationMessage).toBe("This field is required");
|
|
212
212
|
});
|
|
213
213
|
|
|
214
|
-
it("required
|
|
214
|
+
it("is valid when required and value exists", () => {
|
|
215
215
|
const { container } = render(() => (
|
|
216
216
|
<Combobox
|
|
217
217
|
loadItems={mockLoadItems}
|
|
@@ -224,7 +224,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
224
224
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
-
it("
|
|
227
|
+
it("sets error message returned by validate function", () => {
|
|
228
228
|
const { container } = render(() => (
|
|
229
229
|
<Combobox
|
|
230
230
|
loadItems={mockLoadItems}
|
|
@@ -237,7 +237,7 @@ describe("Combobox 컴포넌트", () => {
|
|
|
237
237
|
expect(hiddenInput.validationMessage).toBe("허용되지 않는 값입니다");
|
|
238
238
|
});
|
|
239
239
|
|
|
240
|
-
it("validate
|
|
240
|
+
it("is valid when validate function returns undefined", () => {
|
|
241
241
|
const { container } = render(() => (
|
|
242
242
|
<Combobox
|
|
243
243
|
loadItems={mockLoadItems}
|
|
@@ -16,8 +16,8 @@ const createMockContext = (
|
|
|
16
16
|
...overrides,
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
-
describe("ComboboxItem
|
|
20
|
-
it("
|
|
19
|
+
describe("ComboboxItem component", () => {
|
|
20
|
+
it("renders the item", () => {
|
|
21
21
|
const { getByRole } = render(() => (
|
|
22
22
|
<ComboboxContext.Provider value={createMockContext()}>
|
|
23
23
|
<ComboboxItem value="apple">사과</ComboboxItem>
|
|
@@ -28,7 +28,7 @@ describe("ComboboxItem 컴포넌트", () => {
|
|
|
28
28
|
expect(getByRole("option").textContent).toContain("사과");
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
it("
|
|
31
|
+
it("calls selectValue on click", () => {
|
|
32
32
|
const selectValue = vi.fn();
|
|
33
33
|
const { getByRole } = render(() => (
|
|
34
34
|
<ComboboxContext.Provider value={createMockContext({ selectValue })}>
|
|
@@ -40,7 +40,7 @@ describe("ComboboxItem 컴포넌트", () => {
|
|
|
40
40
|
expect(selectValue).toHaveBeenCalledWith("apple");
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
it("
|
|
43
|
+
it("sets aria-selected=true when selected", () => {
|
|
44
44
|
const { getByRole } = render(() => (
|
|
45
45
|
<ComboboxContext.Provider value={createMockContext({ isSelected: () => true })}>
|
|
46
46
|
<ComboboxItem value="apple">사과</ComboboxItem>
|
|
@@ -50,7 +50,7 @@ describe("ComboboxItem 컴포넌트", () => {
|
|
|
50
50
|
expect(getByRole("option").getAttribute("aria-selected")).toBe("true");
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
it("
|
|
53
|
+
it("does not respond to click when disabled", () => {
|
|
54
54
|
const selectValue = vi.fn();
|
|
55
55
|
const { getByRole } = render(() => (
|
|
56
56
|
<ComboboxContext.Provider value={createMockContext({ selectValue })}>
|
|
@@ -64,7 +64,7 @@ describe("ComboboxItem 컴포넌트", () => {
|
|
|
64
64
|
expect(selectValue).not.toHaveBeenCalled();
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
-
it("
|
|
67
|
+
it("calls closeDropdown on click", () => {
|
|
68
68
|
const closeDropdown = vi.fn();
|
|
69
69
|
const { getByRole } = render(() => (
|
|
70
70
|
<ComboboxContext.Provider value={createMockContext({ closeDropdown })}>
|
|
@@ -76,7 +76,7 @@ describe("ComboboxItem 컴포넌트", () => {
|
|
|
76
76
|
expect(closeDropdown).toHaveBeenCalled();
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
it("data-combobox-item
|
|
79
|
+
it("sets data-combobox-item attribute", () => {
|
|
80
80
|
render(() => (
|
|
81
81
|
<ComboboxContext.Provider value={createMockContext()}>
|
|
82
82
|
<ComboboxItem value="apple">사과</ComboboxItem>
|
|
@@ -5,7 +5,7 @@ import { DateRangePicker } from "../../../../src/components/form-control/date-ra
|
|
|
5
5
|
import { I18nProvider } from "../../../../src/providers/i18n/I18nContext";
|
|
6
6
|
import { ConfigProvider } from "../../../../src/providers/ConfigContext";
|
|
7
7
|
|
|
8
|
-
describe("DateRangePicker
|
|
8
|
+
describe("DateRangePicker component", () => {
|
|
9
9
|
beforeEach(() => {
|
|
10
10
|
localStorage.setItem("test.i18n-locale", JSON.stringify("en"));
|
|
11
11
|
});
|
|
@@ -15,7 +15,7 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
describe("basic rendering", () => {
|
|
18
|
-
it("Select
|
|
18
|
+
it("renders Select and DatePicker", () => {
|
|
19
19
|
const { container } = render(() => (
|
|
20
20
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
21
21
|
<DateRangePicker />
|
|
@@ -32,7 +32,7 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
32
32
|
expect(inputs?.length).toBeGreaterThan(0);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
it("
|
|
35
|
+
it("defaults periodType to 'range'", () => {
|
|
36
36
|
const { container } = render(() => (
|
|
37
37
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
38
38
|
<DateRangePicker />
|
|
@@ -40,14 +40,14 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
40
40
|
));
|
|
41
41
|
const wrapper = container.querySelector("[data-date-range-picker]");
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// range mode renders 2 DatePickers
|
|
44
44
|
const inputs = wrapper?.querySelectorAll("input[type='date']");
|
|
45
45
|
expect(inputs?.length).toBe(2);
|
|
46
46
|
});
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
describe("'range'
|
|
50
|
-
it("
|
|
49
|
+
describe("'range' mode rendering", () => {
|
|
50
|
+
it("renders 2 DatePickers and a '~' separator", () => {
|
|
51
51
|
const { container } = render(() => (
|
|
52
52
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
53
53
|
<DateRangePicker periodType="range" />
|
|
@@ -58,13 +58,13 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
58
58
|
const inputs = wrapper?.querySelectorAll("input[type='date']");
|
|
59
59
|
expect(inputs?.length).toBe(2);
|
|
60
60
|
|
|
61
|
-
// "~"
|
|
61
|
+
// verify "~" separator
|
|
62
62
|
expect(wrapper?.textContent).toContain("~");
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
-
describe("'day'
|
|
67
|
-
it("DatePicker
|
|
66
|
+
describe("'day' mode rendering", () => {
|
|
67
|
+
it("renders 1 DatePicker (type=date) with no '~'", () => {
|
|
68
68
|
const { container } = render(() => (
|
|
69
69
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
70
70
|
<DateRangePicker periodType="day" />
|
|
@@ -75,14 +75,14 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
75
75
|
const dateInputs = wrapper?.querySelectorAll("input[type='date']");
|
|
76
76
|
expect(dateInputs?.length).toBe(1);
|
|
77
77
|
|
|
78
|
-
// "~"
|
|
78
|
+
// "~" separator must not be present
|
|
79
79
|
const textNodes = wrapper?.textContent ?? "";
|
|
80
80
|
expect(textNodes).not.toContain("~");
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
|
|
84
|
-
describe("'month'
|
|
85
|
-
it("DatePicker
|
|
84
|
+
describe("'month' mode rendering", () => {
|
|
85
|
+
it("renders 1 DatePicker (type=month) with no '~'", () => {
|
|
86
86
|
const { container } = render(() => (
|
|
87
87
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
88
88
|
<DateRangePicker periodType="month" />
|
|
@@ -93,17 +93,17 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
93
93
|
const monthInputs = wrapper?.querySelectorAll("input[type='month']");
|
|
94
94
|
expect(monthInputs?.length).toBe(1);
|
|
95
95
|
|
|
96
|
-
// date
|
|
96
|
+
// no date-type inputs
|
|
97
97
|
const dateInputs = wrapper?.querySelectorAll("input[type='date']");
|
|
98
98
|
expect(dateInputs?.length).toBe(0);
|
|
99
99
|
|
|
100
|
-
// "~"
|
|
100
|
+
// "~" separator must not be present
|
|
101
101
|
expect(wrapper?.textContent).not.toContain("~");
|
|
102
102
|
});
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
describe("from
|
|
106
|
-
it("
|
|
105
|
+
describe("from change - 'day' mode", () => {
|
|
106
|
+
it("calls onToChange with the same value when from changes", () => {
|
|
107
107
|
const onFromChange = vi.fn();
|
|
108
108
|
const onToChange = vi.fn();
|
|
109
109
|
|
|
@@ -122,22 +122,22 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
122
122
|
const wrapper = container.querySelector("[data-date-range-picker]");
|
|
123
123
|
const input = wrapper?.querySelector("input[type='date']") as HTMLInputElement;
|
|
124
124
|
|
|
125
|
-
//
|
|
125
|
+
// trigger from change by inputting a new value
|
|
126
126
|
input.value = "2025-06-15";
|
|
127
127
|
input.dispatchEvent(new Event("change", { bubbles: true }));
|
|
128
128
|
|
|
129
|
-
// "day"
|
|
129
|
+
// in "day" mode, to is set to the same value as from
|
|
130
130
|
const expectedDate = new DateOnly(2025, 6, 15);
|
|
131
131
|
expect(onToChange).toHaveBeenCalledWith(expectedDate);
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
-
describe("from
|
|
136
|
-
it("
|
|
135
|
+
describe("from change - 'range' mode", () => {
|
|
136
|
+
it("calls onToChange(from) when from > to", () => {
|
|
137
137
|
const onFromChange = vi.fn();
|
|
138
138
|
const onToChange = vi.fn();
|
|
139
139
|
const originalTo = new DateOnly(2025, 3, 1);
|
|
140
|
-
const newFrom = new DateOnly(2025, 6, 15); //
|
|
140
|
+
const newFrom = new DateOnly(2025, 6, 15); // greater than to
|
|
141
141
|
|
|
142
142
|
const { container } = render(() => (
|
|
143
143
|
<ConfigProvider clientName="test"><I18nProvider>
|
|
@@ -155,18 +155,18 @@ describe("DateRangePicker 컴포넌트", () => {
|
|
|
155
155
|
const inputs = wrapper?.querySelectorAll("input[type='date']");
|
|
156
156
|
const fromInput = inputs?.[0] as HTMLInputElement;
|
|
157
157
|
|
|
158
|
-
//
|
|
158
|
+
// enter a date greater than to into from input
|
|
159
159
|
expect(fromInput).toBeDefined();
|
|
160
160
|
fromInput.value = "2025-06-15";
|
|
161
161
|
fromInput.dispatchEvent(new Event("change", { bubbles: true }));
|
|
162
162
|
|
|
163
|
-
// from > to
|
|
163
|
+
// since from > to, to must be updated to match from
|
|
164
164
|
expect(onToChange).toHaveBeenCalledWith(newFrom);
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
167
|
|
|
168
168
|
describe("disabled state", () => {
|
|
169
|
-
it("
|
|
169
|
+
it("applies aria-disabled to Select", () => {
|
|
170
170
|
const { container } = render(() => <DateRangePicker disabled />);
|
|
171
171
|
const wrapper = container.querySelector("[data-date-range-picker]");
|
|
172
172
|
|