/** * Code snippet tools tests */ import { describe, test, expect, beforeEach, afterEach } from "bun:test"; import { registerCodeSnippetTools } from "../../../../src/tools/programming/codeSnippet.js"; import { callTool } from "../../../helpers/tool-helper.js"; import { createTempDir } from "../../../helpers/test-utils.js"; import { setupTestDatabase } from "../../../helpers/database-helper.js"; describe("Code Snippet Tools", () => { let testContext: ReturnType; let cleanupDb: () => void; beforeEach(() => { testContext = createTempDir(); cleanupDb = setupTestDatabase(testContext); registerCodeSnippetTools(); }); afterEach(() => { cleanupDb(); testContext.cleanup(); }); test("should save code snippet", async () => { const result = await callTool("code_snippet_save", { title: "Test Snippet", code: "const x = 1;", language: "typescript", tags: ["test"], }); expect(result.content[0].text).toContain("saved successfully"); expect(result.content[0].text).toContain("Test Snippet"); }); test("should search code snippets", async () => { // First save a snippet await callTool("code_snippet_save", { title: "Test Snippet", code: "const x = 1;", language: "typescript", tags: ["test"], }); // Then search const result = await callTool("code_snippet_search", { query: "Test", }); expect(result.content[0].text).toContain("Found"); expect(result.content[0].text).toContain("Test Snippet"); }); test("should list code snippets", async () => { // Save a snippet await callTool("code_snippet_save", { title: "Test Snippet", code: "const x = 1;", language: "typescript", tags: ["test"], }); const result = await callTool("code_snippet_list", {}); expect(result.content[0].text).toContain("Total"); expect(result.content[0].text).toContain("Test Snippet"); }); test("should delete code snippet", async () => { // Save a snippet const saveResult = await callTool("code_snippet_save", { title: "Test Snippet", code: "const x = 1;", language: "typescript", tags: ["test"], }); // Extract ID from save result const idMatch = saveResult.content[0].text.match(/ID: ([a-f0-9-]+)/); if (!idMatch) { throw new Error("Could not extract ID from save result"); } const id = idMatch[1]; // Delete it const result = await callTool("code_snippet_delete", { id }); expect(result.content[0].text).toContain("deleted successfully"); }); test("should handle search with no results", async () => { const result = await callTool("code_snippet_search", { query: "NonExistent", }); expect(result.content[0].text).toContain("No code snippets found"); }); });