65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { filterChunksByWorkIntervals } from '@renderer/components/team/members/MemberLogsTab';
|
|
|
|
function makeChunk(id: string, start: string, end: string) {
|
|
return {
|
|
id,
|
|
startTime: new Date(start),
|
|
endTime: new Date(end),
|
|
} as never;
|
|
}
|
|
|
|
describe('MemberLogsTab work interval filtering', () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
it('does not treat malformed empty completedAt as an open interval', () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date('2026-05-08T11:00:00.000Z'));
|
|
const chunks = [
|
|
makeChunk('near-start', '2026-05-08T09:59:50.000Z', '2026-05-08T10:00:05.000Z'),
|
|
makeChunk('late', '2026-05-08T10:30:00.000Z', '2026-05-08T10:30:05.000Z'),
|
|
];
|
|
|
|
const filtered = filterChunksByWorkIntervals(chunks, [
|
|
{ startedAt: '2026-05-08T10:00:00.000Z', completedAt: '' },
|
|
]);
|
|
|
|
expect(filtered?.map((chunk) => chunk.id)).toEqual(['near-start']);
|
|
});
|
|
|
|
it('clamps completedAt before startedAt to a closed start window', () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date('2026-05-08T11:00:00.000Z'));
|
|
const chunks = [
|
|
makeChunk('near-start', '2026-05-08T09:59:50.000Z', '2026-05-08T10:00:05.000Z'),
|
|
makeChunk('late', '2026-05-08T10:30:00.000Z', '2026-05-08T10:30:05.000Z'),
|
|
];
|
|
|
|
const filtered = filterChunksByWorkIntervals(chunks, [
|
|
{
|
|
startedAt: '2026-05-08T10:00:00.000Z',
|
|
completedAt: '2026-05-08T09:59:00.000Z',
|
|
},
|
|
]);
|
|
|
|
expect(filtered?.map((chunk) => chunk.id)).toEqual(['near-start']);
|
|
});
|
|
|
|
it('keeps undefined completedAt as the only open interval shape', () => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date('2026-05-08T11:00:00.000Z'));
|
|
const chunks = [
|
|
makeChunk('near-start', '2026-05-08T09:59:50.000Z', '2026-05-08T10:00:05.000Z'),
|
|
makeChunk('late', '2026-05-08T10:30:00.000Z', '2026-05-08T10:30:05.000Z'),
|
|
];
|
|
|
|
const filtered = filterChunksByWorkIntervals(chunks, [
|
|
{ startedAt: '2026-05-08T10:00:00.000Z' },
|
|
]);
|
|
|
|
expect(filtered?.map((chunk) => chunk.id)).toEqual(['near-start', 'late']);
|
|
});
|
|
});
|