Skip to main content
Glama
timeUtils.test.ts3.42 kB
/** * Unit tests for timeUtils */ import { describe, it, expect } from '@jest/globals'; import { formatHoursToHHMM, sumHours, hoursToDays, daysToHours, roundHours, createTimeFormat } from '../../../src/utils/timeUtils'; describe('timeUtils', () => { describe('formatHoursToHHMM', () => { it('should format decimal hours to HH:MM', () => { expect(formatHoursToHHMM(0)).toBe('0:00'); expect(formatHoursToHHMM(1)).toBe('1:00'); expect(formatHoursToHHMM(1.5)).toBe('1:30'); expect(formatHoursToHHMM(2.25)).toBe('2:15'); expect(formatHoursToHHMM(8.75)).toBe('8:45'); expect(formatHoursToHHMM(10.1)).toBe('10:06'); }); it('should handle edge cases', () => { expect(formatHoursToHHMM(0.9833333333333333)).toBe('0:59'); // 59 minutes expect(formatHoursToHHMM(0.9999999)).toBe('1:00'); // Rounds to 1 hour expect(formatHoursToHHMM(23.5)).toBe('23:30'); }); it('should handle rounding edge case where minutes = 60', () => { // This tests the edge case where rounding results in 60 minutes expect(formatHoursToHHMM(1.9999)).toBe('2:00'); }); it('should throw error for negative hours', () => { expect(() => formatHoursToHHMM(-1)).toThrow('Hours cannot be negative'); }); }); describe('sumHours', () => { it('should sum array of hours', () => { expect(sumHours([])).toBe(0); expect(sumHours([1])).toBe(1); expect(sumHours([1, 2, 3])).toBe(6); expect(sumHours([1.5, 2.25, 0.75])).toBe(4.5); }); it('should handle decimal precision', () => { expect(sumHours([0.1, 0.2])).toBeCloseTo(0.3); expect(sumHours([1.1, 2.2, 3.3])).toBeCloseTo(6.6); }); }); describe('hoursToDays', () => { it('should convert hours to days (8h = 1 day)', () => { expect(hoursToDays(0)).toBe(0); expect(hoursToDays(8)).toBe(1); expect(hoursToDays(4)).toBe(0.5); expect(hoursToDays(16)).toBe(2); expect(hoursToDays(6)).toBe(0.75); }); }); describe('daysToHours', () => { it('should convert days to hours (1 day = 8h)', () => { expect(daysToHours(0)).toBe(0); expect(daysToHours(1)).toBe(8); expect(daysToHours(0.5)).toBe(4); expect(daysToHours(2)).toBe(16); expect(daysToHours(0.25)).toBe(2); }); }); describe('roundHours', () => { it('should round hours to 2 decimal places', () => { expect(roundHours(1.234567)).toBe(1.23); expect(roundHours(1.235)).toBe(1.24); // Rounds up expect(roundHours(1.999)).toBe(2); expect(roundHours(1)).toBe(1); expect(roundHours(1.1)).toBe(1.1); }); }); describe('createTimeFormat', () => { it('should create time format object with hours and formatted string', () => { const result1 = createTimeFormat(2.5); expect(result1.hours).toBe(2.5); expect(result1.hoursFormatted).toBe('2:30'); const result2 = createTimeFormat(8.75); expect(result2.hours).toBe(8.75); expect(result2.hoursFormatted).toBe('8:45'); const result3 = createTimeFormat(1.234567); expect(result3.hours).toBe(1.23); // Rounded expect(result3.hoursFormatted).toBe('1:14'); // Formatted }); it('should handle edge cases', () => { const result = createTimeFormat(0); expect(result.hours).toBe(0); expect(result.hoursFormatted).toBe('0:00'); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/niondigital/moco-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server