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

113 lines
3.2 KiB
JavaScript
Raw Normal View History

import { createAppDefinitionWithActionsAndTriggers } from "./specHelpers"
import { getAppApis } from "../src"
import { permission } from "../src/authApi/permissions"
2019-07-15 08:12:52 +02:00
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")
})
})
2019-07-15 08:12:52 +02:00
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([])
})
})