import { getAppApis } from "../src" import { getMemoryTemplateApi, createAppDefinitionWithActionsAndTriggers, } from "./specHelpers" import { isFunction } from "lodash" describe("getAppApis", () => { const getMemoryAppApis = async () => { const { templateApi } = await getMemoryTemplateApi() const rootNode = templateApi.getNewRootLevel() await templateApi.saveApplicationHierarchy(rootNode) return await getAppApis(templateApi._storeHandle, {}) } it("should return api factory functions", async () => { const apis = await getMemoryAppApis() expect(apis.recordApi).toBeDefined() expect(apis.templateApi).toBeDefined() expect(apis.collectionApi).toBeDefined() expect(apis.indexApi).toBeDefined() expect(apis.subscribe).toBeDefined() expect(apis.authApi).toBeDefined() }) }) describe("getAppApis > initialiseActions", () => { it("should expose actions when all sources and behvaviours are present", async () => { const { logs, emails, call_timers, behaviourSources, templateApi, } = await createAppDefinitionWithActionsAndTriggers() const { actions } = await getAppApis( templateApi._storeHandle, behaviourSources ) actions.sendEmail("email") actions.measureCallTime("calltime") actions.logMessage("message") expect(isFunction(actions.sendEmail)).toBeTruthy() expect(isFunction(actions.measureCallTime)).toBeTruthy() expect(isFunction(actions.logMessage)).toBeTruthy() }) it("should throw exception when behaviour source is missing", async () => { const { behaviourSources, templateApi, } = await createAppDefinitionWithActionsAndTriggers() delete behaviourSources["my-custom-lib"] let ex try { await getAppApis(templateApi._storeHandle, behaviourSources) } catch (e) { ex = e expect(e.message).toContain("behaviour") } expect(ex).toBeDefined() }) it("should throw exception when behaviour is missing", async () => { const { behaviourSources, templateApi, } = await createAppDefinitionWithActionsAndTriggers() delete behaviourSources["my-custom-lib"]["send_email"] let ex try { await getAppApis(templateApi._storeHandle, behaviourSources) } catch (e) { expect(e.message).toContain("behaviour") ex = e } expect(ex).toBeDefined() }) })