budibase/packages/server/src/integration-test/row.spec.ts

136 lines
3.4 KiB
TypeScript
Raw Normal View History

2023-01-17 18:22:31 +01:00
import { faker } from "@faker-js/faker"
import {
generateMakeRequest,
MakeRequestResponse,
} from "../api/routes/public/tests/utils"
import * as setup from "../api/routes/tests/utilities"
2023-01-18 13:19:40 +01:00
import { Datasource, FieldType, SourceName } from "@budibase/types"
2023-01-17 18:22:31 +01:00
const config = setup.getConfig()
2023-01-18 14:55:24 +01:00
let apiKey, makeRequest: MakeRequestResponse, postgresDatasource: Datasource
2023-01-17 18:22:31 +01:00
2023-01-18 17:06:45 +01:00
beforeEach(async () => {
2023-01-18 14:55:24 +01:00
await config.init()
2023-01-17 18:22:31 +01:00
apiKey = await config.generateApiKey()
2023-01-18 13:19:40 +01:00
postgresDatasource = await config.createDatasource({
type: "datasource",
source: SourceName.POSTGRES,
plus: true,
config: {
host: "192.168.1.98",
port: 54321,
database: "postgres",
user: "root",
password: "root",
schema: "public",
ssl: false,
rejectUnauthorized: false,
ca: false,
},
})
2023-01-18 14:55:24 +01:00
2023-01-17 18:22:31 +01:00
makeRequest = generateMakeRequest(apiKey)
})
afterAll(async () => {
await config.end()
})
describe("row api", () => {
describe("create a row", () => {
test("Given than no row exists, adding a new rows persists it", async () => {
const tableName = faker.lorem.word()
2023-01-18 13:19:40 +01:00
2023-01-17 18:39:59 +01:00
const table = await config.createTable({
2023-01-17 18:22:31 +01:00
name: tableName,
schema: {
name: {
name: "name",
type: FieldType.STRING,
2023-01-18 17:06:45 +01:00
constraints: {
presence: true,
},
2023-01-17 18:22:31 +01:00
},
description: {
name: "description",
type: FieldType.STRING,
},
value: {
name: "value",
type: FieldType.NUMBER,
},
},
2023-01-18 13:19:40 +01:00
sourceId: postgresDatasource._id,
2023-01-17 18:22:31 +01:00
})
const newRow = {
name: faker.name.fullName(),
description: faker.lorem.paragraphs(),
2023-01-17 18:39:59 +01:00
value: +faker.random.numeric(),
2023-01-17 18:22:31 +01:00
}
const res = await makeRequest("post", `/tables/${table._id}/rows`, newRow)
expect(res.status).toBe(200)
2023-01-17 18:39:59 +01:00
const persistedRows = await config.getRows(table._id!)
expect(persistedRows).toHaveLength(1)
expect(persistedRows).toEqual([
expect.objectContaining({
...res.body.data,
...newRow,
}),
])
2023-01-17 18:22:31 +01:00
})
2023-01-18 13:26:26 +01:00
test("Given than no row exists, multiple rows can be persisted", async () => {
const tableName = faker.lorem.word()
const table = await config.createTable({
name: tableName,
schema: {
name: {
name: "name",
type: FieldType.STRING,
2023-01-18 17:06:45 +01:00
constraints: {
presence: true,
},
2023-01-18 13:26:26 +01:00
},
description: {
name: "description",
type: FieldType.STRING,
},
value: {
name: "value",
type: FieldType.NUMBER,
},
},
sourceId: postgresDatasource._id,
})
const numberOfRows = 10
2023-01-18 17:06:45 +01:00
const newRows = Array(numberOfRows).fill({
2023-01-18 13:26:26 +01:00
name: faker.name.fullName(),
description: faker.lorem.paragraphs(),
value: +faker.random.numeric(),
2023-01-18 17:06:45 +01:00
})
2023-01-18 13:26:26 +01:00
for (const newRow of newRows) {
const res = await makeRequest(
"post",
`/tables/${table._id}/rows`,
newRow
)
expect(res.status).toBe(200)
}
const persistedRows = await config.getRows(table._id!)
expect(persistedRows).toHaveLength(numberOfRows)
2023-01-18 17:06:45 +01:00
expect(persistedRows).toEqual(
expect.arrayContaining(newRows.map(expect.objectContaining))
)
2023-01-18 13:26:26 +01:00
})
2023-01-17 18:22:31 +01:00
})
})