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 🍏

324 lines (323 loc) 8.48 kB
"use strict"; var _getAdjustedLimit = require("../utils/getAdjustedLimit"); describe("getAdjustedLimit", () => { describe("undefined or empty limits", () => { it("returns default limits when limit is undefined", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 60, 1); expect(result).toEqual({ max: 59, min: 0 }); }); it("returns default limits when limit has no max or min", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({}, 60, 1); expect(result).toEqual({ max: 59, min: 0 }); }); it("calculates max value correctly with interval", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 30, 2); expect(result).toEqual({ max: 58, min: 0 }); }); }); describe("valid limits within bounds", () => { it("accepts valid min and max within bounds", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 5, max: 15 }, 20, 1); expect(result).toEqual({ max: 15, min: 5 }); }); it("accepts limits at exact boundaries", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0, max: 59 }, 60, 1); expect(result).toEqual({ max: 59, min: 0 }); }); it("handles min of 0", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0, max: 10 }, 20, 1); expect(result).toEqual({ max: 10, min: 0 }); }); it("handles max at maximum value", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 10, max: 19 }, 20, 1); expect(result).toEqual({ max: 19, min: 10 }); }); }); describe("partial limits", () => { it("uses default max when only min is provided", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 10 }, 60, 1); expect(result).toEqual({ max: 59, min: 10 }); }); it("uses default min when only max is provided", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ max: 30 }, 60, 1); expect(result).toEqual({ max: 30, min: 0 }); }); it("handles only min provided at boundary", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0 }, 24, 1); expect(result).toEqual({ max: 23, min: 0 }); }); it("handles only max provided at boundary", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ max: 23 }, 24, 1); expect(result).toEqual({ max: 23, min: 0 }); }); }); describe("out-of-bounds limits", () => { it("adjusts max when it exceeds maximum value", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 5, max: 100 }, 20, 1); expect(result).toEqual({ max: 19, min: 5 }); }); it("adjusts min when it is negative", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: -5, max: 15 }, 20, 1); expect(result).toEqual({ max: 15, min: 0 }); }); it("adjusts both limits when out of bounds", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: -10, max: 100 }, 20, 1); expect(result).toEqual({ max: 19, min: 0 }); }); it("adjusts max when only max is out of bounds", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ max: 100 }, 20, 1); expect(result).toEqual({ max: 19, min: 0 }); }); it("adjusts min when only min is out of bounds", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: -10 }, 20, 1); expect(result).toEqual({ max: 19, min: 0 }); }); }); describe("invalid limits (max < min)", () => { it("returns default limits when adjusted max < adjusted min", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 15, max: 5 }, 20, 1); expect(result).toEqual({ max: 19, min: 0 }); }); it("handles edge case where both are equal after adjustment", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 10, max: 10 }, 20, 1); expect(result).toEqual({ max: 10, min: 10 }); }); it("returns default when min is too high and max is too low", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 50, max: 5 }, 20, 1); expect(result).toEqual({ max: 19, min: 0 }); }); }); describe("different intervals", () => { it("handles interval of 5", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 10, max: 30 }, 10, 5); expect(result).toEqual({ max: 30, min: 10 }); }); it("calculates max with interval of 5", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 10, 5); expect(result).toEqual({ max: 45, min: 0 }); }); it("handles interval of 15 for minutes", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 15, max: 45 }, 4, 15); expect(result).toEqual({ max: 45, min: 15 }); }); it("calculates max with interval of 15", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 4, 15); expect(result).toEqual({ max: 45, min: 0 }); }); it("handles large interval", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 3, 30); expect(result).toEqual({ max: 60, min: 0 }); }); }); describe("edge cases", () => { it("handles numberOfItems of 1", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)(undefined, 1, 1); expect(result).toEqual({ max: 0, min: 0 }); }); it("handles large numberOfItems", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 50, max: 150 }, 200, 1); expect(result).toEqual({ max: 150, min: 50 }); }); it("handles zero min limit", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0, max: 0 }, 60, 1); expect(result).toEqual({ max: 0, min: 0 }); }); it("handles limits with decimal-like values (should work with integers)", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 5, max: 15 }, 20, 1); expect(result).toEqual({ max: 15, min: 5 }); }); }); describe("real-world scenarios", () => { it("handles typical hours picker (0-23)", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 9, max: 17 }, 24, 1); expect(result).toEqual({ max: 17, min: 9 }); // 9 AM to 5 PM }); it("handles typical minutes picker (0-59)", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0, max: 45 }, 60, 1); expect(result).toEqual({ max: 45, min: 0 }); }); it("handles minutes with 15-minute interval", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 15, max: 45 }, 4, 15); expect(result).toEqual({ max: 45, min: 15 }); }); it("handles seconds picker (0-59)", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 0, max: 30 }, 60, 1); expect(result).toEqual({ max: 30, min: 0 }); }); it("handles days with no upper limit", () => { const result = (0, _getAdjustedLimit.getAdjustedLimit)({ min: 1 }, 100, 1); expect(result).toEqual({ max: 99, min: 1 }); }); }); }); //# sourceMappingURL=getAdjustedLimit.test.js.map