feat(agent): localize generated agent workflow
This commit is contained in:
@@ -22,6 +22,31 @@ vi.mock("@xyflow/react", () => ({
|
||||
Position: { Left: "left", Right: "right" },
|
||||
}));
|
||||
|
||||
const translations: Record<string, string> = {
|
||||
"agentOutputNode.defaultTitle": "Agent output",
|
||||
"agentOutputNode.plannedOutputDefaultTitle": "Planned output",
|
||||
"agentOutputNode.skeletonBadge": "Skeleton",
|
||||
"agentOutputNode.plannedOutputLabel": "Planned output",
|
||||
"agentOutputNode.channelLabel": "Channel",
|
||||
"agentOutputNode.typeLabel": "Type",
|
||||
"agentOutputNode.bodyLabel": "Body",
|
||||
"agentOutputNode.plannedContent": "Planned content",
|
||||
};
|
||||
|
||||
vi.mock("next-intl", () => ({
|
||||
useTranslations: (namespace?: string) =>
|
||||
(key: string, values?: Record<string, unknown>) => {
|
||||
const fullKey = namespace ? `${namespace}.${key}` : key;
|
||||
let text = translations[fullKey] ?? key;
|
||||
if (values) {
|
||||
for (const [name, value] of Object.entries(values)) {
|
||||
text = text.replaceAll(`{${name}}`, String(value));
|
||||
}
|
||||
}
|
||||
return text;
|
||||
},
|
||||
}));
|
||||
|
||||
import AgentOutputNode from "@/components/canvas/nodes/agent-output-node";
|
||||
|
||||
(globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
|
||||
@@ -79,6 +104,45 @@ describe("AgentOutputNode", () => {
|
||||
expect(container.textContent).toContain("instagram-feed");
|
||||
expect(container.textContent).toContain("caption");
|
||||
expect(container.textContent).toContain("A short punchy caption with hashtags");
|
||||
expect(container.querySelector('[data-testid="agent-output-meta-strip"]')).not.toBeNull();
|
||||
expect(container.querySelector('[data-testid="agent-output-text-body"]')).not.toBeNull();
|
||||
});
|
||||
|
||||
it("renders parseable json body in a pretty-printed code block", async () => {
|
||||
container = document.createElement("div");
|
||||
document.body.appendChild(container);
|
||||
root = createRoot(container);
|
||||
|
||||
await act(async () => {
|
||||
root?.render(
|
||||
React.createElement(AgentOutputNode, {
|
||||
id: "agent-output-4",
|
||||
selected: false,
|
||||
dragging: false,
|
||||
draggable: true,
|
||||
selectable: true,
|
||||
deletable: true,
|
||||
zIndex: 1,
|
||||
isConnectable: true,
|
||||
type: "agent-output",
|
||||
data: {
|
||||
title: "JSON output",
|
||||
channel: "api",
|
||||
outputType: "payload",
|
||||
body: '{"post":"Hello","tags":["launch","news"]}',
|
||||
_status: "done",
|
||||
} as Record<string, unknown>,
|
||||
positionAbsoluteX: 0,
|
||||
positionAbsoluteY: 0,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
const jsonBody = container.querySelector('[data-testid="agent-output-json-body"]');
|
||||
expect(jsonBody).not.toBeNull();
|
||||
expect(jsonBody?.textContent).toContain('"post": "Hello"');
|
||||
expect(jsonBody?.textContent).toContain('"tags": [');
|
||||
expect(container.querySelector('[data-testid="agent-output-text-body"]')).toBeNull();
|
||||
});
|
||||
|
||||
it("renders input-only handle agent-output-in", async () => {
|
||||
|
||||
Reference in New Issue
Block a user