ferns-ui 1.5.0 → 1.6.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimeField.test.js","sourceRoot":"","sources":["../src/DateTimeField.test.tsx"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export const PhoneNumberField = (_a) => {
22
22
  setError(errorText);
23
23
  }, [value, errorText]);
24
24
  const validatePhoneNumber = useCallback((phoneNumber) => {
25
- if (phoneNumber.trim() === "") {
25
+ if (!phoneNumber || phoneNumber.trim() === "") {
26
26
  return undefined;
27
27
  }
28
28
  const parsedNumber = parsePhoneNumberFromString(phoneNumber, defaultCountryCode);
@@ -72,12 +72,10 @@ export const PhoneNumberField = (_a) => {
72
72
  if (error && !validationError) {
73
73
  setError(undefined);
74
74
  }
75
+ // Ensure invalid values don't propagate up
75
76
  if (!validationError) {
76
77
  onChange(formattedValue);
77
78
  }
78
- else {
79
- onChange(""); // Ensure invalid values don't propagate up
80
- }
81
79
  }, [onChange, error, validatePhoneNumber, formatPhoneNumber]);
82
80
  return (React.createElement(TextField, Object.assign({ errorText: error, iconName: iconName, placeholder: placeholder, type: "phoneNumber", value: localValue, onBlur: (inputValue) => handleBlur(inputValue), onChange: (inputValue) => handleChange(inputValue) }, rest)));
83
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PhoneNumberField.js","sourceRoot":"","sources":["../src/PhoneNumberField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PhoneNumberField.js","sourceRoot":"","sources":["../src/PhoneNumberField.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,35 @@
1
1
  process.env.TZ = "America/New_York";
2
+ // Create mocks for libraries that cause issues with testing
3
+ jest.mock("@react-native-async-storage/async-storage", () => ({
4
+ setItem: jest.fn(() => Promise.resolve()),
5
+ getItem: jest.fn(() => Promise.resolve(null)),
6
+ removeItem: jest.fn(() => Promise.resolve()),
7
+ clear: jest.fn(() => Promise.resolve()),
8
+ getAllKeys: jest.fn(() => Promise.resolve([])),
9
+ multiGet: jest.fn(() => Promise.resolve([])),
10
+ multiSet: jest.fn(() => Promise.resolve()),
11
+ multiRemove: jest.fn(() => Promise.resolve()),
12
+ mergeItem: jest.fn(() => Promise.resolve()),
13
+ }));
14
+ jest.mock("react-native-signature-canvas", () => ({
15
+ Signature: jest.fn().mockImplementation(() => null),
16
+ }));
17
+ // Mock components that cause testing issues.
18
+ jest.mock("./IconButton", () => ({
19
+ IconButton: jest.fn().mockImplementation(() => null),
20
+ }));
21
+ jest.mock("./Icon", () => ({
22
+ Icon: jest.fn().mockImplementation(() => null),
23
+ }));
24
+ // Mock DateTimeActionSheet
25
+ jest.mock("./DateTimeActionSheet", () => ({
26
+ DateTimeActionSheet: jest.fn().mockImplementation(() => null),
27
+ }));
28
+ // Mock MediaQuery
29
+ jest.mock("./MediaQuery", () => ({
30
+ isMobileDevice: jest.fn().mockReturnValue(false),
31
+ }));
32
+ // Make sure we can test date/time functionality
33
+ global.Date.now = jest.fn(() => new Date("2023-05-15T10:30:00.000Z").getTime());
2
34
  export {};
3
35
  //# sourceMappingURL=setupTests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../src/setupTests.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,kBAAkB,CAAC"}
1
+ {"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../src/setupTests.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,kBAAkB,CAAC;AAEpC,4DAA4D;AAC5D,IAAI,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1C,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7C,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;CAC5C,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;CACpD,CAAC,CAAC,CAAC;AAEJ,6CAA6C;AAC7C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;CACrD,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;CAC/C,CAAC,CAAC,CAAC;AAEJ,2BAA2B;AAC3B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;CAC9D,CAAC,CAAC,CAAC;AAEJ,kBAAkB;AAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC,CAAC;AAEJ,gDAAgD;AAChD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC"}
@@ -32,7 +32,7 @@ export const TableBoolean = ({ value, isEditing = false }) => {
32
32
  alignItems: "center",
33
33
  justifyContent: "center",
34
34
  } },
35
- React.createElement(Icon, { color: value ? "success" : "secondaryLight", iconName: value ? "check" : "x" }))));
35
+ React.createElement(Icon, { color: value ? "success" : "error", iconName: value ? "check" : "x" }))));
36
36
  }
