mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.4 KiB
95 lines
2.4 KiB
import {
|
|
getAvailableDateRanges,
|
|
getStoredDateRange,
|
|
saveStoredDateRange,
|
|
STORED_DATE_RANGE_KEY
|
|
} from './date-range.helper';
|
|
|
|
describe('getAvailableDateRanges', () => {
|
|
const referenceDate = new Date('2026-10-19T12:00:00.000Z');
|
|
|
|
it('returns the short ranges without any activity', () => {
|
|
expect(getAvailableDateRanges({ referenceDate })).toEqual([
|
|
'1d',
|
|
'wtd',
|
|
'mtd',
|
|
'ytd',
|
|
'max'
|
|
]);
|
|
});
|
|
|
|
it('returns the short ranges for less than one year of data', () => {
|
|
expect(
|
|
getAvailableDateRanges({
|
|
referenceDate,
|
|
dateOfFirstActivity: new Date('2026-01-05T00:00:00.000Z')
|
|
})
|
|
).toEqual(['1d', 'wtd', 'mtd', 'ytd', 'max']);
|
|
});
|
|
|
|
it('adds 1y after one year of data', () => {
|
|
expect(
|
|
getAvailableDateRanges({
|
|
referenceDate,
|
|
dateOfFirstActivity: new Date('2025-10-18T00:00:00.000Z')
|
|
})
|
|
).toEqual(['1d', 'wtd', 'mtd', 'ytd', '1y', 'max']);
|
|
});
|
|
|
|
it('adds 1y and 5y after five years of data', () => {
|
|
expect(
|
|
getAvailableDateRanges({
|
|
referenceDate,
|
|
dateOfFirstActivity: '2021-10-18T00:00:00.000Z'
|
|
})
|
|
).toEqual(['1d', 'wtd', 'mtd', 'ytd', '1y', '5y', 'max']);
|
|
});
|
|
});
|
|
|
|
describe('stored date range', () => {
|
|
const createStorage = (initial?: string) => {
|
|
const items = new Map<string, string>();
|
|
|
|
if (initial !== undefined) {
|
|
items.set(STORED_DATE_RANGE_KEY, initial);
|
|
}
|
|
|
|
return {
|
|
getItem: (key: string) => items.get(key) ?? null,
|
|
setItem: (key: string, value: string) => {
|
|
items.set(key, value);
|
|
}
|
|
};
|
|
};
|
|
|
|
it('returns undefined without a stored value', () => {
|
|
expect(getStoredDateRange(createStorage())).toBeUndefined();
|
|
});
|
|
|
|
it('returns a valid stored value', () => {
|
|
expect(getStoredDateRange(createStorage('ytd'))).toBe('ytd');
|
|
expect(getStoredDateRange(createStorage('2025'))).toBe('2025');
|
|
});
|
|
|
|
it('ignores an invalid stored value', () => {
|
|
expect(getStoredDateRange(createStorage('forever'))).toBeUndefined();
|
|
});
|
|
|
|
it('round-trips a saved value', () => {
|
|
const storage = createStorage();
|
|
|
|
saveStoredDateRange('mtd', storage);
|
|
|
|
expect(getStoredDateRange(storage)).toBe('mtd');
|
|
});
|
|
|
|
it('does not throw if the storage is not available', () => {
|
|
expect(
|
|
getStoredDateRange({
|
|
getItem: () => {
|
|
throw new Error('denied');
|
|
}
|
|
})
|
|
).toBeUndefined();
|
|
});
|
|
});
|
|
|