66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
import { act } from 'react-dom/test-utils';
|
|
import { createAgo, now } from './use-yesterday';
|
|
import { renderHook } from '@testing-library/react';
|
|
|
|
describe('now', () => {
|
|
beforeAll(() => {
|
|
jest.useFakeTimers().setSystemTime(new Date('1970-01-05T14:36:20.100Z'));
|
|
});
|
|
afterAll(() => {
|
|
jest.useRealTimers();
|
|
});
|
|
it.each([
|
|
{ o: '1970-01-05T14:36:20.000Z', roundBy: 1 }, // by 1ms
|
|
{ o: '1970-01-05T14:36:00.000Z', roundBy: 60 * 1000 }, // by 1m
|
|
{ o: '1970-01-05T14:35:00.000Z', roundBy: 5 * 60 * 1000 }, // by 5m
|
|
{ o: '1970-01-05T14:30:00.000Z', roundBy: 10 * 60 * 1000 }, // by 10m
|
|
{ o: '1970-01-05T14:20:00.000Z', roundBy: 20 * 60 * 1000 }, // by 20m
|
|
{ o: '1970-01-05T14:00:00.000Z', roundBy: 60 * 60 * 1000 }, // by 1h
|
|
{ o: '1970-01-05T00:00:00.000Z', roundBy: 24 * 60 * 60 * 1000 }, // by 1d
|
|
])(
|
|
'returns the now timestamp rounded by given number (ms)',
|
|
({ roundBy, o }) => {
|
|
expect(now(roundBy)).toEqual(new Date(o).getTime());
|
|
}
|
|
);
|
|
});
|
|
|
|
describe('createAgo', () => {
|
|
beforeEach(() => {
|
|
jest.useFakeTimers().setSystemTime(new Date('1970-01-30T14:36:20.100Z'));
|
|
});
|
|
afterAll(() => {
|
|
jest.useRealTimers();
|
|
});
|
|
it.each([
|
|
['yesterday', 24 * 60 * 60 * 1000, '1970-01-29T14:35:00.000Z'],
|
|
['2 days ago', 2 * 24 * 60 * 60 * 1000, '1970-01-28T14:35:00.000Z'],
|
|
['5 days ago', 5 * 24 * 60 * 60 * 1000, '1970-01-25T14:35:00.000Z'],
|
|
['20 days ago', 20 * 24 * 60 * 60 * 1000, '1970-01-10T14:35:00.000Z'],
|
|
])('returns %s timestamp rounded by 5 minutes', (_, ago, expectedTime) => {
|
|
const { result, rerender } = renderHook(() =>
|
|
createAgo(ago)(5 * 60 * 1000)
|
|
);
|
|
expect(result.current).toEqual(new Date(expectedTime).getTime());
|
|
rerender();
|
|
rerender();
|
|
rerender();
|
|
expect(result.current).toEqual(new Date(expectedTime).getTime());
|
|
});
|
|
it.each([
|
|
['yesterday', 24 * 60 * 60 * 1000, '1970-01-29T14:40:00.000Z'],
|
|
['2 days ago', 2 * 24 * 60 * 60 * 1000, '1970-01-28T14:40:00.000Z'],
|
|
['5 days ago', 5 * 24 * 60 * 60 * 1000, '1970-01-25T14:40:00.000Z'],
|
|
['20 days ago', 20 * 24 * 60 * 60 * 1000, '1970-01-10T14:40:00.000Z'],
|
|
])('updates %s timestamp after 5 minutes', (_, ago, expectedTime) => {
|
|
const { result, rerender } = renderHook(() =>
|
|
createAgo(ago)(5 * 60 * 1000)
|
|
);
|
|
act(() => {
|
|
jest.advanceTimersByTime(5 * 60 * 1000);
|
|
rerender();
|
|
});
|
|
expect(result.current).toEqual(new Date(expectedTime).getTime());
|
|
});
|
|
});
|