1
0
Fork 0
mirror of synced 2024-06-02 10:34:40 +12:00
budibase/packages/server/src/api/routes/tests/role.spec.js

129 lines
4.1 KiB
JavaScript
Raw Normal View History

const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
2020-05-22 01:31:23 +12:00
const {
2022-11-18 03:59:18 +13:00
BuiltinPermissionID,
} = require("@budibase/backend-core/permissions")
const setup = require("./utilities")
const { basicRole } = setup.structures
2022-04-08 12:28:22 +12:00
const { events } = require("@budibase/backend-core")
2020-05-22 01:31:23 +12:00
describe("/roles", () => {
let request = setup.getRequest()
let config = setup.getConfig()
2020-05-22 01:31:23 +12:00
afterAll(setup.afterAll)
2020-05-22 01:31:23 +12:00
beforeEach(async () => {
await config.init()
2020-05-22 01:31:23 +12:00
})
2022-04-08 12:28:22 +12:00
const createRole = async (role) => {
if (!role) {
role = basicRole()
}
return request
.post(`/api/roles`)
.send(role)
.set(config.defaultHeaders())
.expect("Content-Type", /json/)
.expect(200)
}
2020-05-22 01:31:23 +12:00
describe("create", () => {
it("returns a success message when role is successfully created", async () => {
2022-04-08 12:28:22 +12:00
const res = await createRole()
expect(res.res.statusMessage).toEqual(
"Role 'NewRole' created successfully."
)
expect(res.body._id).toBeDefined()
expect(res.body._rev).toBeDefined()
expect(events.role.updated).not.toBeCalled()
expect(events.role.created).toBeCalledTimes(1)
expect(events.role.created).toBeCalledWith(res.body)
})
})
describe("update", () => {
it("updates a role", async () => {
let res = await createRole()
jest.clearAllMocks()
res = await createRole(res.body)
2020-05-22 01:31:23 +12:00
expect(res.res.statusMessage).toEqual(
"Role 'NewRole' created successfully."
)
2020-05-22 01:31:23 +12:00
expect(res.body._id).toBeDefined()
expect(res.body._rev).toBeDefined()
2022-04-08 12:28:22 +12:00
expect(events.role.created).not.toBeCalled()
expect(events.role.updated).toBeCalledTimes(1)
expect(events.role.updated).toBeCalledWith(res.body)
2020-05-22 01:31:23 +12:00
})
})
2020-05-22 01:31:23 +12:00
describe("fetch", () => {
it("should list custom roles, plus 2 default roles", async () => {
const customRole = await config.createRole()
2020-05-22 01:31:23 +12:00
const res = await request
.get(`/api/roles`)
.set(config.defaultHeaders())
.expect("Content-Type", /json/)
2020-05-22 01:31:23 +12:00
.expect(200)
expect(res.body.length).toBe(5)
2020-05-22 01:31:23 +12:00
const adminRole = res.body.find(r => r._id === BUILTIN_ROLE_IDS.ADMIN)
expect(adminRole).toBeDefined()
expect(adminRole.inherits).toEqual(BUILTIN_ROLE_IDS.POWER)
2022-11-18 03:59:18 +13:00
expect(adminRole.permissionId).toEqual(BuiltinPermissionID.ADMIN)
2020-05-22 01:31:23 +12:00
const powerUserRole = res.body.find(r => r._id === BUILTIN_ROLE_IDS.POWER)
expect(powerUserRole).toBeDefined()
expect(powerUserRole.inherits).toEqual(BUILTIN_ROLE_IDS.BASIC)
2022-11-18 03:59:18 +13:00
expect(powerUserRole.permissionId).toEqual(BuiltinPermissionID.POWER)
2020-05-22 01:31:23 +12:00
const customRoleFetched = res.body.find(r => r._id === customRole._id)
expect(customRoleFetched).toBeDefined()
expect(customRoleFetched.inherits).toEqual(BUILTIN_ROLE_IDS.BASIC)
expect(customRoleFetched.permissionId).toEqual(
2022-11-18 03:59:18 +13:00
BuiltinPermissionID.READ_ONLY
)
2020-05-22 01:31:23 +12:00
})
it("should be able to get the role with a permission added", async () => {
const table = await config.createTable()
await config.addPermission(BUILTIN_ROLE_IDS.POWER, table._id)
const res = await request
.get(`/api/roles`)
.set(config.defaultHeaders())
.expect("Content-Type", /json/)
2020-05-22 01:31:23 +12:00
.expect(200)
expect(res.body.length).toBeGreaterThan(0)
const power = res.body.find(role => role._id === BUILTIN_ROLE_IDS.POWER)
expect(power.permissions[table._id]).toEqual(["read"])
})
})
2020-05-22 01:31:23 +12:00
describe("destroy", () => {
it("should delete custom roles", async () => {
const customRole = await config.createRole({
name: "user",
2022-11-18 03:59:18 +13:00
permissionId: BuiltinPermissionID.READ_ONLY,
2022-04-08 12:28:22 +12:00
inherits: BUILTIN_ROLE_IDS.BASIC,
})
2022-04-08 12:28:22 +12:00
delete customRole._rev_tree
2020-05-22 01:31:23 +12:00
await request
.delete(`/api/roles/${customRole._id}/${customRole._rev}`)
.set(config.defaultHeaders())
2020-05-22 01:31:23 +12:00
.expect(200)
await request
.get(`/api/roles/${customRole._id}`)
.set(config.defaultHeaders())
.expect(404)
2022-04-08 12:28:22 +12:00
expect(events.role.deleted).toBeCalledTimes(1)
expect(events.role.deleted).toBeCalledWith(customRole)
2020-05-22 01:31:23 +12:00
})
})
})