import {getMemoryTemplateApi} from "./specHelpers"; import {permission} from "../src/authApi/permissions"; const saveThreeLevelHierarchy = async () => { const {templateApi, app} = await getMemoryTemplateApi(); const root = templateApi.getNewRootLevel(); const record = templateApi.getNewRecordTemplate(root); record.name = "customer"; const surname = templateApi.getNewField("string"); surname.name = "surname"; surname.label = "surname"; templateApi.addField(record, surname); await templateApi.saveApplicationHierarchy(root); return {templateApi, root, record, app}; }; describe("Load & Save App Hierarchy", () => { it("should rehydrate json objects with pathRegx methods", async () => { const {templateApi} = await saveThreeLevelHierarchy(); const {hierarchy} = await templateApi.getApplicationDefinition(); expect(hierarchy.pathRegx).toBeDefined(); expect(hierarchy.children[0].pathRegx).toBeDefined(); }); it("should rehydrate json objects with parent methods", async () => { const {templateApi} = await saveThreeLevelHierarchy(); const {hierarchy} = await templateApi.getApplicationDefinition(); expect(hierarchy.parent).toBeDefined(); expect(hierarchy.children[0].parent).toBeDefined(); }); it("should throw error when validation fails", async () => { const {templateApi, record, root} = await saveThreeLevelHierarchy(); record.name = ""; let err; try { await templateApi.saveApplicationHierarchy(root); } catch(e) { err = e; } expect(err).toBeDefined(); }); it("should load hierarchy with exactly the same members - balls deep", async () => { const {templateApi, root} = await saveThreeLevelHierarchy(); const {hierarchy} = await templateApi.getApplicationDefinition(); expect(JSON.stringify(hierarchy)) .toEqual(JSON.stringify(root)); }); it("should throw an error when app definition does not exist", async () => { let ex; try{ await templateApi.getApplicationDefinition() } catch(e) { ex = e; } expect(ex).toBeDefined(); }); it("should create .config folder on first save ", async () => { const {templateApi} = await saveThreeLevelHierarchy(); expect(await templateApi._storeHandle.exists("/.config")).toBeTruthy(); }); it("should throw error when user user does not have permission", async () => { const {templateApi, app, root} = await saveThreeLevelHierarchy(); app.removePermission(permission.writeTemplates.get()); expect(templateApi.saveApplicationHierarchy(root)).rejects.toThrow(/Unauthorized/); }); it("should not depend on having any other permissions", async () => { const {templateApi, app, root} = await saveThreeLevelHierarchy(); app.withOnlyThisPermission(permission.writeTemplates.get()); await templateApi.saveApplicationHierarchy(root); }); }); describe("save load actions", () => { const appDefinitionWithTriggersAndActions = async () => { const {templateApi, app} = await saveThreeLevelHierarchy(); const logAction = templateApi.createAction(); logAction.behaviourName = "log"; logAction.behaviourSource = "test"; logAction.name = "log_something"; const logOnErrorTrigger = templateApi.createTrigger(); logOnErrorTrigger.actionName = "log_something"; logOnErrorTrigger.eventName = "recordApi:save:onError"; return ({ templateApi, actions:[logAction], triggers:[logOnErrorTrigger], app }); } it("should load actions with exactly the same members", async () => { const {templateApi, actions, triggers} = await appDefinitionWithTriggersAndActions(); await templateApi.saveActionsAndTriggers(actions, triggers); const appDef = await templateApi.getApplicationDefinition(); expect(appDef.actions).toEqual(actions); expect(appDef.triggers).toEqual(triggers); }); it("should throw error when actions are invalid", async () => { const {templateApi, actions, triggers} = await appDefinitionWithTriggersAndActions(); actions[0].name = ""; let err; try { await templateApi.saveActionsAndTriggers(actions, triggers); } catch (e) { err = e; } expect(err).toBeDefined(); }); it("should throw error when triggers are invalid", async () => { const {templateApi, actions, triggers} = await appDefinitionWithTriggersAndActions(); triggers[0].eventName = ""; let err; try { await templateApi.saveActionsAndTriggers(actions, triggers); } catch (e) { err = e; } expect(err).toBeDefined(); }); it("should throw error when user user does not have permission", async () => { const {templateApi, actions, triggers, app} = await appDefinitionWithTriggersAndActions(); app.removePermission(permission.writeTemplates.get()); expect(templateApi.saveActionsAndTriggers(actions, triggers)).rejects.toThrow(/Unauthorized/); }); it("should not depend on having any other permissions", async () => { const {templateApi, actions, triggers, app} = await appDefinitionWithTriggersAndActions(); app.withOnlyThisPermission(permission.writeTemplates.get()); await templateApi.saveActionsAndTriggers(actions, triggers); }); });