From c58b145afd9be0f5236fe7ac56b92cc8cc6e24fc Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 24 Jul 2023 16:12:42 +0200 Subject: [PATCH] Test sdks --- packages/server/src/sdk/app/tables/index.ts | 46 +-- .../src/sdk/app/tables/tests/tables.spec.ts | 274 +++--------------- .../src/sdk/app/views/tests/views.spec.ts | 12 +- 3 files changed, 45 insertions(+), 287 deletions(-) diff --git a/packages/server/src/sdk/app/tables/index.ts b/packages/server/src/sdk/app/tables/index.ts index 6ede4c48dc..7f88c35010 100644 --- a/packages/server/src/sdk/app/tables/index.ts +++ b/packages/server/src/sdk/app/tables/index.ts @@ -10,8 +10,6 @@ import { Database, TableResponse, TableViewsResponse, - TableSchema, - UIFieldMetadata, } from "@budibase/types" import datasources from "../datasources" import { populateExternalTableSchemas, isEditableColumn } from "./validation" @@ -64,49 +62,15 @@ async function getTable(tableId: any): Promise { } } -function enrichSchema( - tableSchema: TableSchema, - viewOverrides: Record -) { - const result: TableSchema = {} - const viewOverridesEntries = Object.entries(viewOverrides) - const viewSetsOrder = viewOverridesEntries.some(([_, v]) => v.order) - for (const [columnName, columnUIMetadata] of viewOverridesEntries) { - if (!columnUIMetadata.visible) { - continue - } - - if (!tableSchema[columnName]) { - continue - } - - const tableFieldSchema = tableSchema[columnName] - if (viewSetsOrder) { - delete tableFieldSchema.order - } - - result[columnName] = _.merge(tableFieldSchema, columnUIMetadata) - } - return result -} - function enrichViewSchemas(table: Table): TableResponse { const result: TableResponse = { ...table, - views: Object.values(table.views ?? []).reduce((p, v) => { - if (!sdk.views.isV2(v)) { + views: Object.values(table.views ?? []) + .map(v => sdk.views.enrichSchema(v, table.schema)) + .reduce((p, v) => { p[v.name] = v - } else { - p[v.name] = { - ...v, - schema: - !v?.columns || !Object.entries(v?.columns).length - ? table.schema - : enrichSchema(table.schema, v.columns), - } - } - return p - }, {} as TableViewsResponse), + return p + }, {} as TableViewsResponse), } return result diff --git a/packages/server/src/sdk/app/tables/tests/tables.spec.ts b/packages/server/src/sdk/app/tables/tests/tables.spec.ts index 72b078c2b8..78ebe59f01 100644 --- a/packages/server/src/sdk/app/tables/tests/tables.spec.ts +++ b/packages/server/src/sdk/app/tables/tests/tables.spec.ts @@ -2,6 +2,11 @@ import { FieldType, Table, ViewV2 } from "@budibase/types" import { generator } from "@budibase/backend-core/tests" import sdk from "../../.." +jest.mock("../../views", () => ({ + ...jest.requireActual("../../views"), + enrichSchema: jest.fn().mockImplementation(v => ({ ...v, mocked: true })), +})) + describe("table sdk", () => { describe("enrichViewSchemas", () => { const basicTable: Table = { @@ -50,257 +55,46 @@ describe("table sdk", () => { it("should fetch the default schema if not overriden", async () => { const tableId = basicTable._id! - const view: ViewV2 = { - version: 2, - id: generator.guid(), - name: generator.guid(), - tableId, + function getTable() { + const view: ViewV2 = { + version: 2, + id: generator.guid(), + name: generator.guid(), + tableId, + } + return view } + const view1 = getTable() + const view2 = getTable() + const view3 = getTable() const res = sdk.tables.enrichViewSchemas({ ...basicTable, - views: { [view.name]: view }, + views: { + [view1.name]: view1, + [view2.name]: view2, + [view3.name]: view3, + }, }) + expect(sdk.views.enrichSchema).toBeCalledTimes(3) + expect(res).toEqual({ ...basicTable, views: { - [view.name]: { - ...view, - schema: { - name: { - type: "string", - name: "name", - visible: true, - order: 2, - width: 80, - constraints: { - type: "string", - }, - }, - description: { - type: "string", - name: "description", - visible: true, - width: 200, - constraints: { - type: "string", - }, - }, - id: { - type: "number", - name: "id", - visible: true, - order: 1, - constraints: { - type: "number", - }, - }, - hiddenField: { - type: "string", - name: "hiddenField", - visible: false, - constraints: { - type: "string", - }, - }, - }, + [view1.name]: { + ...view1, + mocked: true, + }, + [view2.name]: { + ...view2, + mocked: true, + }, + [view3.name]: { + ...view3, + mocked: true, }, }, }) }) - - it("if view schema only defines visiblility, should only fetch the selected fields", async () => { - const tableId = basicTable._id! - const view: ViewV2 = { - version: 2, - id: generator.guid(), - name: generator.guid(), - tableId, - columns: { - name: { visible: true }, - id: { visible: true }, - description: { visible: false }, - }, - } - - const res = sdk.tables.enrichViewSchemas({ - ...basicTable, - views: { [view.name]: view }, - }) - - expect(res).toEqual( - expect.objectContaining({ - ...basicTable, - views: { - [view.name]: { - ...view, - schema: { - name: { - type: "string", - name: "name", - visible: true, - order: 2, - width: 80, - constraints: { - type: "string", - }, - }, - id: { - type: "number", - name: "id", - visible: true, - order: 1, - constraints: { - type: "number", - }, - }, - }, - }, - }, - }) - ) - }) - - it("schema does not break if the view has corrupted columns", async () => { - const tableId = basicTable._id! - const view: ViewV2 = { - version: 2, - id: generator.guid(), - name: generator.guid(), - tableId, - columns: { unnexisting: { visible: true }, name: { visible: true } }, - } - - const res = sdk.tables.enrichViewSchemas({ - ...basicTable, - views: { [view.name]: view }, - }) - - expect(res).toEqual( - expect.objectContaining({ - ...basicTable, - views: { - [view.name]: { - ...view, - schema: { - name: { - type: "string", - name: "name", - order: 2, - visible: true, - width: 80, - constraints: { - type: "string", - }, - }, - }, - }, - }, - }) - ) - }) - - it("if view schema only defines visiblility, should only fetch the selected fields", async () => { - const tableId = basicTable._id! - const view: ViewV2 = { - version: 2, - id: generator.guid(), - name: generator.guid(), - tableId, - columns: { - name: { visible: true }, - id: { visible: true }, - description: { visible: false }, - }, - } - - const res = sdk.tables.enrichViewSchemas({ - ...basicTable, - views: { [view.name]: view }, - }) - - expect(res).toEqual( - expect.objectContaining({ - ...basicTable, - views: { - [view.name]: { - ...view, - schema: { - name: { - type: "string", - name: "name", - order: 2, - visible: true, - width: 80, - constraints: { - type: "string", - }, - }, - id: { - type: "number", - name: "id", - order: 1, - visible: true, - constraints: { - type: "number", - }, - }, - }, - }, - }, - }) - ) - }) - - it("if view defines order, the table schema order should be ignored", async () => { - const tableId = basicTable._id! - const view: ViewV2 = { - version: 2, - id: generator.guid(), - name: generator.guid(), - tableId, - columns: { - name: { visible: true, order: 1 }, - id: { visible: true }, - description: { visible: false, order: 2 }, - }, - } - - const res = sdk.tables.enrichViewSchemas({ - ...basicTable, - views: { [view.name]: view }, - }) - - expect(res).toEqual( - expect.objectContaining({ - ...basicTable, - views: { - [view.name]: { - ...view, - schema: { - name: { - type: "string", - name: "name", - order: 1, - visible: true, - width: 80, - constraints: { - type: "string", - }, - }, - id: { - type: "number", - name: "id", - visible: true, - constraints: { - type: "number", - }, - }, - }, - }, - }, - }) - ) - }) }) }) diff --git a/packages/server/src/sdk/app/views/tests/views.spec.ts b/packages/server/src/sdk/app/views/tests/views.spec.ts index a40a91943d..cbcd98eb91 100644 --- a/packages/server/src/sdk/app/views/tests/views.spec.ts +++ b/packages/server/src/sdk/app/views/tests/views.spec.ts @@ -1,6 +1,6 @@ import { FieldType, Table, ViewV2 } from "@budibase/types" import { generator } from "@budibase/backend-core/tests" -import views from ".." +import { enrichSchema } from ".." describe("table sdk", () => { describe("enrichViewSchemas", () => { @@ -57,7 +57,7 @@ describe("table sdk", () => { tableId, } - const res = views.enrichSchema(view, basicTable.schema) + const res = enrichSchema(view, basicTable.schema) expect(res).toEqual({ ...view, @@ -116,7 +116,7 @@ describe("table sdk", () => { }, } - const res = views.enrichSchema(view, basicTable.schema) + const res = enrichSchema(view, basicTable.schema) expect(res).toEqual({ ...view, @@ -154,7 +154,7 @@ describe("table sdk", () => { columns: { unnexisting: { visible: true }, name: { visible: true } }, } - const res = views.enrichSchema(view, basicTable.schema) + const res = enrichSchema(view, basicTable.schema) expect(res).toEqual( expect.objectContaining({ @@ -189,7 +189,7 @@ describe("table sdk", () => { }, } - const res = views.enrichSchema(view, basicTable.schema) + const res = enrichSchema(view, basicTable.schema) expect(res).toEqual( expect.objectContaining({ @@ -233,7 +233,7 @@ describe("table sdk", () => { }, } - const res = views.enrichSchema(view, basicTable.schema) + const res = enrichSchema(view, basicTable.schema) expect(res).toEqual( expect.objectContaining({