import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
// Track registered tools
const registeredTools: string[] = [];
// Mock MCP Server
const mockServer = {
tool: vi.fn((name: string) => {
registeredTools.push(name);
}),
};
// Mock BirstClient
const mockClient = {
rest: vi.fn(),
genai: vi.fn(),
icw: vi.fn(),
getEnvironment: vi.fn().mockReturnValue("TST"),
setEnvironment: vi.fn(),
};
describe("Query Tools Registration", () => {
const originalEnv = process.env;
beforeEach(() => {
vi.clearAllMocks();
registeredTools.length = 0;
process.env = { ...originalEnv };
vi.resetModules();
});
afterEach(() => {
process.env = originalEnv;
});
describe("with all features disabled (default)", () => {
it("should not register any query tools", async () => {
delete process.env.BIRST_ENABLE_GENAI;
delete process.env.BIRST_ENABLE_ICW;
const { registerQueryTools } = await import(
"../../src/tools/query/index.js"
);
registerQueryTools(mockServer as never, mockClient as never);
// No tools should be registered when both flags are disabled
expect(registeredTools).toHaveLength(0);
});
});
describe("with GenAI enabled", () => {
it("should register GenAI tools only", async () => {
process.env.BIRST_ENABLE_GENAI = "true";
delete process.env.BIRST_ENABLE_ICW;
const { registerQueryTools } = await import(
"../../src/tools/query/index.js"
);
registerQueryTools(mockServer as never, mockClient as never);
expect(registeredTools).toContain("birst_generate_bql");
expect(registeredTools).toContain("birst_search_data");
expect(registeredTools).toContain("birst_generate_chart");
expect(registeredTools).not.toContain("birst_execute_query");
expect(registeredTools).not.toContain("birst_validate_query");
});
});
describe("with ICW enabled", () => {
it("should register ICW tools only", async () => {
delete process.env.BIRST_ENABLE_GENAI;
process.env.BIRST_ENABLE_ICW = "true";
const { registerQueryTools } = await import(
"../../src/tools/query/index.js"
);
registerQueryTools(mockServer as never, mockClient as never);
expect(registeredTools).not.toContain("birst_generate_bql");
expect(registeredTools).not.toContain("birst_search_data");
expect(registeredTools).not.toContain("birst_generate_chart");
expect(registeredTools).toContain("birst_execute_query");
expect(registeredTools).toContain("birst_validate_query");
});
});
describe("with both features enabled", () => {
it("should register all query tools", async () => {
process.env.BIRST_ENABLE_GENAI = "true";
process.env.BIRST_ENABLE_ICW = "true";
const { registerQueryTools } = await import(
"../../src/tools/query/index.js"
);
registerQueryTools(mockServer as never, mockClient as never);
expect(registeredTools).toContain("birst_generate_bql");
expect(registeredTools).toContain("birst_search_data");
expect(registeredTools).toContain("birst_generate_chart");
expect(registeredTools).toContain("birst_execute_query");
expect(registeredTools).toContain("birst_validate_query");
expect(registeredTools).toHaveLength(5);
});
});
});