openclaw/src/agents/openclaw-tools.image-genera...

91 lines
2.4 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../config/config.js";
import * as imageGenerationRuntime from "../image-generation/runtime.js";
import { createOpenClawTools } from "./openclaw-tools.js";
vi.mock("../plugins/tools.js", () => ({
resolvePluginTools: () => [],
}));
function asConfig(value: unknown): OpenClawConfig {
return value as OpenClawConfig;
}
function stubImageGenerationProviders() {
vi.spyOn(imageGenerationRuntime, "listRuntimeImageGenerationProviders").mockReturnValue([
{
id: "openai",
defaultModel: "gpt-image-1",
models: ["gpt-image-1"],
capabilities: {
generate: {
supportsSize: true,
},
edit: {
enabled: false,
},
geometry: {
sizes: ["1024x1024"],
},
},
generateImage: vi.fn(async () => {
throw new Error("not used");
}),
},
]);
}
describe("openclaw tools image generation registration", () => {
beforeEach(() => {
vi.stubEnv("OPENAI_API_KEY", "");
vi.stubEnv("OPENAI_API_KEYS", "");
vi.stubEnv("GEMINI_API_KEY", "");
vi.stubEnv("GEMINI_API_KEYS", "");
});
afterEach(() => {
vi.restoreAllMocks();
vi.unstubAllEnvs();
});
it("registers image_generate when image-generation config is present", () => {
const tools = createOpenClawTools({
config: asConfig({
agents: {
defaults: {
imageGenerationModel: {
primary: "openai/gpt-image-1",
},
},
},
}),
agentDir: "/tmp/openclaw-agent-main",
});
expect(tools.map((tool) => tool.name)).toContain("image_generate");
});
it("registers image_generate when a compatible provider has env-backed auth", () => {
stubImageGenerationProviders();
vi.stubEnv("OPENAI_API_KEY", "openai-test");
const tools = createOpenClawTools({
config: asConfig({}),
agentDir: "/tmp/openclaw-agent-main",
});
expect(tools.map((tool) => tool.name)).toContain("image_generate");
});
it("omits image_generate when config is absent and no compatible provider auth exists", () => {
stubImageGenerationProviders();
const tools = createOpenClawTools({
config: asConfig({}),
agentDir: "/tmp/openclaw-agent-main",
});
expect(tools.map((tool) => tool.name)).not.toContain("image_generate");
});
});