fix: test

This commit is contained in:
aaaaaajie 2025-03-19 02:28:22 +08:00
parent 3502e10227
commit 5e7f28aa68

View File

@ -288,9 +288,8 @@ export class XlsxImporter extends EventEmitter {
return columns.map((col) => col.title || col.defaultTitle);
}
private alignWithHeaders(expectedHeaders: string[], data: string[][]): string[][] {
const headers = this.options.explain ? data[1] : data[0];
private alignWithHeaders(params: { headers: string[]; expectedHeaders: string[]; data: string[][] }): string[][] {
const { expectedHeaders, headers, data } = params;
const keepCols = headers.map((x, i) => (expectedHeaders.includes(x) ? i : -1)).filter((i) => i > -1);
return data.map((row) => keepCols.map((i) => row[i]));
@ -304,13 +303,13 @@ export class XlsxImporter extends EventEmitter {
// Find and validate header row
const expectedHeaders = this.getExpectedHeaders(ctx);
data = this.alignWithHeaders(expectedHeaders, data);
const { headerRowIndex, headers } = this.findAndValidateHeaders({ data, expectedHeaders });
if (headerRowIndex === -1) {
throw new ImportValidationError('Headers not found. Expected headers: {{headers}}', {
headers: expectedHeaders.join(', '),
});
}
data = this.alignWithHeaders({ data, expectedHeaders, headers });
// Extract data rows
const rows = data.slice(headerRowIndex + 1);
@ -334,25 +333,10 @@ export class XlsxImporter extends EventEmitter {
const actualHeaders = row.filter((cell) => cell !== null && cell !== '');
const allHeadersFound = expectedHeaders.every((header) => actualHeaders.includes(header));
const noExtraHeaders = actualHeaders.length === expectedHeaders.length;
if (allHeadersFound && noExtraHeaders) {
const mismatchIndex = expectedHeaders.findIndex((title, index) => actualHeaders[index] !== title);
if (mismatchIndex === -1) {
// All headers match
return { headerRowIndex: rowIndex, headers: actualHeaders };
} else {
// Found potential header row but with mismatch
throw new ImportValidationError(
'Header mismatch at column {{column}}: expected "{{expected}}", but got "{{actual}}"',
{
column: mismatchIndex + 1,
expected: expectedHeaders[mismatchIndex],
actual: actualHeaders[mismatchIndex] || 'empty',
},
);
}
if (allHeadersFound) {
const orderedHeaders = expectedHeaders.filter((h) => actualHeaders.includes(h));
return { headerRowIndex: rowIndex, headers: orderedHeaders };
}
}