import { setupApphierarchy, basicAppHierarchyCreator_WithFields, } from "./specHelpers" import { keys, filter } from "lodash/fp" import { $ } from "../src/common" import { permission } from "../src/authApi/permissions" describe("recordApi > delete", () => { it("should remove every key in record's path", async () => { const { recordApi } = await setupApphierarchy( basicAppHierarchyCreator_WithFields ) const record = recordApi.getNew("/customers", "customer") record.surname = "Ledog" await recordApi.save(record) await recordApi.delete(record.key) const remainingKeys = $(recordApi._storeHandle.data, [ keys, filter(k => k.startsWith(record.key)), ]) expect(remainingKeys).toEqual([]) }) it("should remove every key in record's path, when record has child records", async () => { const { recordApi } = await setupApphierarchy( basicAppHierarchyCreator_WithFields ) const record = recordApi.getNew("/customers", "customer") record.surname = "Ledog" await recordApi.save(record) const invoice = recordApi.getNew(`${record.key}/invoices`, "invoice") await recordApi.save(invoice) await recordApi.delete(record.key) const remainingKeys = $(recordApi._storeHandle.data, [ keys, filter(k => k.startsWith(record.key)), ]) expect(remainingKeys).toEqual([]) }) it("should throw error when user user does not have permission", async () => { const { recordApi, app, appHierarchy } = await setupApphierarchy( basicAppHierarchyCreator_WithFields ) const record = recordApi.getNew("/customers", "customer") const created = await recordApi.save(record) app.removePermission( permission.deleteRecord.get(appHierarchy.customerRecord.nodeKey()) ) expect(recordApi.delete(created.key)).rejects.toThrow(/Unauthorized/) }) it("should not depend on having any other permissions", async () => { const { recordApi, app, appHierarchy } = await setupApphierarchy( basicAppHierarchyCreator_WithFields ) const record = recordApi.getNew("/customers", "customer") const saved = await recordApi.save(record) app.withOnlyThisPermission( permission.deleteRecord.get(appHierarchy.customerRecord.nodeKey()) ) await recordApi.delete(saved.key) }) })