mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 04:27:21 +00:00
public commit
This commit is contained in:
175
app/__test__/flows/trigger.test.ts
Normal file
175
app/__test__/flows/trigger.test.ts
Normal file
@@ -0,0 +1,175 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { Hono } from "hono";
|
||||
import { Event, EventManager } from "../../src/core/events";
|
||||
import { EventTrigger, Flow, HttpTrigger, Task } from "../../src/flows";
|
||||
|
||||
const ALL_TESTS = !!process.env.ALL_TESTS;
|
||||
|
||||
class ExecTask extends Task {
|
||||
type = "exec";
|
||||
|
||||
constructor(
|
||||
name: string,
|
||||
params: any,
|
||||
private fn: () => any
|
||||
) {
|
||||
super(name, params);
|
||||
}
|
||||
|
||||
static create(name: string, fn: () => any) {
|
||||
return new ExecTask(name, undefined, fn);
|
||||
}
|
||||
|
||||
override clone(name: string, params: any) {
|
||||
return new ExecTask(name, params, this.fn);
|
||||
}
|
||||
|
||||
async execute() {
|
||||
//console.log("executing", this.name);
|
||||
return await this.fn();
|
||||
}
|
||||
}
|
||||
|
||||
describe("Flow trigger", async () => {
|
||||
test("manual trigger", async () => {
|
||||
let called = false;
|
||||
|
||||
const task = ExecTask.create("manual", () => {
|
||||
called = true;
|
||||
});
|
||||
const flow = new Flow("", [task]);
|
||||
|
||||
expect(flow.trigger.type).toBe("manual");
|
||||
|
||||
await flow.trigger.register(flow);
|
||||
expect(called).toBe(true);
|
||||
});
|
||||
|
||||
test("event trigger", async () => {
|
||||
class EventTriggerClass extends Event {
|
||||
static override slug = "test-event";
|
||||
}
|
||||
|
||||
const emgr = new EventManager({ EventTriggerClass });
|
||||
let called = false;
|
||||
|
||||
const task = ExecTask.create("event", () => {
|
||||
called = true;
|
||||
});
|
||||
const flow = new Flow(
|
||||
"test",
|
||||
[task],
|
||||
[],
|
||||
new EventTrigger({ event: "test-event", mode: "sync" })
|
||||
);
|
||||
|
||||
flow.trigger.register(flow, emgr);
|
||||
|
||||
await emgr.emit(new EventTriggerClass({ test: 1 }));
|
||||
expect(called).toBe(true);
|
||||
});
|
||||
|
||||
/*test("event trigger with match", async () => {
|
||||
class EventTriggerClass extends Event<{ number: number }> {
|
||||
static slug = "test-event";
|
||||
}
|
||||
|
||||
const emgr = new EventManager({ EventTriggerClass });
|
||||
let called: number = 0;
|
||||
|
||||
const task = ExecTask.create("event", () => {
|
||||
called++;
|
||||
});
|
||||
const flow = new Flow(
|
||||
"test",
|
||||
[task],
|
||||
[],
|
||||
new EventTrigger(EventTriggerClass, "sync", (e) => e.params.number === 2)
|
||||
);
|
||||
|
||||
flow.trigger.register(flow, emgr);
|
||||
|
||||
await emgr.emit(new EventTriggerClass({ number: 1 }));
|
||||
await emgr.emit(new EventTriggerClass({ number: 2 }));
|
||||
expect(called).toBe(1);
|
||||
});*/
|
||||
|
||||
test("http trigger", async () => {
|
||||
let called = false;
|
||||
|
||||
const task = ExecTask.create("http", () => {
|
||||
called = true;
|
||||
});
|
||||
const flow = new Flow(
|
||||
"test",
|
||||
[task],
|
||||
[],
|
||||
new HttpTrigger({
|
||||
path: "/test",
|
||||
method: "GET",
|
||||
mode: "sync"
|
||||
})
|
||||
);
|
||||
|
||||
const hono = new Hono();
|
||||
|
||||
flow.trigger.register(flow, hono);
|
||||
|
||||
const res = await hono.request("/test");
|
||||
//const data = await res.json();
|
||||
//console.log("response", data);
|
||||
expect(called).toBe(true);
|
||||
});
|
||||
|
||||
test("http trigger with response", async () => {
|
||||
const task = ExecTask.create("http", () => ({
|
||||
called: true
|
||||
}));
|
||||
const flow = new Flow(
|
||||
"test",
|
||||
[task],
|
||||
[],
|
||||
new HttpTrigger({
|
||||
path: "/test",
|
||||
method: "GET",
|
||||
mode: "sync"
|
||||
})
|
||||
);
|
||||
flow.setRespondingTask(task);
|
||||
|
||||
const hono = new Hono();
|
||||
|
||||
flow.trigger.register(flow, hono);
|
||||
|
||||
const res = await hono.request("/test");
|
||||
const data = await res.json();
|
||||
//console.log("response", data);
|
||||
expect(data).toEqual({ called: true });
|
||||
});
|
||||
|
||||
/*test.skipIf(ALL_TESTS)("template with email", async () => {
|
||||
console.log("apikey", process.env.RESEND_API_KEY);
|
||||
const task = new FetchTask("fetch", {
|
||||
url: "https://api.resend.com/emails",
|
||||
method: "POST",
|
||||
headers: [
|
||||
{ key: "Content-Type", value: "application/json" },
|
||||
{ key: "Authorization", value: "Bearer {{ flow.output.apiKey }}" }
|
||||
],
|
||||
body: JSON.stringify({
|
||||
from: "onboarding@resend.dev",
|
||||
to: "dennis.senn@gmail.com",
|
||||
subject:
|
||||
"test from {% if flow.output.someFancyParam > 100 %}flow{% else %}task{% endif %}!",
|
||||
html: "Hello"
|
||||
})
|
||||
});
|
||||
|
||||
const flow = new Flow("test", [task]);
|
||||
|
||||
const exec = await flow.start({ someFancyParam: 80, apiKey: process.env.RESEND_API_KEY });
|
||||
//console.log("exec", exec.logs, exec.finished());
|
||||
expect(exec.finished()).toBe(true);
|
||||
expect(exec.hasErrors()).toBe(false);
|
||||
});*/
|
||||
});
|
||||
Reference in New Issue
Block a user