UNPKG

react-native-timer-picker

Version:

A simple, flexible, performant duration picker for React Native apps 🔥 Great for timers, alarms and duration inputs ⏰🕰️⏳ Includes iOS-style haptic and audio feedback 🍏

276 lines (275 loc) 11.9 kB
"use strict"; var _react = _interopRequireDefault(require("react")); var _reactNative = require("react-native"); var _reactNative2 = require("@testing-library/react-native"); var _TimerPickerModal = _interopRequireDefault(require("../components/TimerPickerModal")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } describe("TimerPickerModal", () => { const mockOnConfirm = jest.fn(); const mockOnCancel = jest.fn(); beforeEach(() => { jest.useFakeTimers(); }); afterEach(() => { jest.runOnlyPendingTimers(); jest.useRealTimers(); (0, _reactNative2.cleanup)(); }); const defaultProps = { visible: true, setIsVisible: jest.fn(), onConfirm: mockOnConfirm, onCancel: mockOnCancel }; it("renders without crashing", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps)); const component = getByTestId("timer-picker-modal"); expect(component).toBeDefined(); }); it("calls onConfirm when Confirm button is pressed", () => { const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps)); const confirmButton = getByText("Confirm"); _reactNative2.fireEvent.press(confirmButton); expect(mockOnConfirm).toHaveBeenCalled(); }); it("calls onCancel when Cancel button is pressed", () => { const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps)); const cancelButton = getByText("Cancel"); _reactNative2.fireEvent.press(cancelButton); expect(mockOnCancel).toHaveBeenCalled(); }); it("hides the modal when Cancel button is pressed", () => { const setIsVisibleMock = jest.fn(); const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { setIsVisible: setIsVisibleMock }))); const cancelButton = getByText("Cancel"); _reactNative2.fireEvent.press(cancelButton); expect(setIsVisibleMock).toHaveBeenCalledWith(false); }); it("hides the modal when overlay is pressed", () => { const setIsVisibleMock = jest.fn(); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { closeOnOverlayPress: true, setIsVisible: setIsVisibleMock }))); const overlay = getByTestId("modal-backdrop"); _reactNative2.fireEvent.press(overlay); expect(setIsVisibleMock).toHaveBeenCalledWith(false); }); it("calls onConfirm with selected duration when Confirm button is pressed", () => { const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, defaultProps)); // Select duration in TimerPicker, assuming its interaction is tested separately const confirmButton = getByText("Confirm"); _reactNative2.fireEvent.press(confirmButton); expect(mockOnConfirm).toHaveBeenCalledWith(expect.objectContaining({})); }); it("renders but is not visible when visible prop is false", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { visible: false }))); const modal = getByTestId("timer-picker-modal"); expect(modal).toBeDefined(); // Modal component still renders but with visible={false} expect(modal.props.visible).toBe(false); }); it("renders with custom button labels", () => { const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { confirmButtonText: "OK", cancelButtonText: "Dismiss" }))); expect(getByText("OK")).toBeDefined(); expect(getByText("Dismiss")).toBeDefined(); }); it("renders with custom modal title", () => { const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { modalTitle: "Select Time" }))); expect(getByText("Select Time")).toBeDefined(); }); it("does not close on overlay press when closeOnOverlayPress is false", () => { const setIsVisibleMock = jest.fn(); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { closeOnOverlayPress: false, setIsVisible: setIsVisibleMock }))); const overlay = getByTestId("modal-backdrop"); _reactNative2.fireEvent.press(overlay); expect(setIsVisibleMock).not.toHaveBeenCalled(); }); it("hides Cancel button when hideCancelButton is true", () => { const { queryByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { hideCancelButton: true }))); expect(queryByText("Cancel")).toBeNull(); }); it("renders with initial value", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { initialValue: { hours: 2, minutes: 30, seconds: 0 } }))); expect(getByTestId("timer-picker-modal")).toBeDefined(); }); it("renders with custom intervals", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { hourInterval: 2, minuteInterval: 15, secondInterval: 5 }))); expect(getByTestId("timer-picker-modal")).toBeDefined(); }); it("calls both onCancel and setIsVisible when Cancel is pressed", () => { const setIsVisibleMock = jest.fn(); const onCancelMock = jest.fn(); const { getByText } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { onCancel: onCancelMock, setIsVisible: setIsVisibleMock }))); const cancelButton = getByText("Cancel"); _reactNative2.fireEvent.press(cancelButton); expect(onCancelMock).toHaveBeenCalled(); expect(setIsVisibleMock).toHaveBeenCalledWith(false); }); it("hides specific time units when respective hide props are provided", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { hideHours: true, hideSeconds: true }))); expect(getByTestId("timer-picker-modal")).toBeDefined(); // Note: The specific duration scroll test IDs would be in the TimerPicker component }); it("renders without crashing with all optional props", () => { const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { modalTitle: "Pick Duration", confirmButtonText: "Done", cancelButtonText: "Close", hourLabel: "h", minuteLabel: "m", secondLabel: "s", hideHours: false, hideMinutes: false, hideSeconds: false, hideDays: false }))); expect(getByTestId("timer-picker-modal")).toBeDefined(); }); it("renders custom cancel button when provided", () => { const CustomButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-cancel-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Cancel")); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { cancelButton: /*#__PURE__*/_react.default.createElement(CustomButton, null) }))); expect(getByTestId("custom-cancel-button")).toBeDefined(); }); it("renders custom confirm button when provided", () => { const CustomButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-confirm-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Confirm")); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { confirmButton: /*#__PURE__*/_react.default.createElement(CustomButton, null) }))); expect(getByTestId("custom-confirm-button")).toBeDefined(); }); it("calls onCancel when custom cancel button is pressed", () => { const CustomButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-cancel-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Cancel")); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { cancelButton: /*#__PURE__*/_react.default.createElement(CustomButton, null) }))); const customCancelButton = getByTestId("custom-cancel-button"); _reactNative2.fireEvent.press(customCancelButton); expect(mockOnCancel).toHaveBeenCalled(); }); it("calls onConfirm when custom confirm button is pressed", () => { const CustomButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-confirm-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Confirm")); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { confirmButton: /*#__PURE__*/_react.default.createElement(CustomButton, null) }))); const customConfirmButton = getByTestId("custom-confirm-button"); _reactNative2.fireEvent.press(customConfirmButton); expect(mockOnConfirm).toHaveBeenCalled(); }); it("renders both custom cancel and confirm buttons when provided", () => { const CustomCancelButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-cancel-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Cancel")); const CustomConfirmButton = ({ onPress }) => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { onPress: onPress, testID: "custom-confirm-button" }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, "Custom Confirm")); const { getByTestId } = (0, _reactNative2.render)(/*#__PURE__*/_react.default.createElement(_TimerPickerModal.default, _extends({}, defaultProps, { cancelButton: /*#__PURE__*/_react.default.createElement(CustomCancelButton, null), confirmButton: /*#__PURE__*/_react.default.createElement(CustomConfirmButton, null) }))); expect(getByTestId("custom-cancel-button")).toBeDefined(); expect(getByTestId("custom-confirm-button")).toBeDefined(); }); }); //# sourceMappingURL=TimerPickerModal.test.js.map