refactor(channels): dedupe transport and gateway test scaffolds

This commit is contained in:
Peter Steinberger
2026-02-16 14:52:15 +00:00
parent f717a13039
commit 93ca0ed54f
95 changed files with 4068 additions and 5221 deletions

View File

@@ -7,6 +7,8 @@ import { applyHookMappings, resolveHookMappings } from "./hooks-mapping.js";
const baseUrl = new URL("http://127.0.0.1:18789/hooks/gmail");
describe("hooks mapping", () => {
const gmailPayload = { messages: [{ subject: "Hello" }] };
function expectSkippedTransformResult(result: Awaited<ReturnType<typeof applyHookMappings>>) {
expect(result?.ok).toBe(true);
if (result?.ok) {
@@ -15,6 +17,32 @@ describe("hooks mapping", () => {
}
}
function createGmailAgentMapping(params: {
id: string;
messageTemplate: string;
model?: string;
agentId?: string;
}) {
return {
id: params.id,
match: { path: "gmail" },
action: "agent" as const,
messageTemplate: params.messageTemplate,
...(params.model ? { model: params.model } : {}),
...(params.agentId ? { agentId: params.agentId } : {}),
};
}
async function applyGmailMappings(config: Parameters<typeof resolveHookMappings>[0]) {
const mappings = resolveHookMappings(config);
return applyHookMappings(mappings, {
payload: gmailPayload,
headers: {},
url: baseUrl,
path: "gmail",
});
}
async function applyNullTransformFromTempConfig(params: {
configDir: string;
transformsDir?: string;
@@ -55,22 +83,14 @@ describe("hooks mapping", () => {
});
it("renders template from payload", async () => {
const mappings = resolveHookMappings({
const result = await applyGmailMappings({
mappings: [
{
createGmailAgentMapping({
id: "demo",
match: { path: "gmail" },
action: "agent",
messageTemplate: "Subject: {{messages[0].subject}}",
},
}),
],
});
const result = await applyHookMappings(mappings, {
payload: { messages: [{ subject: "Hello" }] },
headers: {},
url: baseUrl,
path: "gmail",
});
expect(result?.ok).toBe(true);
if (result?.ok) {
expect(result.action.kind).toBe("agent");
@@ -79,23 +99,15 @@ describe("hooks mapping", () => {
});
it("passes model override from mapping", async () => {
const mappings = resolveHookMappings({
const result = await applyGmailMappings({
mappings: [
{
createGmailAgentMapping({
id: "demo",
match: { path: "gmail" },
action: "agent",
messageTemplate: "Subject: {{messages[0].subject}}",
model: "openai/gpt-4.1-mini",
},
}),
],
});
const result = await applyHookMappings(mappings, {
payload: { messages: [{ subject: "Hello" }] },
headers: {},
url: baseUrl,
path: "gmail",
});
expect(result?.ok).toBe(true);
if (result?.ok && result.action.kind === "agent") {
expect(result.action.model).toBe("openai/gpt-4.1-mini");
@@ -237,23 +249,15 @@ describe("hooks mapping", () => {
});
it("prefers explicit mappings over presets", async () => {
const mappings = resolveHookMappings({
const result = await applyGmailMappings({
presets: ["gmail"],
mappings: [
{
createGmailAgentMapping({
id: "override",
match: { path: "gmail" },
action: "agent",
messageTemplate: "Override subject: {{messages[0].subject}}",
},
}),
],
});
const result = await applyHookMappings(mappings, {
payload: { messages: [{ subject: "Hello" }] },
headers: {},
url: baseUrl,
path: "gmail",
});
expect(result?.ok).toBe(true);
if (result?.ok) {
expect(result.action.kind).toBe("agent");
@@ -262,23 +266,15 @@ describe("hooks mapping", () => {
});
it("passes agentId from mapping", async () => {
const mappings = resolveHookMappings({
const result = await applyGmailMappings({
mappings: [
{
createGmailAgentMapping({
id: "hooks-agent",
match: { path: "gmail" },
action: "agent",
messageTemplate: "Subject: {{messages[0].subject}}",
agentId: "hooks",
},
}),
],
});
const result = await applyHookMappings(mappings, {
payload: { messages: [{ subject: "Hello" }] },
headers: {},
url: baseUrl,
path: "gmail",
});
expect(result?.ok).toBe(true);
if (result?.ok && result.action?.kind === "agent") {
expect(result.action.agentId).toBe("hooks");
@@ -286,22 +282,14 @@ describe("hooks mapping", () => {
});
it("agentId is undefined when not set", async () => {
const mappings = resolveHookMappings({
const result = await applyGmailMappings({
mappings: [
{
createGmailAgentMapping({
id: "no-agent",
match: { path: "gmail" },
action: "agent",
messageTemplate: "Subject: {{messages[0].subject}}",
},
}),
],
});
const result = await applyHookMappings(mappings, {
payload: { messages: [{ subject: "Hello" }] },
headers: {},
url: baseUrl,
path: "gmail",
});
expect(result?.ok).toBe(true);
if (result?.ok && result.action?.kind === "agent") {
expect(result.action.agentId).toBeUndefined();