Table tests to ts

This commit is contained in:
Adria Navarro 2023-07-21 11:13:12 +02:00
parent d12d6f5bef
commit 46cb7c7117
2 changed files with 58 additions and 45 deletions

View File

@ -1,12 +1,13 @@
const { checkBuilderEndpoint } = require("./utilities/TestFunctions") import { checkBuilderEndpoint } from "./utilities/TestFunctions"
const setup = require("./utilities") import * as setup from "./utilities"
const { basicTable } = setup.structures const { basicTable } = setup.structures
const { events, context } = require("@budibase/backend-core") import { events, context } from "@budibase/backend-core"
import { FieldType, Table } from "@budibase/types"
describe("/tables", () => { describe("/tables", () => {
let request = setup.getRequest() let request = setup.getRequest()
let config = setup.getConfig() let config = setup.getConfig()
let appId let appId: string
afterAll(setup.afterAll) afterAll(setup.afterAll)
@ -16,12 +17,11 @@ describe("/tables", () => {
}) })
describe("create", () => { describe("create", () => {
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks() jest.clearAllMocks()
}) })
const createTable = (table) => { const createTable = (table?: Table) => {
if (!table) { if (!table) {
table = basicTable() table = basicTable()
} }
@ -29,15 +29,16 @@ describe("/tables", () => {
.post(`/api/tables`) .post(`/api/tables`)
.send(table) .send(table)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
} }
it("returns a success message when the table is successfully created", async () => { it("returns a success message when the table is successfully created", async () => {
const res = await createTable() const res = await createTable()
expect(res.res.statusMessage).toEqual("Table TestTable saved successfully.") expect((res as any).res.statusMessage).toEqual(
"Table TestTable saved successfully."
)
expect(res.body.name).toEqual("TestTable") expect(res.body.name).toEqual("TestTable")
expect(events.table.created).toBeCalledTimes(1) expect(events.table.created).toBeCalledTimes(1)
expect(events.table.created).toBeCalledWith(res.body) expect(events.table.created).toBeCalledWith(res.body)
@ -45,7 +46,7 @@ describe("/tables", () => {
it("creates a table via data import", async () => { it("creates a table via data import", async () => {
const table = basicTable() const table = basicTable()
table.rows = [{ name: 'test-name', description: 'test-desc' }] table.rows = [{ name: "test-name", description: "test-desc" }]
const res = await createTable(table) const res = await createTable(table)
@ -62,7 +63,7 @@ describe("/tables", () => {
config, config,
method: "POST", method: "POST",
url: `/api/tables`, url: `/api/tables`,
body: basicTable() body: basicTable(),
}) })
}) })
}) })
@ -75,7 +76,7 @@ describe("/tables", () => {
.post(`/api/tables`) .post(`/api/tables`)
.send(testTable) .send(testTable)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(events.table.updated).toBeCalledTimes(1) expect(events.table.updated).toBeCalledTimes(1)
@ -94,10 +95,10 @@ describe("/tables", () => {
const testRow = await request const testRow = await request
.post(`/api/${testTable._id}/rows`) .post(`/api/${testTable._id}/rows`)
.send({ .send({
name: "test" name: "test",
}) })
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
const updatedTable = await request const updatedTable = await request
@ -109,22 +110,24 @@ describe("/tables", () => {
key: "name", key: "name",
_rename: { _rename: {
old: "name", old: "name",
updated: "updatedName" updated: "updatedName",
}, },
schema: { schema: {
updatedName: { type: "string" } updatedName: { type: "string" },
} },
}) })
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(updatedTable.res.statusMessage).toEqual("Table TestTable saved successfully.") expect((updatedTable as any).res.statusMessage).toEqual(
"Table TestTable saved successfully."
)
expect(updatedTable.body.name).toEqual("TestTable") expect(updatedTable.body.name).toEqual("TestTable")
const res = await request const res = await request
.get(`/api/${testTable._id}/rows/${testRow.body._id}`) .get(`/api/${testTable._id}/rows/${testRow.body._id}`)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body.updatedName).toEqual("test") expect(res.body.updatedName).toEqual("test")
@ -140,7 +143,7 @@ describe("/tables", () => {
_id: "ta_users", _id: "ta_users",
}) })
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body.schema.email).toBeDefined() expect(res.body.schema.email).toBeDefined()
expect(res.body.schema.roleId).toBeDefined() expect(res.body.schema.roleId).toBeDefined()
@ -153,7 +156,7 @@ describe("/tables", () => {
const table = await config.createTable() const table = await config.createTable()
const importRequest = { const importRequest = {
schema: table.schema, schema: table.schema,
rows: [{ name: 'test-name', description: 'test-desc' }] rows: [{ name: "test-name", description: "test-desc" }],
} }
jest.clearAllMocks() jest.clearAllMocks()
@ -162,20 +165,23 @@ describe("/tables", () => {
.post(`/api/tables/${table._id}/import`) .post(`/api/tables/${table._id}/import`)
.send(importRequest) .send(importRequest)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(events.table.created).not.toHaveBeenCalled() expect(events.table.created).not.toHaveBeenCalled()
expect(events.rows.imported).toBeCalledTimes(1) expect(events.rows.imported).toBeCalledTimes(1)
expect(events.rows.imported).toBeCalledWith(expect.objectContaining({ expect(events.rows.imported).toBeCalledWith(
name: "TestTable", expect.objectContaining({
_id: table._id name: "TestTable",
}), 1) _id: table._id,
}),
1
)
}) })
}) })
describe("fetch", () => { describe("fetch", () => {
let testTable let testTable: Table
beforeEach(async () => { beforeEach(async () => {
testTable = await config.createTable(testTable) testTable = await config.createTable(testTable)
@ -189,7 +195,7 @@ describe("/tables", () => {
const res = await request const res = await request
.get(`/api/tables`) .get(`/api/tables`)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
const fetchedTable = res.body[0] const fetchedTable = res.body[0]
expect(fetchedTable.name).toEqual(testTable.name) expect(fetchedTable.name).toEqual(testTable.name)
@ -216,7 +222,7 @@ describe("/tables", () => {
.post(`/api/tables`) .post(`/api/tables`)
.send(table) .send(table)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body._id).toBeDefined() expect(res.body._id).toBeDefined()
expect(res.body._rev).toBeDefined() expect(res.body._rev).toBeDefined()
@ -231,7 +237,7 @@ describe("/tables", () => {
_rev: res.body._rev, _rev: res.body._rev,
}) })
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
// shouldn't have created a new index // shouldn't have created a new index
expect((await db.getIndexes()).total_rows).toEqual(indexCount + 1) expect((await db.getIndexes()).total_rows).toEqual(indexCount + 1)
@ -240,7 +246,7 @@ describe("/tables", () => {
}) })
describe("destroy", () => { describe("destroy", () => {
let testTable let testTable: Table
beforeEach(async () => { beforeEach(async () => {
testTable = await config.createTable(testTable) testTable = await config.createTable(testTable)
@ -254,40 +260,44 @@ describe("/tables", () => {
const res = await request const res = await request
.delete(`/api/tables/${testTable._id}/${testTable._rev}`) .delete(`/api/tables/${testTable._id}/${testTable._rev}`)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body.message).toEqual(`Table ${testTable._id} deleted.`) expect(res.body.message).toEqual(`Table ${testTable._id} deleted.`)
expect(events.table.deleted).toBeCalledTimes(1) expect(events.table.deleted).toBeCalledTimes(1)
expect(events.table.deleted).toBeCalledWith({ ...testTable, tableId: testTable._id }) expect(events.table.deleted).toBeCalledWith({
...testTable,
tableId: testTable._id,
})
}) })
it("deletes linked references to the table after deletion", async () => { it("deletes linked references to the table after deletion", async () => {
const linkedTable = await config.createTable({ const linkedTable = await config.createTable({
name: "LinkedTable", name: "LinkedTable",
type: "table", type: "table",
key: "name",
schema: { schema: {
name: { name: {
type: "string", type: FieldType.STRING,
name: "name",
constraints: { constraints: {
type: "string", type: "string",
}, },
}, },
TestTable: { TestTable: {
type: "link", type: FieldType.LINK,
name: "TestTable",
fieldName: "TestTable", fieldName: "TestTable",
tableId: testTable._id, tableId: testTable._id,
constraints: { constraints: {
type: "array" type: "array",
} },
} },
}, },
}) })
const res = await request const res = await request
.delete(`/api/tables/${testTable._id}/${testTable._rev}`) .delete(`/api/tables/${testTable._id}/${testTable._rev}`)
.set(config.defaultHeaders()) .set(config.defaultHeaders())
.expect('Content-Type', /json/) .expect("Content-Type", /json/)
.expect(200) .expect(200)
expect(res.body.message).toEqual(`Table ${testTable._id} deleted.`) expect(res.body.message).toEqual(`Table ${testTable._id} deleted.`)
const dependentTable = await config.getTable(linkedTable._id) const dependentTable = await config.getTable(linkedTable._id)

View File

@ -16,23 +16,26 @@ import {
AutomationTrigger, AutomationTrigger,
AutomationTriggerStepId, AutomationTriggerStepId,
Datasource, Datasource,
FieldType,
SourceName, SourceName,
Table,
} from "@budibase/types" } from "@budibase/types"
export function basicTable() { export function basicTable(): Table {
return { return {
name: "TestTable", name: "TestTable",
type: "table", type: "table",
key: "name",
schema: { schema: {
name: { name: {
type: "string", type: FieldType.STRING,
name: "name",
constraints: { constraints: {
type: "string", type: "string",
}, },
}, },
description: { description: {
type: "string", type: FieldType.STRING,
name: "description",
constraints: { constraints: {
type: "string", type: "string",
}, },