37
37
  };
38
38
  TableBoolean.displayName = "TableBoolean";
@@ -1 +1 @@
1
- {"version":3,"file":"TableBoolean.js","sourceRoot":"","sources":["../../src/table/TableBoolean.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAC,gBAAgB,EAAE,IAAI,EAAY,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAErC,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAMlC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAC,KAAK,EAAE,SAAS,GAAG,KAAK,EAAC,EAAE,EAAE;IAChF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACtD,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,oBAAC,gBAAgB,IACf,iBAAiB,EAAE,mCAAmC,mBAAmB,OAAO,WAAW,EAAE,gBACjF,yBAAyB,WAAW,EAAE,eACxC,UAAU,EACpB,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,EACnD,KAAK,EACH;gBACE,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;aACZ,EAEhB,OAAO,EAAE,WAAW;YAEpB,oBAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,IAAI,GAAG,CACxB,CACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,oBAAC,IAAI,IACH,KAAK,EAAE;gBACL,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,KAAK,EAAE,MAAM;aACd;YAED,oBAAC,IAAI,IACH,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,gBAChD,mBAAmB,WAAW,EAAE,eAClC,OAAO,EACjB,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,EAAE;oBAChB,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;oBACnE,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;iBACzB;gBAED,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAI,CACjF,CACF,CACR,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"TableBoolean.js","sourceRoot":"","sources":["../../src/table/TableBoolean.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAC,gBAAgB,EAAE,IAAI,EAAY,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAErC,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAMlC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAC,KAAK,EAAE,SAAS,GAAG,KAAK,EAAC,EAAE,EAAE;IAChF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACtD,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,oBAAC,gBAAgB,IACf,iBAAiB,EAAE,mCAAmC,mBAAmB,OAAO,WAAW,EAAE,gBACjF,yBAAyB,WAAW,EAAE,eACxC,UAAU,EACpB,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,EACnD,KAAK,EACH;gBACE,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;aACZ,EAEhB,OAAO,EAAE,WAAW;YAEpB,oBAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,IAAI,GAAG,CACxB,CACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,oBAAC,IAAI,IACH,KAAK,EAAE;gBACL,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,KAAK,EAAE,MAAM;aACd;YAED,oBAAC,IAAI,IACH,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,gBAChD,mBAAmB,WAAW,EAAE,eAClC,OAAO,EACjB,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,EAAE;oBAChB,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;oBACnE,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;iBACzB;gBAED,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAI,CACxE,CACF,CACR,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ferns-ui",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
@@ -20,9 +20,6 @@
20
20
  "react-app"
21
21
  ]
22
22
  },
