budibase/packages/server/src/api/routes/tests/datasource.spec.js

131 lines
3.4 KiB
JavaScript
Raw Normal View History

let setup = require("./utilities")
let { basicDatasource } = setup.structures
let { checkBuilderEndpoint } = require("./utilities/TestFunctions")
2021-01-14 21:51:03 +01:00
jest.mock("pg")
const pg = require("pg")
2021-01-14 21:51:03 +01:00
describe("/datasources", () => {
let request = setup.getRequest()
let config = setup.getConfig()
let datasource
2021-01-14 21:51:03 +01:00
afterAll(setup.afterAll)
2021-01-14 21:51:03 +01:00
beforeEach(async () => {
await config.init()
datasource = await config.createDatasource()
})
2021-01-14 21:51:03 +01:00
describe("create", () => {
it("should create a new datasource", async () => {
const res = await request
.post(`/api/datasources`)
2021-03-04 11:05:50 +01:00
.send(basicDatasource())
.set(config.defaultHeaders())
2021-01-14 21:51:03 +01:00
.expect('Content-Type', /json/)
.expect(200)
expect(res.res.statusMessage).toEqual("Datasource saved successfully.")
expect(res.body.name).toEqual("Test")
})
})
2021-01-14 21:51:03 +01:00
describe("fetch", () => {
it("returns all the datasources from the server", async () => {
const res = await request
.get(`/api/datasources`)
.set(config.defaultHeaders())
2021-01-14 21:51:03 +01:00
.expect('Content-Type', /json/)
.expect(200)
const datasources = res.body
expect(datasources).toEqual([
{
"_id": datasources[0]._id,
"_rev": datasources[0]._rev,
...basicDatasource()
}
])
2021-01-14 21:51:03 +01:00
})
it("should apply authorization to endpoint", async () => {
await checkBuilderEndpoint({
config,
method: "GET",
url: `/api/datasources`,
2021-01-14 21:51:03 +01:00
})
})
})
2021-01-14 21:51:03 +01:00
describe("find", () => {
it("should be able to find a datasource", async () => {
const res = await request
.get(`/api/datasources/${datasource._id}`)
.set(config.defaultHeaders())
.expect(200)
expect(res.body._rev).toBeDefined()
expect(res.body._id).toEqual(datasource._id)
})
})
2021-01-14 21:51:03 +01:00
describe("query", () => {
it("should be able to query a pg datasource", async () => {
const res = await request
.post(`/api/datasources/query`)
.send({
endpoint: {
datasourceId: datasource._id,
operation: "READ",
// table name below
entityId: "users",
},
resource: {
fields: ["name", "age"],
},
filters: {
string: {
name: "John",
},
},
})
.set(config.defaultHeaders())
.expect(200)
// this is mock data, can't test it
expect(res.body).toBeDefined()
expect(pg.queryMock).toHaveBeenCalledWith({
bindings: ["John%", 5000],
sql: `select "name", "age" from "users" where "name" like $1 limit $2`
})
})
})
describe("destroy", () => {
2021-01-14 21:51:03 +01:00
it("deletes queries for the datasource after deletion and returns a success message", async () => {
2021-03-04 11:05:50 +01:00
await config.createQuery()
2021-01-14 21:51:03 +01:00
await request
2021-03-04 11:05:50 +01:00
.delete(`/api/datasources/${datasource._id}/${datasource._rev}`)
.set(config.defaultHeaders())
2021-01-14 21:51:03 +01:00
.expect(200)
const res = await request
.get(`/api/datasources`)
.set(config.defaultHeaders())
2021-01-14 21:51:03 +01:00
.expect('Content-Type', /json/)
.expect(200)
expect(res.body).toEqual([])
2021-01-14 21:51:03 +01:00
})
it("should apply authorization to endpoint", async () => {
2021-03-04 11:05:50 +01:00
await checkBuilderEndpoint({
config,
2021-01-14 21:51:03 +01:00
method: "DELETE",
url: `/api/datasources/${datasource._id}/${datasource._rev}`,
})
})
})
})