mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 19:38:28 +00:00
refactor(channels): dedupe transport and gateway test scaffolds
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user