pooyash1998_chartspark/tests/scanner/dataAggregator.test.ts
2026-04-26 08:43:06 +02:00

51 lines
2 KiB
TypeScript

import { DataAggregator } from '../../src/scanner/dataAggregator';
import { ScanMatch } from '../../src/scanner/vaultScanner';
import { ParsedData } from '../../src/types';
function makeMatch(parsed: ParsedData): ScanMatch {
return { file: {} as never, parsed, section: '' };
}
describe('DataAggregator', () => {
const agg = new DataAggregator();
it('returns empty result for no matches', () => {
const result = agg.aggregate([]);
expect(result.labels).toEqual([]);
expect(result.values).toEqual([]);
});
it('aggregates checkbox matches by summing completed/remaining', () => {
const matches = [
makeMatch({ type: 'checkbox', labels: ['Completed', 'Remaining'], values: [3, 2], metadata: { totalItems: 5 } }),
makeMatch({ type: 'checkbox', labels: ['Completed', 'Remaining'], values: [1, 4], metadata: { totalItems: 5 } }),
];
const result = agg.aggregate(matches);
expect(result.values[0]).toBe(4); // 3+1 completed
expect(result.values[1]).toBe(6); // 2+4 remaining
});
it('aggregates numeric matches by label', () => {
const matches = [
makeMatch({ type: 'keyvalue', labels: ['A', 'B'], values: [10, 20], metadata: { totalItems: 2 } }),
makeMatch({ type: 'keyvalue', labels: ['A', 'C'], values: [5, 15], metadata: { totalItems: 2 } }),
];
const result = agg.aggregate(matches);
const aIdx = result.labels.indexOf('A');
const bIdx = result.labels.indexOf('B');
const cIdx = result.labels.indexOf('C');
expect(result.values[aIdx]).toBe(15); // 10+5
expect(result.values[bIdx]).toBe(20);
expect(result.values[cIdx]).toBe(15);
});
it('filters by targetType', () => {
const matches = [
makeMatch({ type: 'checkbox', labels: ['Completed', 'Remaining'], values: [2, 1], metadata: { totalItems: 3 } }),
makeMatch({ type: 'keyvalue', labels: ['X'], values: [99], metadata: { totalItems: 1 } }),
];
const result = agg.aggregate(matches, 'checkbox');
expect(result.type).toBe('checkbox');
expect(result.values[0]).toBe(2);
});
});