215 lines
6.5 KiB
JavaScript
215 lines
6.5 KiB
JavaScript
import '~/lib/utils/pretty_time';
|
|
|
|
(() => {
|
|
const prettyTime = gl.utils.prettyTime;
|
|
|
|
describe('prettyTime methods', function () {
|
|
describe('parseSeconds', function () {
|
|
it('should correctly parse a negative value', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
|
|
const zeroSeconds = parser(-1000);
|
|
|
|
expect(zeroSeconds.minutes).toBe(16);
|
|
expect(zeroSeconds.hours).toBe(0);
|
|
expect(zeroSeconds.days).toBe(0);
|
|
expect(zeroSeconds.weeks).toBe(0);
|
|
});
|
|
|
|
it('should correctly parse a zero value', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
|
|
const zeroSeconds = parser(0);
|
|
|
|
expect(zeroSeconds.minutes).toBe(0);
|
|
expect(zeroSeconds.hours).toBe(0);
|
|
expect(zeroSeconds.days).toBe(0);
|
|
expect(zeroSeconds.weeks).toBe(0);
|
|
});
|
|
|
|
it('should correctly parse a small non-zero second values', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
|
|
const subOneMinute = parser(10);
|
|
|
|
expect(subOneMinute.minutes).toBe(0);
|
|
expect(subOneMinute.hours).toBe(0);
|
|
expect(subOneMinute.days).toBe(0);
|
|
expect(subOneMinute.weeks).toBe(0);
|
|
|
|
const aboveOneMinute = parser(100);
|
|
|
|
expect(aboveOneMinute.minutes).toBe(1);
|
|
expect(aboveOneMinute.hours).toBe(0);
|
|
expect(aboveOneMinute.days).toBe(0);
|
|
expect(aboveOneMinute.weeks).toBe(0);
|
|
|
|
const manyMinutes = parser(1000);
|
|
|
|
expect(manyMinutes.minutes).toBe(16);
|
|
expect(manyMinutes.hours).toBe(0);
|
|
expect(manyMinutes.days).toBe(0);
|
|
expect(manyMinutes.weeks).toBe(0);
|
|
});
|
|
|
|
it('should correctly parse large second values', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
|
|
const aboveOneHour = parser(4800);
|
|
|
|
expect(aboveOneHour.minutes).toBe(20);
|
|
expect(aboveOneHour.hours).toBe(1);
|
|
expect(aboveOneHour.days).toBe(0);
|
|
expect(aboveOneHour.weeks).toBe(0);
|
|
|
|
const aboveOneDay = parser(110000);
|
|
|
|
expect(aboveOneDay.minutes).toBe(33);
|
|
expect(aboveOneDay.hours).toBe(6);
|
|
expect(aboveOneDay.days).toBe(3);
|
|
expect(aboveOneDay.weeks).toBe(0);
|
|
|
|
const aboveOneWeek = parser(25000000);
|
|
|
|
expect(aboveOneWeek.minutes).toBe(26);
|
|
expect(aboveOneWeek.hours).toBe(0);
|
|
expect(aboveOneWeek.days).toBe(3);
|
|
expect(aboveOneWeek.weeks).toBe(173);
|
|
});
|
|
|
|
it('should correctly accept a custom param for hoursPerDay', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
const config = { hoursPerDay: 24 };
|
|
|
|
const aboveOneHour = parser(4800, config);
|
|
|
|
expect(aboveOneHour.minutes).toBe(20);
|
|
expect(aboveOneHour.hours).toBe(1);
|
|
expect(aboveOneHour.days).toBe(0);
|
|
expect(aboveOneHour.weeks).toBe(0);
|
|
|
|
const aboveOneDay = parser(110000, config);
|
|
|
|
expect(aboveOneDay.minutes).toBe(33);
|
|
expect(aboveOneDay.hours).toBe(6);
|
|
expect(aboveOneDay.days).toBe(1);
|
|
expect(aboveOneDay.weeks).toBe(0);
|
|
|
|
const aboveOneWeek = parser(25000000, config);
|
|
|
|
expect(aboveOneWeek.minutes).toBe(26);
|
|
expect(aboveOneWeek.hours).toBe(8);
|
|
expect(aboveOneWeek.days).toBe(4);
|
|
|
|
expect(aboveOneWeek.weeks).toBe(57);
|
|
});
|
|
|
|
it('should correctly accept a custom param for daysPerWeek', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
const config = { daysPerWeek: 7 };
|
|
|
|
const aboveOneHour = parser(4800, config);
|
|
|
|
expect(aboveOneHour.minutes).toBe(20);
|
|
expect(aboveOneHour.hours).toBe(1);
|
|
expect(aboveOneHour.days).toBe(0);
|
|
expect(aboveOneHour.weeks).toBe(0);
|
|
|
|
const aboveOneDay = parser(110000, config);
|
|
|
|
expect(aboveOneDay.minutes).toBe(33);
|
|
expect(aboveOneDay.hours).toBe(6);
|
|
expect(aboveOneDay.days).toBe(3);
|
|
expect(aboveOneDay.weeks).toBe(0);
|
|
|
|
const aboveOneWeek = parser(25000000, config);
|
|
|
|
expect(aboveOneWeek.minutes).toBe(26);
|
|
expect(aboveOneWeek.hours).toBe(0);
|
|
expect(aboveOneWeek.days).toBe(0);
|
|
|
|
expect(aboveOneWeek.weeks).toBe(124);
|
|
});
|
|
|
|
it('should correctly accept custom params for daysPerWeek and hoursPerDay', function () {
|
|
const parser = prettyTime.parseSeconds;
|
|
const config = { daysPerWeek: 55, hoursPerDay: 14 };
|
|
|
|
const aboveOneHour = parser(4800, config);
|
|
|
|
expect(aboveOneHour.minutes).toBe(20);
|
|
expect(aboveOneHour.hours).toBe(1);
|
|
expect(aboveOneHour.days).toBe(0);
|
|
expect(aboveOneHour.weeks).toBe(0);
|
|
|
|
const aboveOneDay = parser(110000, config);
|
|
|
|
expect(aboveOneDay.minutes).toBe(33);
|
|
expect(aboveOneDay.hours).toBe(2);
|
|
expect(aboveOneDay.days).toBe(2);
|
|
expect(aboveOneDay.weeks).toBe(0);
|
|
|
|
const aboveOneWeek = parser(25000000, config);
|
|
|
|
expect(aboveOneWeek.minutes).toBe(26);
|
|
expect(aboveOneWeek.hours).toBe(0);
|
|
expect(aboveOneWeek.days).toBe(1);
|
|
|
|
expect(aboveOneWeek.weeks).toBe(9);
|
|
});
|
|
});
|
|
|
|
describe('stringifyTime', function () {
|
|
it('should stringify values with all non-zero units', function () {
|
|
const timeObject = {
|
|
weeks: 1,
|
|
days: 4,
|
|
hours: 7,
|
|
minutes: 20,
|
|
};
|
|
|
|
const timeString = prettyTime.stringifyTime(timeObject);
|
|
|
|
expect(timeString).toBe('1w 4d 7h 20m');
|
|
});
|
|
|
|
it('should stringify values with some non-zero units', function () {
|
|
const timeObject = {
|
|
weeks: 0,
|
|
days: 4,
|
|
hours: 0,
|
|
minutes: 20,
|
|
};
|
|
|
|
const timeString = prettyTime.stringifyTime(timeObject);
|
|
|
|
expect(timeString).toBe('4d 20m');
|
|
});
|
|
|
|
it('should stringify values with no non-zero units', function () {
|
|
const timeObject = {
|
|
weeks: 0,
|
|
days: 0,
|
|
hours: 0,
|
|
minutes: 0,
|
|
};
|
|
|
|
const timeString = prettyTime.stringifyTime(timeObject);
|
|
|
|
expect(timeString).toBe('0m');
|
|
});
|
|
});
|
|
|
|
describe('abbreviateTime', function () {
|
|
it('should abbreviate stringified times for weeks', function () {
|
|
const fullTimeString = '1w 3d 4h 5m';
|
|
expect(prettyTime.abbreviateTime(fullTimeString)).toBe('1w');
|
|
});
|
|
|
|
it('should abbreviate stringified times for non-weeks', function () {
|
|
const fullTimeString = '0w 3d 4h 5m';
|
|
expect(prettyTime.abbreviateTime(fullTimeString)).toBe('3d');
|
|
});
|
|
});
|
|
});
|
|
})(window.gl || (window.gl = {}));
|