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 🍏
119 lines (118 loc) • 4.61 kB
JavaScript
"use strict";
var _react = _interopRequireDefault(require("react"));
var _reactNative = require("@testing-library/react-native");
var _reactNative2 = require("react-native");
var _Modal = _interopRequireDefault(require("../components/Modal"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
describe("Modal", () => {
beforeEach(() => {
jest.useFakeTimers();
});
afterEach(() => {
jest.runOnlyPendingTimers();
jest.useRealTimers();
(0, _reactNative.cleanup)();
});
it("renders without crashing", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}));
const component = getByTestId("modal");
expect(component).toBeDefined();
});
it("renders children when visible", () => {
const {
getByText
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}, /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Modal Content")));
const content = getByText("Modal Content");
expect(content).toBeDefined();
});
it("calls onOverlayPress when overlay is pressed", () => {
const onOverlayPressMock = jest.fn();
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true,
onOverlayPress: onOverlayPressMock
}));
const overlay = getByTestId("modal-backdrop");
_reactNative.fireEvent.press(overlay);
expect(onOverlayPressMock).toHaveBeenCalled();
});
it("renders but is not visible when isVisible is false", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: false
}));
const modal = getByTestId("modal");
expect(modal).toBeDefined();
expect(modal.props.visible).toBe(false);
});
it("does not call onOverlayPress when onOverlayPress is not provided", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}));
const overlay = getByTestId("modal-backdrop");
expect(() => _reactNative.fireEvent.press(overlay)).not.toThrow();
});
it("renders multiple children", () => {
const {
getByText
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}, /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "First Child"), /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Second Child")));
const firstChild = getByText("First Child");
const secondChild = getByText("Second Child");
expect(firstChild).toBeDefined();
expect(secondChild).toBeDefined();
});
it("handles rapid visibility changes", () => {
const {
rerender,
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}));
expect(getByTestId("modal")).toBeDefined();
expect(getByTestId("modal").props.visible).toBe(true);
rerender(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: false
}));
expect(getByTestId("modal")).toBeDefined();
expect(getByTestId("modal").props.visible).toBe(false);
rerender(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}));
expect(getByTestId("modal")).toBeDefined();
expect(getByTestId("modal").props.visible).toBe(true);
});
it("calls onOverlayPress exactly once per press", () => {
const onOverlayPressMock = jest.fn();
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true,
onOverlayPress: onOverlayPressMock
}));
const overlay = getByTestId("modal-backdrop");
_reactNative.fireEvent.press(overlay);
expect(onOverlayPressMock).toHaveBeenCalledTimes(1);
});
it("renders children with complex structure", () => {
const {
getByText
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
isVisible: true
}, /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Parent"), /*#__PURE__*/_react.default.createElement(_reactNative2.Text, null, "Child")));
expect(getByText("Parent")).toBeDefined();
expect(getByText("Child")).toBeDefined();
});
});
//# sourceMappingURL=Modal.test.js.map