mirror of
https://github.com/garrytan/gbrain.git
synced 2026-08-14 00:48:18 +00:00
Wave-assembled from PR #3841 by @bo-developing. Co-Authored-By: Bo <bo.developing@gmail.com>
68 lines
2.6 KiB
TypeScript
68 lines
2.6 KiB
TypeScript
import { describe, test, expect } from 'bun:test';
|
|
import { recordImportFailure } from '../src/commands/import.ts';
|
|
|
|
describe('recordImportFailure', () => {
|
|
test('groups errors that differ only in a quoted per-file value', () => {
|
|
const errorCounts: Record<string, number> = {};
|
|
const errorSamples: Record<string, string> = {};
|
|
|
|
const a = recordImportFailure(
|
|
errorCounts, errorSamples,
|
|
'insert or update on table "pages" violates foreign key constraint "pages_source_id_fkey"',
|
|
);
|
|
const b = recordImportFailure(
|
|
errorCounts, errorSamples,
|
|
'insert or update on table "pages" violates foreign key constraint "pages_source_id_fkey"',
|
|
);
|
|
|
|
expect(a.key).toBe(b.key);
|
|
expect(a.count).toBe(1);
|
|
expect(b.count).toBe(2);
|
|
});
|
|
|
|
test('the printed sample preserves table/constraint names — the #3837 regression', () => {
|
|
const errorCounts: Record<string, number> = {};
|
|
const errorSamples: Record<string, string> = {};
|
|
|
|
let last;
|
|
for (let i = 0; i < 7; i++) {
|
|
last = recordImportFailure(
|
|
errorCounts, errorSamples,
|
|
'insert or update on table "pages" violates foreign key constraint "pages_source_id_fkey"',
|
|
);
|
|
}
|
|
|
|
// Pre-fix, the grouping key itself was printed and had blanked every
|
|
// quoted substring: `table "" violates foreign key constraint ""`.
|
|
expect(last!.sample).toContain('table "pages"');
|
|
expect(last!.sample).toContain('constraint "pages_source_id_fkey"');
|
|
expect(last!.count).toBe(7);
|
|
});
|
|
|
|
test('the grouping key still blanks quoted content (unchanged dedup behavior)', () => {
|
|
const errorCounts: Record<string, number> = {};
|
|
const errorSamples: Record<string, string> = {};
|
|
|
|
const a = recordImportFailure(errorCounts, errorSamples, 'Source "foo.md" not found');
|
|
const b = recordImportFailure(errorCounts, errorSamples, 'Source "bar.md" not found');
|
|
|
|
// Different per-file filenames still collapse into one group...
|
|
expect(a.key).toBe(b.key);
|
|
expect(b.count).toBe(2);
|
|
// ...but the retained sample is a real, complete message (the first one seen).
|
|
expect(errorSamples[a.key]).toBe('Source "foo.md" not found');
|
|
});
|
|
|
|
test('distinct error shapes get distinct groups', () => {
|
|
const errorCounts: Record<string, number> = {};
|
|
const errorSamples: Record<string, string> = {};
|
|
|
|
const a = recordImportFailure(errorCounts, errorSamples, 'ENOENT: no such file or directory');
|
|
const b = recordImportFailure(errorCounts, errorSamples, 'YAML parse error: bad indentation');
|
|
|
|
expect(a.key).not.toBe(b.key);
|
|
expect(errorCounts[a.key]).toBe(1);
|
|
expect(errorCounts[b.key]).toBe(1);
|
|
});
|
|
});
|