diff --git a/packages/import-handler/src/csv.ts b/packages/import-handler/src/csv.ts index c73c0dd59..140cf00f0 100644 --- a/packages/import-handler/src/csv.ts +++ b/packages/import-handler/src/csv.ts @@ -13,7 +13,7 @@ export const importCsv = async (ctx: ImportContext, stream: Stream) => { for await (const row of parser) { try { const url = new URL(row[0]) - const state = row.length > 1 ? row[1] : undefined + const state = row.length > 1 && row[1] ? row[1] : undefined // labels follows format: "[label1,label2]" const labels = row.length > 2 diff --git a/packages/import-handler/test/csv/csv.test.ts b/packages/import-handler/test/csv/csv.test.ts index 0a8ea2e25..f045a0c96 100644 --- a/packages/import-handler/test/csv/csv.test.ts +++ b/packages/import-handler/test/csv/csv.test.ts @@ -88,3 +88,50 @@ describe('Load a complex CSV file', () => { ]) }) }) + +describe('A file with no status set', () => { + it('should not try to set status', async () => { + const states: (ArticleSavingRequestStatus | undefined)[] = [] + const stream = fs.createReadStream('./test/csv/data/unset-status.csv') + const stub = stubImportCtx() + stub.urlHandler = ( + ctx: ImportContext, + url, + state?: ArticleSavingRequestStatus + ): Promise => { + states.push(state) + return Promise.resolve() + } + + await importCsv(stub, stream) + expect(stub.countFailed).to.equal(0) + expect(stub.countImported).to.equal(2) + expect(states).to.eql([undefined, ArticleSavingRequestStatus.Archived]) + }) +}) + +describe('A file with some labels', () => { + it('gets the labels, handles empty, and trims extra whitespace', async () => { + const importedLabels: (string[] | undefined)[] = [] + const stream = fs.createReadStream('./test/csv/data/labels.csv') + const stub = stubImportCtx() + stub.urlHandler = ( + ctx: ImportContext, + url, + state?: ArticleSavingRequestStatus, + labels?: string[] + ): Promise => { + importedLabels.push(labels) + return Promise.resolve() + } + + await importCsv(stub, stream) + expect(stub.countFailed).to.equal(0) + expect(stub.countImported).to.equal(3) + expect(importedLabels).to.eql([ + ['Label1', 'Label2', 'Label 3', 'Label 4'], + [], + [], + ]) + }) +}) diff --git a/packages/import-handler/test/csv/data/labels.csv b/packages/import-handler/test/csv/data/labels.csv new file mode 100644 index 000000000..5c093b369 --- /dev/null +++ b/packages/import-handler/test/csv/data/labels.csv @@ -0,0 +1,3 @@ +"https://test.url/path01",,"[Label1,Label2, Label 3, Label 4 ]" +"https://test.url/path02",,"[]" +"https://test.url/path03",, \ No newline at end of file diff --git a/packages/import-handler/test/csv/data/unset-status.csv b/packages/import-handler/test/csv/data/unset-status.csv new file mode 100644 index 000000000..ecc325416 --- /dev/null +++ b/packages/import-handler/test/csv/data/unset-status.csv @@ -0,0 +1,2 @@ +"https://test.url/path01",,"[Random]" +"https://test.url/path02",ARCHIVED,"[Random]" \ No newline at end of file