import {createAppDefinitionWithActionsAndTriggers} from "./specHelpers"; import {getAppApis} from "../src"; import {permission} from "../src/authApi/permissions"; describe("actions execute", () => { it("should successfully execute actions", async () => { const {emails, app} = await createAppDefinitionWithActionsAndTriggers(); app.actions.sendEmail("an email"); expect(emails).toEqual(["an email"]); }); it("should successfully execute actions via actions api", async () => { const {emails, actionsApi} = await createAppDefinitionWithActionsAndTriggers(); actionsApi.execute("sendEmail", "an email"); expect(emails).toEqual(["an email"]); }); it("should throw error when user user does not have permission", async () => { const {actionsApi, app} = await createAppDefinitionWithActionsAndTriggers(); app.removePermission(permission.executeAction.get("sendEmail")); expect(() => actionsApi.execute("sendEmail")).toThrow(/Unauthorized/); }); it("should not depend on having any other permissions", async () => { const {actionsApi, app} = await createAppDefinitionWithActionsAndTriggers(); app.withOnlyThisPermission(permission.executeAction.get("sendEmail")); actionsApi.execute("sendEmail", "am email"); }); }); describe("triggers execute", () => { it("should run action when no condition is set", async () => { const {logs, templateApi, behaviourSources} = await createAppDefinitionWithActionsAndTriggers(); const {recordApi, withFullAccess} = await getAppApis( templateApi._storeHandle, behaviourSources); withFullAccess(); // trigger setup to add to logs on recordApi:save:onError event const customer = recordApi.getNew("/customers", "customer"); let errCaught; try { await recordApi.save(customer); } catch (e) { errCaught = e.message; } expect(logs).toEqual([errCaught]); }); it("should run action when condition is met", async () => { const {call_timers, templateApi, behaviourSources} = await createAppDefinitionWithActionsAndTriggers(); const {recordApi, withFullAccess} = await getAppApis( templateApi._storeHandle, behaviourSources); withFullAccess(); const customer = recordApi.getNew("/customers", "customer"); customer.surname = "Ledog"; // trigger call_timer set to return 999 all the time, just for test // trigger set to run for type = customer await recordApi.save(customer); expect(call_timers).toEqual([999]); }); it("should not run action when condition is not met", async () => { const {call_timers, templateApi, behaviourSources} = await createAppDefinitionWithActionsAndTriggers(); const {recordApi, withFullAccess} = await getAppApis( templateApi._storeHandle, behaviourSources); withFullAccess(); const partner = recordApi.getNew("/partners", "partner"); // trigger call_timer set to return 999 all the time, just for test // trigger set to run for type = customer await recordApi.save(partner); expect(call_timers).toEqual([]); }); });