Files
2024-02-15 17:01:50 +00:00

119 lines
4.0 KiB
TypeScript

import moment from 'moment';
import {
getDateFromMoment,
getXAxisDates,
} from 'sentry/views/organizationStats/usageChart/utils';
const TS_START = 1531094400000; // 2018 July 9, 12am UTC
const TS_END = 1531180800000; // 2018 July 10, 12am UTC
describe('getDateFromMoment', () => {
const start = moment.unix(TS_START / 1000);
// Ensure date remains in UTC
it('shows the date if interval is >= 24h', () => {
expect(getDateFromMoment(start)).toBe('Jul 9');
expect(getDateFromMoment(start, '2d')).toBe('Jul 9');
expect(getDateFromMoment(moment('2021-10-31'))).toBe('Oct 31');
});
// Ensure datetime is shifted to localtime
it('shows the date and time if interval is <24h', () => {
expect(getDateFromMoment(start, '6h')).toBe('Jul 8 8:00 PM - 2:00 AM (-04:00)');
expect(getDateFromMoment(start, '1h')).toBe('Jul 8 8:00 PM - 9:00 PM (-04:00)');
expect(getDateFromMoment(start, '5m')).toBe('Jul 8 8:00 PM - 8:05 PM (-04:00)');
});
// Ensure datetime is shifted to localtime
it('coerces date and time into UTC', () => {
expect(getDateFromMoment(start, '6h', true)).toBe(
'Jul 9 12:00 AM - 6:00 AM (+00:00)'
);
expect(getDateFromMoment(start, '1h', true)).toBe(
'Jul 9 12:00 AM - 1:00 AM (+00:00)'
);
expect(getDateFromMoment(start, '5m', true)).toBe(
'Jul 9 12:00 AM - 12:05 AM (+00:00)'
);
});
});
describe('getXAxisDates', () => {
// Ensure date remains in UTC
it('calculates 1d intervals', () => {
let dates = getXAxisDates(TS_START, TS_END);
expect(dates).toEqual(['Jul 9', 'Jul 10']);
dates = getXAxisDates('2021-10-29', '2021-10-31');
expect(dates).toEqual(['Oct 29', 'Oct 30', 'Oct 31']);
});
// Datetime remains in UTC
it('calculates 4h intervals in UTC', () => {
const dates = getXAxisDates(TS_START, TS_END, true, '4h');
expect(dates).toEqual([
'Jul 9 12:00 AM - 4:00 AM (+00:00)',
'Jul 9 4:00 AM - 8:00 AM (+00:00)',
'Jul 9 8:00 AM - 12:00 PM (+00:00)',
'Jul 9 12:00 PM - 4:00 PM (+00:00)',
'Jul 9 4:00 PM - 8:00 PM (+00:00)',
'Jul 9 8:00 PM - 12:00 AM (+00:00)',
'Jul 10 12:00 AM - 4:00 AM (+00:00)',
]);
});
// Datetime is shifted to localtime
it('calculates 4h intervals', () => {
const dates = getXAxisDates(TS_START, TS_END, false, '4h');
expect(dates).toEqual([
'Jul 8 8:00 PM - 12:00 AM (-04:00)',
'Jul 9 12:00 AM - 4:00 AM (-04:00)',
'Jul 9 4:00 AM - 8:00 AM (-04:00)',
'Jul 9 8:00 AM - 12:00 PM (-04:00)',
'Jul 9 12:00 PM - 4:00 PM (-04:00)',
'Jul 9 4:00 PM - 8:00 PM (-04:00)',
'Jul 9 8:00 PM - 12:00 AM (-04:00)',
]);
});
// Datetime is shifted to localtime
it('calculates 1h intervals', () => {
const dates = getXAxisDates(TS_START, TS_END, false, '1h');
expect(dates).toEqual([
'Jul 8 8:00 PM - 9:00 PM (-04:00)',
'Jul 8 9:00 PM - 10:00 PM (-04:00)',
'Jul 8 10:00 PM - 11:00 PM (-04:00)',
'Jul 8 11:00 PM - 12:00 AM (-04:00)',
'Jul 9 12:00 AM - 1:00 AM (-04:00)',
'Jul 9 1:00 AM - 2:00 AM (-04:00)',
'Jul 9 2:00 AM - 3:00 AM (-04:00)',
'Jul 9 3:00 AM - 4:00 AM (-04:00)',
'Jul 9 4:00 AM - 5:00 AM (-04:00)',
'Jul 9 5:00 AM - 6:00 AM (-04:00)',
'Jul 9 6:00 AM - 7:00 AM (-04:00)',
'Jul 9 7:00 AM - 8:00 AM (-04:00)',
'Jul 9 8:00 AM - 9:00 AM (-04:00)',
'Jul 9 9:00 AM - 10:00 AM (-04:00)',
'Jul 9 10:00 AM - 11:00 AM (-04:00)',
'Jul 9 11:00 AM - 12:00 PM (-04:00)',
'Jul 9 12:00 PM - 1:00 PM (-04:00)',
'Jul 9 1:00 PM - 2:00 PM (-04:00)',
'Jul 9 2:00 PM - 3:00 PM (-04:00)',
'Jul 9 3:00 PM - 4:00 PM (-04:00)',
'Jul 9 4:00 PM - 5:00 PM (-04:00)',
'Jul 9 5:00 PM - 6:00 PM (-04:00)',
'Jul 9 6:00 PM - 7:00 PM (-04:00)',
'Jul 9 7:00 PM - 8:00 PM (-04:00)',
'Jul 9 8:00 PM - 9:00 PM (-04:00)',
]);
});
it('handles invalid date strings', () => {
const dates1 = getXAxisDates('', '');
expect(dates1).toEqual([]);
const dates2 = getXAxisDates('sentry', '2021-01-01');
expect(dates2).toEqual([]);
});
});