test(api): cover assistant settings tools

This commit is contained in:
2026-03-31 23:54:48 +02:00
parent 6e4173eec3
commit 59e6d70206
4 changed files with 384 additions and 0 deletions
@@ -0,0 +1,112 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { DEFAULT_OPENAI_MODEL, SystemRole } from "@capakraken/shared";
import {
createToolContext,
executeTool,
generateGeminiImage,
testSmtpConnection,
} from "./assistant-tools-settings-test-helpers.js";
describe("assistant settings tools connection checks", () => {
beforeEach(() => {
vi.clearAllMocks();
});
afterEach(() => {
vi.unstubAllGlobals();
vi.unstubAllEnvs();
});
it("tests the AI connection through the real settings router path", async () => {
vi.stubEnv("OPENAI_API_KEY", "env-openai-key");
const fetch = vi.fn().mockResolvedValue({
ok: true,
text: vi.fn().mockResolvedValue("ok"),
});
vi.stubGlobal("fetch", fetch);
const ctx = createToolContext({
systemSettings: {
findUnique: vi.fn().mockResolvedValue({
aiProvider: "openai",
azureOpenAiDeployment: DEFAULT_OPENAI_MODEL,
azureOpenAiApiKey: null,
}),
},
});
const result = await executeTool("test_ai_connection", JSON.stringify({}), ctx);
expect(JSON.parse(result.content)).toEqual({ ok: true });
expect(fetch).toHaveBeenCalledWith(
"https://api.openai.com/v1/chat/completions",
expect.objectContaining({
headers: expect.objectContaining({
Authorization: "Bearer env-openai-key",
}),
}),
);
});
it("tests the SMTP connection through the real settings router path", async () => {
vi.mocked(testSmtpConnection).mockResolvedValue({ ok: true });
const ctx = createToolContext({});
const result = await executeTool("test_smtp_connection", JSON.stringify({}), ctx);
expect(JSON.parse(result.content)).toEqual({ ok: true });
expect(testSmtpConnection).toHaveBeenCalledTimes(1);
});
it("tests the Gemini connection through the real settings router path", async () => {
vi.mocked(generateGeminiImage).mockResolvedValue("data:image/png;base64,abc123");
const ctx = createToolContext({
systemSettings: {
findUnique: vi.fn().mockResolvedValue({
geminiApiKey: "gemini-key",
geminiModel: "gemini-2.5-flash-image",
}),
},
});
const result = await executeTool("test_gemini_connection", JSON.stringify({}), ctx);
const parsed = JSON.parse(result.content) as {
ok: boolean;
model: string;
preview: string;
};
expect(parsed.ok).toBe(true);
expect(parsed.model).toBe("gemini-2.5-flash-image");
expect(parsed.preview).toContain("data:image/png;base64,abc123");
expect(generateGeminiImage).toHaveBeenCalledWith(
"gemini-key",
"A simple blue circle on white background, minimal, 256x256",
"gemini-2.5-flash-image",
);
});
it("rejects admin-only connection tools for non-admin assistant users", async () => {
const ctx = createToolContext(
{
systemSettings: {
findUnique: vi.fn(),
},
},
SystemRole.MANAGER,
);
for (const toolName of [
"test_ai_connection",
"test_smtp_connection",
"test_gemini_connection",
] as const) {
const result = await executeTool(toolName, JSON.stringify({}), ctx);
expect(JSON.parse(result.content)).toEqual({
error: "You do not have permission to perform this action.",
});
}
});
});