Files
calendar/packages/lib/convertToNewDurationType.test.ts
T

86 lines
3.3 KiB
TypeScript

import { describe, it, expect } from "vitest";
import convertToNewDurationType, { MINUTES_IN_HOUR, MINUTES_IN_DAY, HOURS_IN_DAY } from "./convertToNewDurationType";
describe("convertToNewDurationType", () => {
describe("identity conversions", () => {
it("should return the same value when converting minutes to minutes", () => {
expect(convertToNewDurationType("minutes", "minutes", 120)).toBe(120);
});
it("should return the same value when converting hours to hours", () => {
expect(convertToNewDurationType("hours", "hours", 5)).toBe(5);
});
it("should return the same value when converting days to days", () => {
expect(convertToNewDurationType("days", "days", 3)).toBe(3);
});
});
describe("minutes to other types", () => {
it("should convert minutes to hours", () => {
expect(convertToNewDurationType("minutes", "hours", 120)).toBe(2);
expect(convertToNewDurationType("minutes", "hours", 60)).toBe(1);
});
it("should convert minutes to days", () => {
expect(convertToNewDurationType("minutes", "days", 2880)).toBe(2);
expect(convertToNewDurationType("minutes", "days", 1440)).toBe(1);
});
});
describe("hours to other types", () => {
it("should convert hours to minutes", () => {
expect(convertToNewDurationType("hours", "minutes", 2)).toBe(120);
expect(convertToNewDurationType("hours", "minutes", 1)).toBe(60);
});
it("should convert hours to days", () => {
expect(convertToNewDurationType("hours", "days", 24)).toBe(1);
expect(convertToNewDurationType("hours", "days", 48)).toBe(2);
});
});
describe("days to other types", () => {
it("should convert days to minutes", () => {
expect(convertToNewDurationType("days", "minutes", 1)).toBe(1440);
expect(convertToNewDurationType("days", "minutes", 2)).toBe(2880);
});
it("should convert days to hours", () => {
expect(convertToNewDurationType("days", "hours", 1)).toBe(24);
expect(convertToNewDurationType("days", "hours", 2)).toBe(48);
});
});
describe("rounding", () => {
it("should round up fractional results with Math.ceil", () => {
// 90 minutes = 1.5 hours, should ceil to 2
expect(convertToNewDurationType("minutes", "hours", 90)).toBe(2);
// 100 minutes = 0.069 days, should ceil to 1
expect(convertToNewDurationType("minutes", "days", 100)).toBe(1);
// 5 hours = 0.208 days, should ceil to 1
expect(convertToNewDurationType("hours", "days", 5)).toBe(1);
});
});
describe("zero values", () => {
it("should handle zero correctly for all conversions", () => {
expect(convertToNewDurationType("minutes", "hours", 0)).toBe(0);
expect(convertToNewDurationType("minutes", "days", 0)).toBe(0);
expect(convertToNewDurationType("hours", "minutes", 0)).toBe(0);
expect(convertToNewDurationType("hours", "days", 0)).toBe(0);
expect(convertToNewDurationType("days", "minutes", 0)).toBe(0);
expect(convertToNewDurationType("days", "hours", 0)).toBe(0);
});
});
describe("exported constants", () => {
it("should export correct constant values", () => {
expect(MINUTES_IN_HOUR).toBe(60);
expect(MINUTES_IN_DAY).toBe(1440);
expect(HOURS_IN_DAY).toBe(24);
});
});
});