import {setupApphierarchy, basicAppHierarchyCreator_WithFields, getNewFieldAndAdd} from "./specHelpers"; import {isNonEmptyString} from "../src/common"; import { isBoolean } from "util"; import {permission} from "../src/authApi/permissions"; import { _getNew } from "../src/recordApi/getNew"; describe("recordApi > getNew", () => { it("should get object with generated id and key (full path)", async () => { const {recordApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); const record = recordApi.getNew("/customers", "customer"); expect(record.id).toBeDefined(); expect(isNonEmptyString(record.id)).toBeTruthy(); expect(record.key).toBeDefined(); expect(isNonEmptyString(record.key)).toBeTruthy(); expect(record.key).toBe(`/customers/${record.id}`); }); it("should create object with all declared fields, using default values", async () => { const {recordApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); const newRecord = recordApi.getNew("/customers", "customer") expect(newRecord.surname).toBe(null); expect(newRecord.isalive).toBe(true); expect(newRecord.createddate).toBe(null); expect(newRecord.age).toBe(null); }); it("should create object with all declared fields, and use inital values", async () => { const {recordApi} = await setupApphierarchy(templateApi => { const hierarchy = basicAppHierarchyCreator_WithFields(templateApi); const {customerRecord} = hierarchy; customerRecord.fields = []; const newField = getNewFieldAndAdd(templateApi, customerRecord); newField("surname", "string", "hello"); newField("isalive", "bool", "true"); newField("age", "number", "999"); return hierarchy; }); const newRecord = recordApi.getNew("/customers", "customer") expect(newRecord.surname).toBe("hello"); expect(newRecord.isalive).toBe(true); expect(newRecord.age).toBe(999); }); it("should add a function 'isNew' which always returns true", async () => { const {recordApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); const record = recordApi.getNew("/customers", "customer"); expect(record.isNew).toBeDefined(); expect(isBoolean(record.isNew)).toBeTruthy(); expect(record.isNew).toBeTruthy(); }); it("should add a function 'type' returns type", async () => { const {recordApi} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); const record = recordApi.getNew("/customers", "customer"); expect(record.type).toBeDefined(); expect(isNonEmptyString(record.type)).toBeTruthy(); expect(record.type).toBe("customer"); }); it("should throw error, user user does not have permission", async () => { const {recordApi, app, appHierarchy} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); app.removePermission(permission.createRecord.get(appHierarchy.customerRecord.nodeKey())); expect(() => recordApi.getNew("/customers", "customer")).toThrow(/Unauthorized/); }); it("should not depend on having any other permissions", async () => { const {recordApi, app, appHierarchy} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); app.withOnlyThisPermission(permission.createRecord.get(appHierarchy.customerRecord.nodeKey())); recordApi.getNew("/customers", "customer"); }); it("for 'single record' type, should create with key ending in node name", async () => { const {appHierarchy} = await setupApphierarchy(basicAppHierarchyCreator_WithFields); const {settingsRecord} = appHierarchy; const result = _getNew(settingsRecord, ""); expect(result.key).toBe("/settings") }) });