Skip to main content
Glama
contact-tools-simple.test.ts6.65 kB
/** * Simplified Contact tools integration tests */ import { registerSendMessageTool } from "../tools/send-message"; import { registerGetAnalyticsTool } from "../tools/contact-analytics"; import { registerHireMeTool } from "../tools/hire-me"; // Mock Octokit for GitHub Activity tool const mockListPublicEventsForUser = jest.fn(); jest.mock("@octokit/rest", () => ({ Octokit: jest.fn().mockImplementation(() => ({ rest: { activity: { listPublicEventsForUser: mockListPublicEventsForUser, }, }, })), })); import { registerGitHubActivityTool } from "../tools/github-activity"; // Mock database operations with proper promise handling const mockDbOperations = { select: jest.fn().mockReturnThis(), from: jest.fn().mockReturnThis(), where: jest.fn().mockReturnThis(), insert: jest.fn().mockReturnThis(), values: jest.fn().mockReturnThis(), returning: jest.fn().mockReturnThis(), groupBy: jest.fn().mockReturnThis(), orderBy: jest.fn().mockReturnThis(), limit: jest.fn().mockReturnThis(), offset: jest.fn().mockReturnThis(), execute: jest.fn(), }; jest.mock("../database", () => ({ getDb: jest.fn(() => mockDbOperations), })); // Mock MCP server const createMockServer = () => ({ tool: jest.fn(), registerTool: jest.fn(), }); beforeEach(() => { jest.clearAllMocks(); // Reset execute mock to return resolved promise by default mockDbOperations.execute.mockResolvedValue([]); // Reset GitHub API mock mockListPublicEventsForUser.mockResolvedValue({ data: [] }); }); describe("Contact Tools Registration", () => { describe("Send Message Tool", () => { test("should register send_message tool successfully", () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; registerSendMessageTool(mockServer as any, mockEnv); expect(mockServer.registerTool).toHaveBeenCalledWith( "send_message", expect.any(Object), expect.any(Function), ); }); }); describe("Contact Analytics Tool", () => { test("should register contact analytics tool successfully", () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; registerGetAnalyticsTool(mockServer as any, mockEnv); expect(mockServer.registerTool).toHaveBeenCalledWith( "get_analytics", expect.any(Object), expect.any(Function), ); }); }); describe("Hire Me Tool", () => { test("should register hire_me tool successfully", () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; registerHireMeTool(mockServer as any, mockEnv); expect(mockServer.registerTool).toHaveBeenCalledWith( "hire_me", expect.any(Object), expect.any(Function), ); }); test("should handle hire_me tool execution with database save", async () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; let toolHandler: any; mockServer.registerTool.mockImplementation( (name: string, _config: any, handler: any) => { if (name === "hire_me") { toolHandler = handler; } }, ); // Mock successful database insert mockDbOperations.values.mockResolvedValue(undefined); registerHireMeTool(mockServer as any, mockEnv); const result = await toolHandler({ role_type: "full_time", tech_stack: "clickhouse, rust, python", company_size: "startup", contact_email: "test@example.com", additional_notes: "Looking for senior role", }); expect(result.content).toBeDefined(); expect(result.content[0].text).toContain("Hire Duyet - Senior Data Engineer"); expect(result.content[0].text).toContain("Inquiry Reference ID:"); expect(mockDbOperations.insert).toHaveBeenCalled(); expect(mockDbOperations.values).toHaveBeenCalledWith( expect.objectContaining({ purpose: "hire_me", roleType: "full_time", techStack: "clickhouse, rust, python", companySize: "startup", contactEmail: "test@example.com", }), ); }); test("should handle hire_me tool execution without database save when no optional data", async () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; let toolHandler: any; mockServer.registerTool.mockImplementation( (name: string, _config: any, handler: any) => { if (name === "hire_me") { toolHandler = handler; } }, ); registerHireMeTool(mockServer as any, mockEnv); const result = await toolHandler({}); expect(result.content).toBeDefined(); expect(result.content[0].text).toContain("Hire Duyet - Senior Data Engineer"); expect(result.content[0].text).not.toContain("Inquiry Reference ID:"); expect(mockDbOperations.insert).not.toHaveBeenCalled(); }); test("should handle database error gracefully", async () => { const mockServer = createMockServer(); const mockEnv = { DB: {} as D1Database, MCP_OBJECT: {} as DurableObjectNamespace, ANALYTICS: {} as AnalyticsEngineDataset, } as unknown as Env; let toolHandler: any; mockServer.registerTool.mockImplementation( (name: string, _config: any, handler: any) => { if (name === "hire_me") { toolHandler = handler; } }, ); // Mock database error mockDbOperations.values.mockRejectedValue(new Error("Database error")); registerHireMeTool(mockServer as any, mockEnv); const result = await toolHandler({ contact_email: "test@example.com", additional_notes: "Test inquiry", }); expect(result.content).toBeDefined(); expect(result.content[0].text).toContain("Hire Duyet - Senior Data Engineer"); expect(result.content[0].text).not.toContain("Inquiry Reference ID:"); }); }); describe("GitHub Activity Tool", () => { test("should register github_activity tool successfully", () => { const mockServer = createMockServer(); registerGitHubActivityTool(mockServer as any); expect(mockServer.registerTool).toHaveBeenCalledWith( "github_activity", expect.any(Object), expect.any(Function), ); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/duyet/duyet-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server