2021-03-08 15:49:19 +01:00
|
|
|
const setup = require("./utilities")
|
2021-03-11 19:29:48 +01:00
|
|
|
const { basicScreen } = setup.structures
|
2021-03-08 15:49:19 +01:00
|
|
|
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
2022-01-10 20:33:00 +01:00
|
|
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
2021-04-13 21:25:43 +02:00
|
|
|
|
2021-03-10 13:56:30 +01:00
|
|
|
const route = "/test"
|
|
|
|
|
2021-03-08 15:49:19 +01:00
|
|
|
describe("/routing", () => {
|
|
|
|
let request = setup.getRequest()
|
|
|
|
let config = setup.getConfig()
|
|
|
|
let screen, screen2
|
|
|
|
|
|
|
|
afterAll(setup.afterAll)
|
|
|
|
|
|
|
|
beforeEach(async () => {
|
|
|
|
await config.init()
|
2021-03-10 13:56:30 +01:00
|
|
|
screen = basicScreen()
|
|
|
|
screen.routing.route = route
|
|
|
|
screen = await config.createScreen(screen)
|
2021-03-08 15:49:19 +01:00
|
|
|
screen2 = basicScreen()
|
|
|
|
screen2.routing.roleId = BUILTIN_ROLE_IDS.POWER
|
2021-03-10 13:56:30 +01:00
|
|
|
screen2.routing.route = route
|
2021-03-08 15:49:19 +01:00
|
|
|
screen2 = await config.createScreen(screen2)
|
2021-10-25 17:59:09 +02:00
|
|
|
await config.deploy()
|
2021-03-08 15:49:19 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
describe("fetch", () => {
|
2021-10-25 17:59:09 +02:00
|
|
|
it("prevents a public user from accessing development app", async () => {
|
|
|
|
await request
|
|
|
|
.get(`/api/routing/client`)
|
|
|
|
.set(config.publicHeaders({ prodApp: false }))
|
|
|
|
.expect(302)
|
|
|
|
})
|
|
|
|
|
|
|
|
it("prevents a non builder from accessing development app", async () => {
|
|
|
|
await request
|
|
|
|
.get(`/api/routing/client`)
|
|
|
|
.set(await config.roleHeaders({
|
|
|
|
roleId: BUILTIN_ROLE_IDS.BASIC,
|
|
|
|
prodApp: false
|
|
|
|
}))
|
|
|
|
.expect(302)
|
|
|
|
})
|
2021-03-08 15:49:19 +01:00
|
|
|
it("returns the correct routing for basic user", async () => {
|
|
|
|
const res = await request
|
|
|
|
.get(`/api/routing/client`)
|
2021-04-23 19:07:39 +02:00
|
|
|
.set(await config.roleHeaders({
|
2021-10-25 17:59:09 +02:00
|
|
|
roleId: BUILTIN_ROLE_IDS.BASIC
|
2021-04-23 19:07:39 +02:00
|
|
|
}))
|
2021-03-08 15:49:19 +01:00
|
|
|
.expect("Content-Type", /json/)
|
|
|
|
.expect(200)
|
|
|
|
expect(res.body.routes).toBeDefined()
|
2021-03-10 13:56:30 +01:00
|
|
|
expect(res.body.routes[route]).toEqual({
|
2021-03-08 15:49:19 +01:00
|
|
|
subpaths: {
|
2021-03-10 13:56:30 +01:00
|
|
|
[route]: {
|
2021-03-08 15:49:19 +01:00
|
|
|
screenId: screen._id,
|
|
|
|
roleId: screen.routing.roleId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it("returns the correct routing for power user", async () => {
|
|
|
|
const res = await request
|
|
|
|
.get(`/api/routing/client`)
|
2021-04-23 19:07:39 +02:00
|
|
|
.set(await config.roleHeaders({
|
2021-10-25 17:59:09 +02:00
|
|
|
roleId: BUILTIN_ROLE_IDS.POWER
|
2021-04-23 19:07:39 +02:00
|
|
|
}))
|
2021-03-08 15:49:19 +01:00
|
|
|
.expect("Content-Type", /json/)
|
|
|
|
.expect(200)
|
|
|
|
expect(res.body.routes).toBeDefined()
|
2021-03-10 13:56:30 +01:00
|
|
|
expect(res.body.routes[route]).toEqual({
|
2021-03-08 15:49:19 +01:00
|
|
|
subpaths: {
|
2021-03-10 13:56:30 +01:00
|
|
|
[route]: {
|
2021-03-08 15:49:19 +01:00
|
|
|
screenId: screen2._id,
|
|
|
|
roleId: screen2.routing.roleId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("fetch all", () => {
|
|
|
|
it("should fetch all routes for builder", async () => {
|
|
|
|
const res = await request
|
|
|
|
.get(`/api/routing`)
|
2021-10-25 17:59:09 +02:00
|
|
|
.set(await config.roleHeaders({
|
|
|
|
roleId: BUILTIN_ROLE_IDS.POWER,
|
|
|
|
builder: true,
|
|
|
|
}))
|
2021-03-08 15:49:19 +01:00
|
|
|
.expect(200)
|
2021-10-25 17:59:09 +02:00
|
|
|
.expect("Content-Type", /json/)
|
2021-03-08 15:49:19 +01:00
|
|
|
expect(res.body.routes).toBeDefined()
|
2021-03-10 13:56:30 +01:00
|
|
|
expect(res.body.routes[route].subpaths[route]).toBeDefined()
|
|
|
|
const subpath = res.body.routes[route].subpaths[route]
|
|
|
|
expect(subpath.screens[screen2.routing.roleId]).toEqual(screen2._id)
|
|
|
|
expect(subpath.screens[screen.routing.roleId]).toEqual(screen._id)
|
2021-03-08 15:49:19 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
it("make sure it is a builder only endpoint", async () => {
|
|
|
|
await checkBuilderEndpoint({
|
|
|
|
config,
|
|
|
|
method: "GET",
|
|
|
|
url: `/api/routing`,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|