budibase/packages/core/test/actionsApi.execute.spec.js

95 lines
3.3 KiB
JavaScript
Raw Normal View History

2019-07-15 08:12:52 +02:00
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([]);
});
});