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
JavaScript
"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