1
0
Fork 0
mirror of synced 2024-10-02 01:56:57 +13:00
budibase/packages/server/src/api/routes/tests/accesslevel.spec.js

177 lines
5.2 KiB
JavaScript
Raw Normal View History

2020-05-22 01:31:23 +12:00
const {
createApplication,
createTable,
2020-05-22 01:31:23 +12:00
createView,
supertest,
defaultHeaders
} = require("./couchTestUtils")
const {
BUILTIN_LEVELS,
} = require("../../../utilities/security/accessLevels")
const { BUILTIN_PERMISSION_NAMES } = require("../../../utilities/security/permissions")
2020-05-22 01:31:23 +12:00
describe("/accesslevels", () => {
let server
let request
let appId
let table
2020-05-22 01:31:23 +12:00
let view
beforeAll(async () => {
({ request, server } = await supertest())
});
2020-10-29 11:37:58 +13:00
afterAll(() => {
server.close()
2020-05-22 01:31:23 +12:00
})
beforeEach(async () => {
let app = await createApplication(request)
appId = app.instance._id
table = await createTable(request, appId)
view = await createView(request, appId, table._id)
2020-05-22 01:31:23 +12:00
})
describe("create", () => {
it("returns a success message when level is successfully created", async () => {
const res = await request
2020-06-19 07:41:37 +12:00
.post(`/api/accesslevels`)
2020-05-22 01:31:23 +12:00
.send({ name: "user" })
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
expect(res.res.statusMessage).toEqual("Access Level 'user' created successfully.")
expect(res.body._id).toBeDefined()
expect(res.body._rev).toBeDefined()
expect(res.body.permissions).toEqual([])
})
});
describe("fetch", () => {
it("should list custom levels, plus 2 default levels", async () => {
const createRes = await request
2020-06-19 07:41:37 +12:00
.post(`/api/accesslevels`)
.send({ name: "user", permissions: [BUILTIN_PERMISSION_NAMES.READ_ONLY] })
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const customLevel = createRes.body
const res = await request
2020-06-19 07:41:37 +12:00
.get(`/api/accesslevels`)
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
expect(res.body.length).toBe(3)
const adminLevel = res.body.find(r => r._id === BUILTIN_LEVELS.admin._id)
2020-05-22 01:31:23 +12:00
expect(adminLevel).toBeDefined()
expect(adminLevel.permissions).toEqual([BUILTIN_PERMISSION_NAMES.ADMIN])
2020-05-22 01:31:23 +12:00
const powerUserLevel = res.body.find(r => r._id === BUILTIN_LEVELS.power._id)
2020-05-22 01:31:23 +12:00
expect(powerUserLevel).toBeDefined()
expect(powerUserLevel.permissions).toEqual([BUILTIN_PERMISSION_NAMES.POWER])
2020-05-22 01:31:23 +12:00
const customLevelFetched = res.body.find(r => r._id === customLevel._id)
expect(customLevelFetched.permissions).toEqual([BUILTIN_PERMISSION_NAMES.READ_ONLY])
2020-05-22 01:31:23 +12:00
})
});
describe("destroy", () => {
it("should delete custom access level", async () => {
const createRes = await request
2020-06-19 07:41:37 +12:00
.post(`/api/accesslevels`)
.send({ name: "user", permissions: [BUILTIN_PERMISSION_NAMES.READ_ONLY] })
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const customLevel = createRes.body
await request
2020-06-19 07:41:37 +12:00
.delete(`/api/accesslevels/${customLevel._id}/${customLevel._rev}`)
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect(200)
await request
2020-06-19 07:41:37 +12:00
.get(`/api/accesslevels/${customLevel._id}`)
.set(defaultHeaders(appId))
.expect(404)
2020-05-22 01:31:23 +12:00
})
})
describe("patch", () => {
it("should add given permissions", async () => {
const createRes = await request
2020-06-19 07:41:37 +12:00
.post(`/api/accesslevels`)
.send({ name: "user", permissions: [BUILTIN_PERMISSION_NAMES.READ_ONLY] })
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const customLevel = createRes.body
await request
2020-06-19 07:41:37 +12:00
.patch(`/api/accesslevels/${customLevel._id}`)
2020-05-22 01:31:23 +12:00
.send({
_rev: customLevel._rev,
addedPermissions: [ BUILTIN_PERMISSION_NAMES.WRITE ]
2020-05-22 01:31:23 +12:00
})
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const finalRes = await request
2020-06-19 07:41:37 +12:00
.get(`/api/accesslevels/${customLevel._id}`)
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect(200)
expect(finalRes.body.permissions.length).toBe(2)
expect(finalRes.body.permissions.indexOf(BUILTIN_PERMISSION_NAMES.WRITE)).not.toBe(-1)
expect(finalRes.body.permissions.indexOf(BUILTIN_PERMISSION_NAMES.READ_ONLY)).not.toBe(-1)
2020-05-22 01:31:23 +12:00
})
it("should remove given permissions", async () => {
const createRes = await request
2020-06-19 07:41:37 +12:00
.post(`/api/accesslevels`)
2020-05-22 01:31:23 +12:00
.send({
name: "user",
permissions: [
BUILTIN_PERMISSION_NAMES.READ_ONLY,
BUILTIN_PERMISSION_NAMES.WRITE,
2020-05-22 01:31:23 +12:00
]
})
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const customLevel = createRes.body
await request
2020-06-19 07:41:37 +12:00
.patch(`/api/accesslevels/${customLevel._id}`)
2020-05-22 01:31:23 +12:00
.send({
_rev: customLevel._rev,
removedPermissions: [BUILTIN_PERMISSION_NAMES.WRITE]
2020-05-22 01:31:23 +12:00
})
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect('Content-Type', /json/)
.expect(200)
const finalRes = await request
2020-06-19 07:41:37 +12:00
.get(`/api/accesslevels/${customLevel._id}`)
.set(defaultHeaders(appId))
2020-05-22 01:31:23 +12:00
.expect(200)
expect(finalRes.body.permissions.length).toBe(1)
expect(finalRes.body.permissions.indexOf(BUILTIN_PERMISSION_NAMES.READ_ONLY)).not.toBe(-1)
2020-05-22 01:31:23 +12:00
})
})
});