86 lines
3.3 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|