From de0b16397150fc37145f9dd43261a52f3832bea2 Mon Sep 17 00:00:00 2001 From: Michael Drury Date: Tue, 29 Nov 2022 16:03:22 +0000 Subject: [PATCH] Adding test case for char encoding and being explicit about utf8 export. --- packages/server/src/api/routes/tests/view.spec.js | 6 +++--- packages/server/src/utilities/fileSystem/index.ts | 12 +++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/server/src/api/routes/tests/view.spec.js b/packages/server/src/api/routes/tests/view.spec.js index 2ea90ce32d..bd5177b905 100644 --- a/packages/server/src/api/routes/tests/view.spec.js +++ b/packages/server/src/api/routes/tests/view.spec.js @@ -347,7 +347,7 @@ describe("/views", () => { const setupExport = async () => { const table = await config.createTable() - await config.createRow({ name: "test-name", description: "test-desc" }) + await config.createRow({ name: "test-name", description: "ùúûü" }) return table } @@ -362,11 +362,11 @@ describe("/views", () => { const rows = JSON.parse(res.text) expect(rows.length).toBe(1) expect(rows[0].name).toBe("test-name") - expect(rows[0].description).toBe("test-desc") + expect(rows[0].description).toBe("ùúûü") } const assertCSVExport = (res) => { - expect(res.text).toBe("\"name\",\"description\"\n\"test-name\",\"test-desc\"") + expect(res.text).toBe(`"name","description"\n"test-name","ùúûü"`) } it("should be able to export a table as JSON", async () => { diff --git a/packages/server/src/utilities/fileSystem/index.ts b/packages/server/src/utilities/fileSystem/index.ts index a888c72b57..58a687c31b 100644 --- a/packages/server/src/utilities/fileSystem/index.ts +++ b/packages/server/src/utilities/fileSystem/index.ts @@ -80,14 +80,16 @@ export function loadHandlebarsFile(path: string) { * When return a file from the API need to write the file to the system temporarily so we * can create a read stream to send. * @param {string} contents the contents of the file which is to be returned from the API. + * @param {string} encoding the encoding of the file to return (utf8 default) * @return {Object} the read stream which can be put into the koa context body. */ -export function apiFileReturn(contents: string) { +export function apiFileReturn( + contents: string, + encoding: BufferEncoding = "utf8" +) { const path = join(budibaseTempDir(), uuid()) - fs.writeFileSync(path, "\ufeff" + contents) - const readerStream = fs.createReadStream(path) - readerStream.setEncoding("binary") - return readerStream + fs.writeFileSync(path, contents, { encoding }) + return fs.createReadStream(path, { encoding }) } export function streamFile(path: string) {