From f1f83a689145fcf1c2b234d8a3194cd9573baf1d Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 24 May 2023 18:09:42 +0800 Subject: [PATCH 1/3] Handle empty state columns in the import CSV files --- packages/import-handler/src/csv.ts | 2 +- packages/import-handler/test/csv/csv.test.ts | 21 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) 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..4d8e454c1 100644 --- a/packages/import-handler/test/csv/csv.test.ts +++ b/packages/import-handler/test/csv/csv.test.ts @@ -88,3 +88,24 @@ 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]) + }) +}) From 9218e164158bb59b6e3529b3174361badf19a912 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 24 May 2023 18:10:30 +0800 Subject: [PATCH 2/3] Add test file --- packages/import-handler/test/csv/data/unset-status.csv | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 packages/import-handler/test/csv/data/unset-status.csv 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 From c64476b44a10267c74aa3d6f6f4582c388805618 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 24 May 2023 18:17:29 +0800 Subject: [PATCH 3/3] Add test for label parsing --- packages/import-handler/test/csv/csv.test.ts | 26 +++++++++++++++++++ .../import-handler/test/csv/data/labels.csv | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 packages/import-handler/test/csv/data/labels.csv diff --git a/packages/import-handler/test/csv/csv.test.ts b/packages/import-handler/test/csv/csv.test.ts index 4d8e454c1..f045a0c96 100644 --- a/packages/import-handler/test/csv/csv.test.ts +++ b/packages/import-handler/test/csv/csv.test.ts @@ -109,3 +109,29 @@ describe('A file with no status set', () => { 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