Budibase is an open-source low-code platform for creating internal apps in minutes. Supports PostgreSQL, MySQL, MSSQL, MongoDB, Rest API, Docker, K8s 🚀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
2.5 KiB

import {
setupApphierarchy,
basicAppHierarchyCreator_WithFields,
} from "./specHelpers"
import { $, splitKey } from "../src/common"
import { keys, filter } from "lodash/fp"
import { permission } from "../src/authApi/permissions"
describe("collectionApi > delete", () => {
it("should remove every key in collection's path", async () => {
const { recordApi, collectionApi } = await setupApphierarchy(
basicAppHierarchyCreator_WithFields
)
const record1 = recordApi.getNew("/customers", "customer")
record1.surname = "Ledog"
await recordApi.save(record1)
const record2 = recordApi.getNew("/customers", "customer")
record2.surname = "Zeecat"
await recordApi.save(record2)
const childRecord = recordApi.getNew(`${record1.key}/invoices`, "invoice")
await recordApi.save(childRecord)
await collectionApi.delete("/customers")
const remainingKeys = $(recordApi._storeHandle.data, [
keys,
filter(k => splitKey(k)[0] === "customers"),
])
expect(remainingKeys).toEqual([])
})
it("should not delete anything that is not in its path", async () => {
const { recordApi, collectionApi } = await setupApphierarchy(
basicAppHierarchyCreator_WithFields
)
const customer = recordApi.getNew("/customers", "customer")
customer.surname = "Ledog"
await recordApi.save(customer)
const partner = recordApi.getNew("/partners", "partner")
await recordApi.save(partner)
const allKeys = keys(recordApi._storeHandle.data)
const customerKeys = $(allKeys, [
filter(k => splitKey(k)[0] === "customers"),
])
const expectedRemainingKeys = allKeys.length - customerKeys.length
await collectionApi.delete("/customers")
const remainingKeys = keys(recordApi._storeHandle.data)
expect(remainingKeys.length).toBe(expectedRemainingKeys)
})
it("should throw error when user user does not have permission", async () => {
const { collectionApi, app } = await setupApphierarchy(
basicAppHierarchyCreator_WithFields
)
app.removePermission(permission.manageCollection.get("/customers"))
expect(collectionApi.delete("/customers")).rejects.toThrow(/Unauthorized/)
})
it("should not depend on having any other permissions", async () => {
const { collectionApi, app } = await setupApphierarchy(
basicAppHierarchyCreator_WithFields
)
app.withOnlyThisPermission(permission.manageCollection.get("/customers"))
await collectionApi.delete("/customers")
})
})