budibase/packages/core/test/collectionApi.delete.spec.js

71 lines
2.6 KiB
JavaScript

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");
});
});