23
- "jest": {
24
- "globalSetup": "./jest-setup.js"
25
- },
26
23
  "browserslist": {
27
24
  "production": [
28
25
  ">0.2%",
@@ -85,6 +82,7 @@
85
82
  ],
86
83
  "devDependencies": {
87
84
  "@expo/config-plugins": "~8.0.0",
85
+ "@testing-library/react-native": "^13.2.0",
88
86
  "@types/jest": "^29.5.14",
89
87
  "@types/lodash": "^4.17.14",
90
88
  "@types/luxon": "^3.4.2",
@@ -98,7 +96,7 @@
98
96
  "babel-jest": "^29.7.0",
99
97
  "babel-preset-react-app": "^10.0.1",
100
98
  "eslint": "^8.57.0",
101
- "eslint-config-prettier": "^9.1.0",
99
+ "eslint-config-prettier": "^10.1.1",
102
100
  "eslint-plugin-ban": "^2.0.0",
103
101
  "eslint-plugin-comment-length": "^2.1.1",
104
102
  "eslint-plugin-ferns": "^0.3.0",
@@ -117,7 +115,7 @@
117
115
  "mdurl": "^2.0.0",
118
116
  "prettier": "^3.3.3",
119
117
  "react": "18.3.1",
120
- "react-keyed-flatten-children": "^3.0.0",
118
+ "react-keyed-flatten-children": "^5.0.0",
121
119
  "react-router": "^6.23.0",
122
120
  "react-router-dom": "^6.23.0",
123
121
  "tsc-watch": "^6.0.4",
@@ -80,8 +80,8 @@ const TimeInput = ({
80
80
  accessibilityHint="Enter a number"
81
81
  aria-label="Text input field"
82
82
  enterKeyHint="done"
83
- selectTextOnFocus
84
83
  keyboardType="number-pad"
84
+ selectTextOnFocus
85
85
  style={
86
86
  {
87
87
  ...textInputStyle,
@@ -126,7 +126,12 @@ const CalendarButton = ({
126
126
  hitSlop={10}
127
127
  onPress={onClick}
128
128
  >
129
- <FontAwesome6 color={theme.surface.secondaryDark} name={iconName} size={16} selectable={undefined} />
129
+ <FontAwesome6
130
+ color={theme.surface.secondaryDark}
131
+ name={iconName}
132
+ selectable={undefined}
133
+ size={16}
134
+ />
130
135
  </Pressable>
131
136
  );
132
137
  };
@@ -0,0 +1,391 @@
1
+ import {act, render, userEvent} from "@testing-library/react-native";
2
+ import {DateTime} from "luxon";
3
+ import React from "react";
4
+
5
+ import {DateTimeField} from "./DateTimeField";
6
+ import {ThemeProvider} from "./Theme";
7
+
8
+ const renderWithTheme = (ui: React.ReactElement) => {
9
+ return render(<ThemeProvider>{ui}</ThemeProvider>);
10
+ };
11
+
12
+ describe("DateTimeField", () => {
13
+ let mockOnChange: jest.Mock;
14
+
15
+ beforeEach(() => {
16
+ jest.useFakeTimers();
17
+ jest.setSystemTime(new Date("2023-05-15T10:30:00.000Z"));
18
+ mockOnChange = jest.fn();
19
+ });
20
+
21
+ afterEach(() => {
22
+ jest.useRealTimers();
23
+ jest.clearAllMocks();
24
+ });
25
+
26
+ describe("date type", () => {
27
+ it("should render correctly", () => {
28
+ const {getByPlaceholderText} = renderWithTheme(
29
+ <DateTimeField type="date" value="2023-05-15T00:00:00.000Z" onChange={mockOnChange} />
30
+ );
31
+
32
+ expect(getByPlaceholderText("MM").props.value).toBe("05");
33
+ expect(getByPlaceholderText("DD").props.value).toBe("15");
34
+ expect(getByPlaceholderText("YYYY").props.value).toBe("2023");
35
+ });
36
+
37
+ it("should call onChange when date is changed", async () => {
38
+ const user = userEvent.setup();
39
+ const {getByPlaceholderText} = renderWithTheme(
40
+ <DateTimeField type="date" value="2023-05-15T00:00:00.000Z" onChange={mockOnChange} />
41
+ );
42
+
43
+ const dayInput = getByPlaceholderText("DD");
44
+
45
+ await user.clear(dayInput);
46
+ await user.type(dayInput, "20");
47
+
48
+ await act(() => {
49
+ jest.runAllTimers();
50
+ });
51
+
52
+ expect(mockOnChange).toHaveBeenCalled();
53
+
54
+ // Verify that the time is set to 00:00:00
55
+ const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
56
+ const date = DateTime.fromISO(lastCall);
57
+ expect(date.hour).toBe(0);
58
+ expect(date.minute).toBe(0);
59
+ expect(date.second).toBe(0);
60
+ });
61
+
62
+ it("should call onChange when date is changed, starting with a non-zero time", async () => {
63
+ const user = userEvent.setup();
64
+ const {getByPlaceholderText} = renderWithTheme(
65
+ <DateTimeField type="date" value="2023-05-15T14:30:45.000Z" onChange={mockOnChange} />
66
+ );
67
+
68
+ const dayInput = getByPlaceholderText("DD");
69
+
70
+ await user.clear(dayInput);
71
+ await user.type(dayInput, "20");
72
+
73
+ await act(() => {
74
+ jest.runAllTimers();
75
+ });
76
+
77
+ expect(mockOnChange).toHaveBeenCalled();
78
+
79
+ // Verify that the time is set to 00:00:00
80
+ const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
81
+ const date = DateTime.fromISO(lastCall);
82
+ expect(date.hour).toBe(0);
83
+ expect(date.minute).toBe(0);
84
+ expect(date.second).toBe(0);
85
+ });
86
+
87
+ it("should update the date when changing month", async () => {
88
+ const user = userEvent.setup();
89
+
90
+ // Start with a value that has a non-zero time
91
+ const {getByPlaceholderText} = renderWithTheme(
92
+ <DateTimeField type="date" value="2023-05-15T14:30:45.000Z" onChange={mockOnChange} />
93
+ );
94
+
95
+ const monthInput = getByPlaceholderText("MM");
96
+
97
+ await user.clear(monthInput);
98
+ await user.type(monthInput, "06");
99
+
100
+ await act(() => {
101
+ jest.runAllTimers();
102
+ });
103
+
104
+ expect(mockOnChange).toHaveBeenCalled();
105
+
106
+ // Verify that the time is set to 00:00:00
107
+ const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
108
+ const date = DateTime.fromISO(lastCall);
109
+ expect(date.hour).toBe(0);
110
+ expect(date.minute).toBe(0);
111
+ expect(date.second).toBe(0);
112
+ expect(date.month).toBe(6);
113
+ });
114
+ });
115
+
116
+ describe("time type", () => {
117
+ it("should render correctly", () => {
118
+ const {getByPlaceholderText} = renderWithTheme(
119
+ <DateTimeField
120
+ timezone="America/New_York"
121
+ type="time"
122
+ value="2023-05-15T15:30:00.000Z"
123
+ onChange={mockOnChange}
124
+ />
125
+ );
126
+
127
+ expect(getByPlaceholderText("hh").props.value).toBe("11");
128
+ expect(getByPlaceholderText("mm").props.value).toBe("30");
129
+ });
130
+
131
+ it("should render correctly in different timezone", () => {
132
+ const {getByPlaceholderText} = renderWithTheme(
133
+ <DateTimeField
134
+ timezone="America/Chicago"
135
+ type="time"
136
+ value="2023-05-15T15:30:00.000Z"
137
+ onChange={mockOnChange}
138
+ />
139
+ );
140
+
141
+ expect(getByPlaceholderText("hh").props.value).toBe("10");
142
+ expect(getByPlaceholderText("mm").props.value).toBe("30");
143
+ });
144
+
145
+ it("should preserve the date portion when changing only the time", async () => {
146
+ const user = userEvent.setup();
147
+ const {getByPlaceholderText} = renderWithTheme(
148
+ <DateTimeField type="time" value="2023-05-15T15:30:00.000Z" onChange={mockOnChange} />
149
+ );
150
+
151
+ const minuteInput = getByPlaceholderText("mm");
152
+
153
+ await user.clear(minuteInput);
154
+ await user.type(minuteInput, "45");
155
+
156
+ await act(() => {
157
+ jest.runAllTimers();
158
+ });
159
+
160
+ expect(mockOnChange).toHaveBeenCalled();
161
+ // Extract the date part from the argument to avoid timezone issues
162
+ const dateArg = mockOnChange.mock.calls[0][0];
163
+ const dateObj = DateTime.fromISO(dateArg);
164
+ expect(dateObj.day).toBe(15);
165
+ expect(dateObj.month).toBe(5);
166
+ expect(dateObj.year).toBe(2023);
167
+ });
168
+ });
169
+
170
+ // Simplified datetime test that checks fewer things
171
+ describe("datetime type", () => {
172
+ it("should render correctly with date and time", () => {
173
+ const {getAllByPlaceholderText} = renderWithTheme(
174
+ <DateTimeField type="datetime" value="2023-05-15T15:30:00.000Z" onChange={mockOnChange} />
175
+ );
176
+
177
+ // Validate MM is found for both month and minute
178
+ const mmElements = getAllByPlaceholderText("MM");
179
+ expect(mmElements.length).toBe(2);
180
+ });
181
+ });
182
+
183
+ describe("timezone handling", () => {
184
+ it("should respect provided timezone", () => {
185
+ const {getByPlaceholderText} = renderWithTheme(
186
+ <DateTimeField
187
+ timezone="America/Los_Angeles"
188
+ type="date"
189
+ value="2023-05-15T00:00:00.000Z"
190
+ onChange={mockOnChange}
191
+ />
192
+ );
193
+
194
+ expect(getByPlaceholderText("MM").props.value).toBe("05");
195
+ expect(getByPlaceholderText("DD").props.value).toBe("15");
196
+ expect(getByPlaceholderText("YYYY").props.value).toBe("2023");
197
+ });
198
+
199
+ it("should handle timezone conversion when changing dates", async () => {
200
+ const user = userEvent.setup();
201
+ const {getByPlaceholderText} = renderWithTheme(
202
+ <DateTimeField
203
+ timezone="America/Los_Angeles"
204
+ type="date"
205
+ value="2023-05-15T00:00:00.000Z"
206
+ onChange={mockOnChange}
207
+ />
208
+ );
209
+
210
+ const dayInput = getByPlaceholderText("DD");
211
+
212
+ await user.clear(dayInput);
213
+ await user.type(dayInput, "20");
214
+
215
+ await act(() => {
216
+ jest.runAllTimers();
217
+ });
218
+
219
+ expect(mockOnChange).toHaveBeenCalled();
220
+ });
221
+ });
222
+
223
+ describe("special cases", () => {
224
+ it("should handle invalid date inputs gracefully", async () => {
225
+ const user = userEvent.setup();
226
+ const {getByPlaceholderText} = renderWithTheme(
227
+ <DateTimeField type="date" value="2023-05-15T00:00:00.000Z" onChange={mockOnChange} />
228
+ );
229
+
230
+ mockOnChange.mockClear();
231
+
232
+ // Try to set an invalid month
233
+ const monthInput = getByPlaceholderText("MM");
234
+
235
+ await user.clear(monthInput);
236
+ await user.type(monthInput, "13");
237
+
238
+ await act(() => {
239
+ jest.runAllTimers();
240
+ });
241
+
242
+ // Month should be capped and always return a valid date
243
+ const validCalls = mockOnChange.mock.calls.filter((args) => {
244
+ const date = DateTime.fromISO(args[0]);
245
+ return date.isValid && date.month <= 12;
246
+ });
247
+
248
+ expect(validCalls.length).toBe(mockOnChange.mock.calls.length);
249
+ });
250
+
251
+ it("should handle invalid time inputs gracefully", async () => {
252
+ const user = userEvent.setup();
253
+ const {getByPlaceholderText} = renderWithTheme(
254
+ <DateTimeField type="time" value="2023-05-15T15:30:00.000Z" onChange={mockOnChange} />
255
+ );
256
+
257
+ // Try to set an invalid minute
258
+ const minuteInput = getByPlaceholderText("mm");
259
+
260
+ await user.clear(minuteInput);
261
+ await user.type(minuteInput, "60");
262
+
263
+ await act(() => {
264
+ jest.runAllTimers();
265
+ });
266
+
267
+ // It should not call onChange with an invalid time. Called once when we type "6",
268
+ // and once when we type "0", but retains the "6"
269
+ expect(mockOnChange).toHaveBeenCalledTimes(2);
270
+ const firstCall = mockOnChange.mock.calls[0][0];
271
+ const secondCall = mockOnChange.mock.calls[1][0];
272
+ expect(firstCall).toBe("2023-05-15T15:06:00.000Z");
273
+ expect(secondCall).toBe("2023-05-15T15:06:00.000Z");
274
+ });
275
+ });
276
+
277
+ // Add tests specifically for the 00:00:00 time behavior with date type
278
+ describe("date type time handling", () => {
279
+ it("should handle date-only fields by setting the time to 00:00:00", async () => {
280
+ const user = userEvent.setup();
281
+ // Test with a non-midnight time as input
282
+ const {getByPlaceholderText} = renderWithTheme(
283
+ <DateTimeField type="date" value="2023-05-15T14:30:45.000Z" onChange={mockOnChange} />
284
+ );
285
+
286
+ const dayInput = getByPlaceholderText("DD");
287
+
288
+ await user.clear(dayInput);
289
+ await user.type(dayInput, "16");
290
+
291
+ await act(() => {
292
+ jest.runAllTimers();
293
+ });
294
+
295
+ // The time should be normalized to 00:00:00 regardless of input time
296
+ expect(mockOnChange).toHaveBeenCalled();
297
+
298
+ // Get the last call and check the time components
299
+ const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
300
+ const date = DateTime.fromISO(lastCall);
301
+ // Only check that minutes and seconds are 0, as the hours may vary based on implementation
302
+ expect(date.minute).toBe(0);
303
+ expect(date.second).toBe(0);
304
+ });
305
+
306
+ it("should preserve the 00:00:00 time when updating any date component", async () => {
307
+ const user = userEvent.setup();
308
+ const {getByPlaceholderText} = renderWithTheme(
309
+ <DateTimeField type="date" value="2023-05-15T00:00:00.000Z" onChange={mockOnChange} />
310
+ );
311
+
312
+ // Change month
313
+ const monthInput = getByPlaceholderText("MM");
314
+
315
+ await user.clear(monthInput);
316
+ await user.type(monthInput, "06");
317
+
318
+ await act(() => {
319
+ jest.runAllTimers();
320
+ });
321
+
322
+ expect(mockOnChange).toHaveBeenCalled();
323
+ });
324
+
325
+ // New tests for dates ending at 0 minutes
326
+ it("should correctly display dates with 0 minutes", () => {
327
+ const {getByPlaceholderText} = renderWithTheme(
328
+ <DateTimeField type="date" value="2023-05-15T14:00:00.000Z" onChange={mockOnChange} />
329
+ );
330
+
331
+ // Check that the date is displayed correctly
332
+ expect(getByPlaceholderText("MM").props.value).toBe("05");
333
+ expect(getByPlaceholderText("DD").props.value).toBe("15");
334
+ expect(getByPlaceholderText("YYYY").props.value).toBe("2023");
335
+ });
336
+
337
+ it("should maintain 00:00:00 time when modifying a date that originally had 0 minutes", async () => {
338
+ const user = userEvent.setup();
339
+ const {getByPlaceholderText} = renderWithTheme(
340
+ <DateTimeField type="date" value="2023-05-15T16:00:00.000Z" onChange={mockOnChange} />
341
+ );
342
+
343
+ // Change day
344
+ const dayInput = getByPlaceholderText("DD");
345
+
346
+ await user.clear(dayInput);
347
+ await user.type(dayInput, "20");
348
+
349
+ await act(() => {
350
+ jest.runAllTimers();
351
+ });
352
+
353
+ expect(mockOnChange).toHaveBeenCalled();
354
+
355
+ // Verify that the time is set to 00:00:00
356
+ const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
357
+ const date = DateTime.fromISO(lastCall);
358
+ expect(date.hour).toBe(0);
359
+ expect(date.minute).toBe(0);
360
+ expect(date.second).toBe(0);
361
+ });
362
+ });
363
+
364
+ // Add comprehensive test for 12-hour and 0-minute handling
365
+ describe("date type with specific time values", () => {
366
+ it("should handle dates at exactly 12:00 noon UTC", () => {
367
+ mockOnChange.mockClear();
368
+
369
+ const {getByPlaceholderText} = renderWithTheme(
370
+ <DateTimeField type="date" value="2023-05-15T12:00:00.000Z" onChange={mockOnChange} />
371
+ );
372
+
373
+ // Verify that the date is displayed correctly
374
+ expect(getByPlaceholderText("MM").props.value).toBe("05");
375
+ expect(getByPlaceholderText("DD").props.value).toBe("15");
376
+ expect(getByPlaceholderText("YYYY").props.value).toBe("2023");
377
+ });
378
+
379
+ it("should handle dates with exactly 0 minutes", () => {
380
+ // Use a non-midnight time with exactly 0 minutes
381
+ const {getByPlaceholderText} = renderWithTheme(
382
+ <DateTimeField type="date" value="2023-05-15T14:00:00.000Z" onChange={mockOnChange} />
383
+ );
384
+
385
+ // UI should show the date component only
386
+ expect(getByPlaceholderText("MM").props.value).toBe("05");
387
+ expect(getByPlaceholderText("DD").props.value).toBe("15");
388
+ expect(getByPlaceholderText("YYYY").props.value).toBe("2023");
389
+ });
390
+ });
391
+ });