@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
|
@@ -4,63 +4,63 @@ import { createSignal } from "solid-js";
|
|
|
4
4
|
import { DateTime } from "@simplysm/core-common";
|
|
5
5
|
import { DateTimePicker } from "../../../../src/components/form-control/field/DateTimePicker";
|
|
6
6
|
|
|
7
|
-
describe("DateTimePicker
|
|
7
|
+
describe("DateTimePicker component", () => {
|
|
8
8
|
describe("basic rendering", () => {
|
|
9
|
-
it("
|
|
9
|
+
it("renders input type=datetime-local when unit=minute", () => {
|
|
10
10
|
const { container } = render(() => <DateTimePicker unit="minute" />);
|
|
11
11
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
12
12
|
expect(input).toBeTruthy();
|
|
13
13
|
expect(input.type).toBe("datetime-local");
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
it("
|
|
16
|
+
it("renders input type=datetime-local when unit=second", () => {
|
|
17
17
|
const { container } = render(() => <DateTimePicker unit="second" />);
|
|
18
18
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
19
19
|
expect(input).toBeTruthy();
|
|
20
20
|
expect(input.type).toBe("datetime-local");
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
it("
|
|
23
|
+
it("defaults unit to minute", () => {
|
|
24
24
|
const { container } = render(() => <DateTimePicker />);
|
|
25
25
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
26
26
|
expect(input.type).toBe("datetime-local");
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
it("autocomplete
|
|
29
|
+
it("defaults autocomplete to one-time-code", () => {
|
|
30
30
|
const { container } = render(() => <DateTimePicker />);
|
|
31
31
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
32
32
|
expect(input.autocomplete).toBe("one-time-code");
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
it("
|
|
35
|
+
it("sets step=1 when unit=second", () => {
|
|
36
36
|
const { container } = render(() => <DateTimePicker unit="second" />);
|
|
37
37
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
38
38
|
expect(input.step).toBe("1");
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
it("
|
|
41
|
+
it("does not set step when unit=minute", () => {
|
|
42
42
|
const { container } = render(() => <DateTimePicker unit="minute" />);
|
|
43
43
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
44
44
|
expect(input.step).toBe("");
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
describe("
|
|
49
|
-
it("DateTime
|
|
48
|
+
describe("value conversion", () => {
|
|
49
|
+
it("displays DateTime in yyyy-MM-ddTHH:mm format for minute unit", () => {
|
|
50
50
|
const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
|
|
51
51
|
const { container } = render(() => <DateTimePicker unit="minute" value={dateTime} />);
|
|
52
52
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
53
53
|
expect(input.value).toBe("2025-03-15T10:30");
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
-
it("DateTime
|
|
56
|
+
it("displays DateTime in yyyy-MM-ddTHH:mm:ss format for second unit", () => {
|
|
57
57
|
const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
|
|
58
58
|
const { container } = render(() => <DateTimePicker unit="second" value={dateTime} />);
|
|
59
59
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
60
60
|
expect(input.value).toBe("2025-03-15T10:30:45");
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
it("
|
|
63
|
+
it("passes DateTime converted from minute input to onValueChange", () => {
|
|
64
64
|
const handleChange = vi.fn();
|
|
65
65
|
const { container } = render(() => (
|
|
66
66
|
<DateTimePicker unit="minute" onValueChange={handleChange} />
|
|
@@ -79,7 +79,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
79
79
|
expect(result.second).toBe(0);
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
-
it("
|
|
82
|
+
it("passes DateTime converted from second input to onValueChange", () => {
|
|
83
83
|
const handleChange = vi.fn();
|
|
84
84
|
const { container } = render(() => (
|
|
85
85
|
<DateTimePicker unit="second" onValueChange={handleChange} />
|
|
@@ -98,7 +98,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
98
98
|
expect(result.second).toBe(45);
|
|
99
99
|
});
|
|
100
100
|
|
|
101
|
-
it("
|
|
101
|
+
it("passes undefined to onValueChange on empty input", () => {
|
|
102
102
|
const handleChange = vi.fn();
|
|
103
103
|
const dateTime = new DateTime(2025, 3, 15, 10, 30, 45);
|
|
104
104
|
const { container } = render(() => (
|
|
@@ -112,29 +112,29 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
112
112
|
});
|
|
113
113
|
});
|
|
114
114
|
|
|
115
|
-
describe("min/max
|
|
116
|
-
it("min
|
|
115
|
+
describe("min/max props", () => {
|
|
116
|
+
it("converts min to string for minute unit", () => {
|
|
117
117
|
const minDateTime = new DateTime(2025, 1, 1, 0, 0, 0);
|
|
118
118
|
const { container } = render(() => <DateTimePicker unit="minute" min={minDateTime} />);
|
|
119
119
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
120
120
|
expect(input.min).toBe("2025-01-01T00:00");
|
|
121
121
|
});
|
|
122
122
|
|
|
123
|
-
it("max
|
|
123
|
+
it("converts max to string for minute unit", () => {
|
|
124
124
|
const maxDateTime = new DateTime(2025, 12, 31, 23, 59, 0);
|
|
125
125
|
const { container } = render(() => <DateTimePicker unit="minute" max={maxDateTime} />);
|
|
126
126
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
127
127
|
expect(input.max).toBe("2025-12-31T23:59");
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
-
it("
|
|
130
|
+
it("includes seconds in min for second unit", () => {
|
|
131
131
|
const minDateTime = new DateTime(2025, 1, 1, 0, 0, 30);
|
|
132
132
|
const { container } = render(() => <DateTimePicker unit="second" min={minDateTime} />);
|
|
133
133
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
134
134
|
expect(input.min).toBe("2025-01-01T00:00:30");
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
-
it("
|
|
137
|
+
it("includes seconds in max for second unit", () => {
|
|
138
138
|
const maxDateTime = new DateTime(2025, 12, 31, 23, 59, 59);
|
|
139
139
|
const { container } = render(() => <DateTimePicker unit="second" max={maxDateTime} />);
|
|
140
140
|
const input = container.querySelector("input") as HTMLInputElement;
|
|
@@ -142,8 +142,8 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
142
142
|
});
|
|
143
143
|
});
|
|
144
144
|
|
|
145
|
-
describe("controlled
|
|
146
|
-
it("
|
|
145
|
+
describe("controlled pattern", () => {
|
|
146
|
+
it("updates input value when external state changes", () => {
|
|
147
147
|
const [value, setValue] = createSignal<DateTime | undefined>(
|
|
148
148
|
new DateTime(2025, 1, 1, 10, 0, 0),
|
|
149
149
|
);
|
|
@@ -159,8 +159,8 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
159
159
|
});
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
describe("uncontrolled
|
|
163
|
-
it("
|
|
162
|
+
describe("uncontrolled pattern", () => {
|
|
163
|
+
it("manages value internally without onValueChange", () => {
|
|
164
164
|
const { container } = render(() => (
|
|
165
165
|
<DateTimePicker unit="minute" value={new DateTime(2025, 1, 1, 10, 0, 0)} />
|
|
166
166
|
));
|
|
@@ -174,7 +174,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
174
174
|
});
|
|
175
175
|
|
|
176
176
|
describe("disabled state", () => {
|
|
177
|
-
it("
|
|
177
|
+
it("renders as div when disabled=true", () => {
|
|
178
178
|
const { container } = render(() => (
|
|
179
179
|
<DateTimePicker disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
|
|
180
180
|
));
|
|
@@ -185,14 +185,14 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
185
185
|
expect(div).toBeTruthy();
|
|
186
186
|
});
|
|
187
187
|
|
|
188
|
-
it("
|
|
188
|
+
it("displays value when disabled", () => {
|
|
189
189
|
const { getByText } = render(() => (
|
|
190
190
|
<DateTimePicker unit="minute" disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
|
|
191
191
|
));
|
|
192
192
|
expect(getByText("2025-03-15T10:30")).toBeTruthy();
|
|
193
193
|
});
|
|
194
194
|
|
|
195
|
-
it("disabled
|
|
195
|
+
it("applies disabled style", () => {
|
|
196
196
|
const { container } = render(() => (
|
|
197
197
|
<DateTimePicker disabled value={new DateTime(2025, 3, 15, 10, 30, 0)} />
|
|
198
198
|
));
|
|
@@ -201,8 +201,8 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
201
201
|
});
|
|
202
202
|
});
|
|
203
203
|
|
|
204
|
-
describe("readonly
|
|
205
|
-
it("
|
|
204
|
+
describe("readonly state", () => {
|
|
205
|
+
it("renders as div when readonly=true", () => {
|
|
206
206
|
const { container } = render(() => (
|
|
207
207
|
<DateTimePicker readonly value={new DateTime(2025, 3, 15, 10, 30, 0)} />
|
|
208
208
|
));
|
|
@@ -213,7 +213,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
213
213
|
expect(div).toBeTruthy();
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
it("
|
|
216
|
+
it("displays value when readonly", () => {
|
|
217
217
|
const { getByText } = render(() => (
|
|
218
218
|
<DateTimePicker unit="minute" readonly value={new DateTime(2025, 3, 15, 10, 30, 0)} />
|
|
219
219
|
));
|
|
@@ -221,22 +221,22 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
221
221
|
});
|
|
222
222
|
});
|
|
223
223
|
|
|
224
|
-
describe("size
|
|
225
|
-
it("
|
|
224
|
+
describe("size option", () => {
|
|
225
|
+
it("applies small padding when size=sm", () => {
|
|
226
226
|
const { container } = render(() => <DateTimePicker size="sm" />);
|
|
227
227
|
const wrapper = container.firstChild as HTMLElement;
|
|
228
228
|
expect(wrapper.classList.contains("py-0.5")).toBe(true);
|
|
229
229
|
});
|
|
230
230
|
|
|
231
|
-
it("
|
|
231
|
+
it("applies large padding when size=lg", () => {
|
|
232
232
|
const { container } = render(() => <DateTimePicker size="lg" />);
|
|
233
233
|
const wrapper = container.firstChild as HTMLElement;
|
|
234
234
|
expect(wrapper.classList.contains("py-2")).toBe(true);
|
|
235
235
|
});
|
|
236
236
|
});
|
|
237
237
|
|
|
238
|
-
describe("inset
|
|
239
|
-
it("
|
|
238
|
+
describe("inset style", () => {
|
|
239
|
+
it("applies relative to outer and inset style to content when inset=true", () => {
|
|
240
240
|
const { container } = render(() => <DateTimePicker inset />);
|
|
241
241
|
const outer = container.firstChild as HTMLElement;
|
|
242
242
|
expect(outer.classList.contains("relative")).toBe(true);
|
|
@@ -247,7 +247,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
247
247
|
expect(contentDiv.classList.contains("bg-primary-50")).toBe(true);
|
|
248
248
|
});
|
|
249
249
|
|
|
250
|
-
it("
|
|
250
|
+
it("shows content div and no input when inset + readonly", () => {
|
|
251
251
|
const { container } = render(() => (
|
|
252
252
|
<DateTimePicker inset readonly value={new DateTime(2025, 3, 15, 14, 30, 0)} />
|
|
253
253
|
));
|
|
@@ -261,7 +261,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
261
261
|
expect(outer.querySelector("input:not([aria-hidden])")).toBeFalsy();
|
|
262
262
|
});
|
|
263
263
|
|
|
264
|
-
it("
|
|
264
|
+
it("shows hidden content div and input when inset + editable", () => {
|
|
265
265
|
const { container } = render(() => (
|
|
266
266
|
<DateTimePicker inset value={new DateTime(2025, 3, 15, 14, 30, 0)} />
|
|
267
267
|
));
|
|
@@ -274,7 +274,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
274
274
|
expect(outer.querySelector("input")).toBeTruthy();
|
|
275
275
|
});
|
|
276
276
|
|
|
277
|
-
it("
|
|
277
|
+
it("shows NBSP in content div when inset + empty value", () => {
|
|
278
278
|
const { container } = render(() => <DateTimePicker inset readonly />);
|
|
279
279
|
const outer = container.firstChild as HTMLElement;
|
|
280
280
|
const contentDiv = outer.querySelector("[data-datetime-field-content]") as HTMLElement;
|
|
@@ -282,14 +282,14 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
282
282
|
});
|
|
283
283
|
});
|
|
284
284
|
|
|
285
|
-
describe("
|
|
286
|
-
it("
|
|
285
|
+
describe("dark mode style", () => {
|
|
286
|
+
it("applies dark mode border style", () => {
|
|
287
287
|
const { container } = render(() => <DateTimePicker />);
|
|
288
288
|
const wrapper = container.firstChild as HTMLElement;
|
|
289
289
|
expect(wrapper.classList.contains("dark:border-base-700")).toBe(true);
|
|
290
290
|
});
|
|
291
291
|
|
|
292
|
-
it("
|
|
292
|
+
it("applies dark mode background style", () => {
|
|
293
293
|
const { container } = render(() => <DateTimePicker />);
|
|
294
294
|
const wrapper = container.firstChild as HTMLElement;
|
|
295
295
|
expect(wrapper.classList.contains("dark:bg-primary-950/30")).toBe(true);
|
|
@@ -297,7 +297,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
297
297
|
});
|
|
298
298
|
|
|
299
299
|
describe("class merging", () => {
|
|
300
|
-
it("
|
|
300
|
+
it("merges custom class with existing styles", () => {
|
|
301
301
|
// eslint-disable-next-line tailwindcss/no-custom-classname
|
|
302
302
|
const { container } = render(() => <DateTimePicker class="my-custom-class" />);
|
|
303
303
|
const wrapper = container.firstChild as HTMLElement;
|
|
@@ -312,7 +312,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
312
312
|
expect(hiddenInput.validationMessage).toBe("This field is required");
|
|
313
313
|
});
|
|
314
314
|
|
|
315
|
-
it("required
|
|
315
|
+
it("is valid when required and value exists", () => {
|
|
316
316
|
const { container } = render(() => (
|
|
317
317
|
<DateTimePicker required value={new DateTime(2024, 1, 1, 0, 0, 0)} />
|
|
318
318
|
));
|
|
@@ -320,7 +320,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
320
320
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
321
321
|
});
|
|
322
322
|
|
|
323
|
-
it("
|
|
323
|
+
it("sets error message when min is violated", () => {
|
|
324
324
|
const { container } = render(() => (
|
|
325
325
|
<DateTimePicker
|
|
326
326
|
min={new DateTime(2024, 6, 1, 0, 0, 0)}
|
|
@@ -331,7 +331,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
331
331
|
expect(hiddenInput.validationMessage).not.toBe("");
|
|
332
332
|
});
|
|
333
333
|
|
|
334
|
-
it("min
|
|
334
|
+
it("is valid when min is satisfied", () => {
|
|
335
335
|
const { container } = render(() => (
|
|
336
336
|
<DateTimePicker
|
|
337
337
|
min={new DateTime(2024, 1, 1, 0, 0, 0)}
|
|
@@ -342,7 +342,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
342
342
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
343
343
|
});
|
|
344
344
|
|
|
345
|
-
it("
|
|
345
|
+
it("sets error message when max is violated", () => {
|
|
346
346
|
const { container } = render(() => (
|
|
347
347
|
<DateTimePicker
|
|
348
348
|
max={new DateTime(2024, 6, 1, 0, 0, 0)}
|
|
@@ -353,7 +353,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
353
353
|
expect(hiddenInput.validationMessage).not.toBe("");
|
|
354
354
|
});
|
|
355
355
|
|
|
356
|
-
it("max
|
|
356
|
+
it("is valid when max is satisfied", () => {
|
|
357
357
|
const { container } = render(() => (
|
|
358
358
|
<DateTimePicker
|
|
359
359
|
max={new DateTime(2024, 12, 31, 23, 59, 59)}
|
|
@@ -364,7 +364,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
364
364
|
expect(hiddenInput.validity.valid).toBe(true);
|
|
365
365
|
});
|
|
366
366
|
|
|
367
|
-
it("
|
|
367
|
+
it("sets error message returned by validate function", () => {
|
|
368
368
|
const { container } = render(() => (
|
|
369
369
|
<DateTimePicker value={new DateTime(2024, 1, 1, 0, 0, 0)} validate={() => "커스텀 에러"} />
|
|
370
370
|
));
|
|
@@ -372,7 +372,7 @@ describe("DateTimePicker 컴포넌트", () => {
|
|
|
372
372
|
expect(hiddenInput.validationMessage).toBe("커스텀 에러");
|
|
373
373
|
});
|
|
374
374
|
|
|
375
|
-
it("validate
|
|
375
|
+
it("is valid when validate function returns undefined", () => {
|
|
376
376
|
const { container } = render(() => (
|
|
377
377
|
<DateTimePicker value={new DateTime(2024, 1, 1, 0, 0, 0)} validate={() => undefined} />
|
|
378
378
|
));
|