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 🍏
169 lines (168 loc) • 6.53 kB
JavaScript
"use strict";
var _react = _interopRequireDefault(require("react"));
var _reactNative = require("@testing-library/react-native");
var _reactNative2 = require("react-native");
var _TimerPicker = _interopRequireDefault(require("../components/TimerPicker"));
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("TimerPicker", () => {
it("renders without crashing", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, null));
const component = getByTestId("timer-picker");
expect(component).toBeDefined();
});
it("renders without crashing with negative padWithNItems", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
padWithNItems: -1
}));
const component = getByTestId("timer-picker");
expect(component).toBeDefined();
});
it("hides days, minutes and seconds when respective hide props are provided", () => {
const {
queryByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hideDays: true,
hideMinutes: true,
hideSeconds: true
}));
const dayPicker = queryByTestId("duration-scroll-day");
const minutePicker = queryByTestId("duration-scroll-minute");
const secondPicker = queryByTestId("duration-scroll-second");
expect(dayPicker).toBeNull();
expect(minutePicker).toBeNull();
expect(secondPicker).toBeNull();
});
it("uses the custom FlatList component when provided", () => {
const CustomFlatList = props => /*#__PURE__*/_react.default.createElement(_reactNative2.FlatList, _extends({}, props, {
testID: "custom-flat-list"
}));
const {
queryAllByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
FlatList: CustomFlatList
}));
const customFlatList = queryAllByTestId("custom-flat-list");
expect(customFlatList).toHaveLength(3);
});
it("renders all pickers by default (hours, minutes, seconds)", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, null));
expect(getByTestId("duration-scroll-hour")).toBeDefined();
expect(getByTestId("duration-scroll-minute")).toBeDefined();
expect(getByTestId("duration-scroll-second")).toBeDefined();
});
it("hides hours when hideHours is true", () => {
const {
queryByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hideHours: true
}));
expect(queryByTestId("duration-scroll-hour")).toBeNull();
});
it("renders with custom initial value", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
initialValue: {
hours: 2,
minutes: 30,
seconds: 45
}
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders with hourInterval", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hourInterval: 2
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders with minuteInterval", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
minuteInterval: 15
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders with secondInterval", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
secondInterval: 5
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders with custom labels", () => {
const {
getByText
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hourLabel: "hrs",
minuteLabel: "mins",
secondLabel: "secs"
}));
expect(getByText("hrs")).toBeDefined();
expect(getByText("mins")).toBeDefined();
expect(getByText("secs")).toBeDefined();
});
it("renders with disabled state", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
disabled: true
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders LinearGradient when specified", () => {
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
use12HourPicker: false
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("handles combination of hide props", () => {
const {
queryByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hideHours: true,
hideSeconds: true
}));
expect(queryByTestId("duration-scroll-hour")).toBeNull();
expect(queryByTestId("duration-scroll-minute")).toBeDefined();
expect(queryByTestId("duration-scroll-second")).toBeNull();
});
it("handles onDurationChange callback", () => {
const onDurationChangeMock = jest.fn();
const {
getByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
onDurationChange: onDurationChangeMock
}));
expect(getByTestId("timer-picker")).toBeDefined();
});
it("renders with all hide props and days enabled", () => {
const {
getByTestId,
queryByTestId
} = (0, _reactNative.render)(/*#__PURE__*/_react.default.createElement(_TimerPicker.default, {
hideDays: false,
hideHours: true,
hideMinutes: true,
hideSeconds: true
}));
expect(getByTestId("duration-scroll-day")).toBeDefined();
expect(queryByTestId("duration-scroll-hour")).toBeNull();
expect(queryByTestId("duration-scroll-minute")).toBeNull();
expect(queryByTestId("duration-scroll-second")).toBeNull();
});
});
//# sourceMappingURL=TimerPicker.test.js.map