mirror of
https://github.com/pooyash1998/chartspark.git
synced 2026-07-22 06:53:29 +00:00
51 lines
2 KiB
TypeScript
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);
|
|
});
|
|
});
|