172 lines
4.8 KiB
TypeScript
172 lines
4.8 KiB
TypeScript
import { checkBuilderEndpoint } from "./utilities/TestFunctions"
|
|
import * as setup from "./utilities"
|
|
import { events, roles } from "@budibase/backend-core"
|
|
import { Screen, PermissionLevel, Role } from "@budibase/types"
|
|
|
|
const { basicScreen } = setup.structures
|
|
|
|
describe("/screens", () => {
|
|
let config = setup.getConfig()
|
|
let screen: Screen
|
|
|
|
afterAll(setup.afterAll)
|
|
|
|
beforeAll(async () => {
|
|
await config.init()
|
|
screen = await config.createScreen()
|
|
})
|
|
|
|
describe("fetch", () => {
|
|
it("should be able to create a layout", async () => {
|
|
const screens = await config.api.screen.list({ status: 200 })
|
|
expect(screens.length).toEqual(1)
|
|
expect(screens.some(s => s._id === screen._id)).toEqual(true)
|
|
})
|
|
|
|
it("should apply authorization to endpoint", async () => {
|
|
await checkBuilderEndpoint({
|
|
config,
|
|
method: "GET",
|
|
url: `/api/screens`,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe("permissions", () => {
|
|
let screen1: Screen, screen2: Screen
|
|
let role1: Role, role2: Role, multiRole: Role
|
|
|
|
beforeAll(async () => {
|
|
role1 = await config.api.roles.save({
|
|
name: "role1",
|
|
inherits: roles.BUILTIN_ROLE_IDS.BASIC,
|
|
permissionId: PermissionLevel.WRITE,
|
|
})
|
|
role2 = await config.api.roles.save({
|
|
name: "role2",
|
|
inherits: roles.BUILTIN_ROLE_IDS.BASIC,
|
|
permissionId: PermissionLevel.WRITE,
|
|
})
|
|
multiRole = await config.api.roles.save({
|
|
name: "multiRole",
|
|
inherits: [role1._id!, role2._id!],
|
|
permissionId: PermissionLevel.WRITE,
|
|
})
|
|
screen1 = await config.api.screen.save(
|
|
{
|
|
...basicScreen(),
|
|
routing: {
|
|
roleId: role1._id!,
|
|
route: "/foo",
|
|
homeScreen: false,
|
|
},
|
|
},
|
|
{ status: 200 }
|
|
)
|
|
screen2 = await config.api.screen.save(
|
|
{
|
|
...basicScreen(),
|
|
routing: {
|
|
roleId: role2._id!,
|
|
route: "/bar",
|
|
homeScreen: false,
|
|
},
|
|
},
|
|
{ status: 200 }
|
|
)
|
|
// get into prod app
|
|
await config.publish()
|
|
})
|
|
|
|
async function checkScreens(roleId: string, screenIds: string[]) {
|
|
await config.loginAsRole(roleId, async () => {
|
|
const res = await config.api.application.getDefinition(
|
|
config.prodAppId!,
|
|
{
|
|
status: 200,
|
|
}
|
|
)
|
|
// basic and role1 screen
|
|
expect(res.screens.length).toEqual(screenIds.length)
|
|
expect(res.screens.map(s => s._id).sort()).toEqual(screenIds.sort())
|
|
})
|
|
}
|
|
|
|
it("should be able to fetch basic and screen1 with role1", async () => {
|
|
await checkScreens(role1._id!, [screen._id!, screen1._id!])
|
|
})
|
|
|
|
it("should be able to fetch basic and screen2 with role2", async () => {
|
|
await checkScreens(role2._id!, [screen._id!, screen2._id!])
|
|
})
|
|
|
|
it("should be able to fetch basic, screen1 and screen2 with multi-inheritance role", async () => {
|
|
await checkScreens(multiRole._id!, [
|
|
screen._id!,
|
|
screen1._id!,
|
|
screen2._id!,
|
|
])
|
|
})
|
|
})
|
|
|
|
describe("save", () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
it("should be able to create a screen", async () => {
|
|
const screen = basicScreen()
|
|
const responseScreen = await config.api.screen.save(screen, {
|
|
status: 200,
|
|
})
|
|
|
|
expect(responseScreen._rev).toBeDefined()
|
|
expect(responseScreen.name).toEqual(screen.name)
|
|
expect(events.screen.created).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it("should be able to update a screen", async () => {
|
|
const screen = basicScreen()
|
|
let responseScreen = await config.api.screen.save(screen, { status: 200 })
|
|
screen._id = responseScreen._id
|
|
screen._rev = responseScreen._rev
|
|
screen.name = "edit"
|
|
jest.clearAllMocks()
|
|
|
|
responseScreen = await config.api.screen.save(screen, { status: 200 })
|
|
|
|
expect(responseScreen._rev).toBeDefined()
|
|
expect(responseScreen.name).toEqual(screen.name)
|
|
expect(events.screen.created).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it("should apply authorization to endpoint", async () => {
|
|
await checkBuilderEndpoint({
|
|
config,
|
|
method: "POST",
|
|
url: `/api/screens`,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe("destroy", () => {
|
|
it("should be able to delete the screen", async () => {
|
|
const response = await config.api.screen.destroy(
|
|
screen._id!,
|
|
screen._rev!,
|
|
{ status: 200 }
|
|
)
|
|
expect(response.message).toBeDefined()
|
|
expect(events.screen.deleted).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it("should apply authorization to endpoint", async () => {
|
|
await checkBuilderEndpoint({
|
|
config,
|
|
method: "DELETE",
|
|
url: `/api/screens/${screen._id}/${screen._rev}`,
|
|
})
|
|
})
|
|
})
|
|
})
|