budibase/packages/core/test/templateApi.loadSaveHeirarc...

176 lines
5.7 KiB
JavaScript

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