diff --git a/packages/server/src/automations/steps/createRow.ts b/packages/server/src/automations/steps/createRow.ts index e71b1e4556..cd16be2cf3 100644 --- a/packages/server/src/automations/steps/createRow.ts +++ b/packages/server/src/automations/steps/createRow.ts @@ -97,7 +97,7 @@ export async function run({ const ctx: any = buildCtx(appId, emitter, { body: inputs.row, params: { - tableId: inputs.row.tableId, + tableId: decodeURIComponent(inputs.row.tableId), }, }) try { diff --git a/packages/server/src/automations/steps/deleteRow.ts b/packages/server/src/automations/steps/deleteRow.ts index 8c61d256d1..6b8a68eeb8 100644 --- a/packages/server/src/automations/steps/deleteRow.ts +++ b/packages/server/src/automations/steps/deleteRow.ts @@ -85,7 +85,7 @@ export async function run({ _rev: inputs.revision, }, params: { - tableId: inputs.tableId, + tableId: decodeURIComponent(inputs.tableId), }, }) diff --git a/packages/server/src/automations/steps/queryRows.ts b/packages/server/src/automations/steps/queryRows.ts index 93ca8a3f33..4a02e80686 100644 --- a/packages/server/src/automations/steps/queryRows.ts +++ b/packages/server/src/automations/steps/queryRows.ts @@ -122,9 +122,10 @@ export async function run({ sortType = fieldType === FieldType.NUMBER ? FieldType.NUMBER : FieldType.STRING } + // when passing the tableId in the Ctx it needs to be decoded const ctx = buildCtx(appId, null, { params: { - tableId, + tableId: decodeURIComponent(tableId), }, body: { sortType, diff --git a/packages/server/src/automations/steps/updateRow.ts b/packages/server/src/automations/steps/updateRow.ts index ecdbdc68c8..552d846f18 100644 --- a/packages/server/src/automations/steps/updateRow.ts +++ b/packages/server/src/automations/steps/updateRow.ts @@ -90,6 +90,8 @@ export async function run({ } } const tableId = inputs.row.tableId + ? decodeURIComponent(inputs.row.tableId) + : inputs.row.tableId // Base update let rowUpdate: Record @@ -157,7 +159,7 @@ export async function run({ }, params: { rowId: inputs.rowId, - tableId, + tableId: tableId, }, }) await rowController.patch(ctx) diff --git a/packages/server/src/automations/tests/queryRows.spec.ts b/packages/server/src/automations/tests/queryRows.spec.ts index 21e28673f3..6ec7b7abfb 100644 --- a/packages/server/src/automations/tests/queryRows.spec.ts +++ b/packages/server/src/automations/tests/queryRows.spec.ts @@ -2,6 +2,7 @@ import { EmptyFilterOption, SortOrder, Table } from "@budibase/types" import * as setup from "./utilities" import { createAutomationBuilder } from "./utilities/AutomationTestBuilder" import * as automation from "../index" +import { basicTable } from "../../tests/utilities/structures" const NAME = "Test" @@ -13,6 +14,7 @@ describe("Test a query step automation", () => { await automation.init() await config.init() table = await config.createTable() + const row = { name: NAME, description: "original description", @@ -153,4 +155,32 @@ describe("Test a query step automation", () => { expect(result.steps[0].outputs.rows).toBeDefined() expect(result.steps[0].outputs.rows.length).toBe(2) }) + + it("return rows when querying a table with a space in the name", async () => { + const tableWithSpaces = await config.createTable({ + ...basicTable(), + name: "table with spaces", + }) + await config.createRow({ + name: NAME, + tableId: tableWithSpaces._id, + }) + const result = await createAutomationBuilder({ + name: "Return All Test", + config, + }) + .appAction({ fields: {} }) + .queryRows( + { + tableId: tableWithSpaces._id!, + onEmptyFilter: EmptyFilterOption.RETURN_ALL, + filters: {}, + }, + { stepName: "Query table with spaces" } + ) + .run() + expect(result.steps[0].outputs.success).toBe(true) + expect(result.steps[0].outputs.rows).toBeDefined() + expect(result.steps[0].outputs.rows.length).toBe(1) + }) })