182 lines
5.2 KiB
JavaScript
182 lines
5.2 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)
|
|
})
|
|
})
|