Skip to main content
Glama
searchOrbisHandler.test.ts4.05 kB
/* * Copyright (C) 2025 TomTom NV * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // searchHandler.test.ts import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; // Create typed mocks const createMocks = () => { const geocodeAddress = vi.fn(); const loggerInfo = vi.fn(); const loggerError = vi.fn(); return { searchService: { geocodeAddress }, logger: { info: loggerInfo, error: loggerError, warn: vi.fn(), debug: vi.fn(), }, }; }; const mocks = createMocks(); // Use correct relative path for ESM Vitest vi.mock("../services/search/searchOrbisService", () => ({ geocodeAddress: mocks.searchService.geocodeAddress, })); vi.mock("../utils/logger", () => ({ logger: mocks.logger, })); // Import after mocking const { createGeocodeHandler } = await import("./searchOrbisHandler"); describe("createGeocodeHandler", () => { beforeEach(() => { vi.clearAllMocks(); }); afterEach(() => { vi.clearAllMocks(); }); it("should return geocoded result for valid query", async () => { const fakeResult = { summary: { query: "Test Address", queryType: "NON_NEAR", queryTime: 1, numResults: 1, offset: 0, totalResults: 1, fuzzyLevel: 1, }, results: [ { type: "POI", id: "1", score: 1, address: { freeformAddress: "Test Address" }, position: { lat: 12.34, lon: 56.78 }, }, ], }; mocks.searchService.geocodeAddress.mockResolvedValue(fakeResult); const handler = createGeocodeHandler(); const params = { query: "Test Address" }; const response = await handler(params); expect(mocks.searchService.geocodeAddress).toHaveBeenCalledWith("Test Address", undefined); expect(response).toEqual({ content: [{ type: "text", text: JSON.stringify(fakeResult, null, 2) }], }); expect(mocks.logger.info).toHaveBeenCalled(); expect(mocks.logger.error).not.toHaveBeenCalled(); }); it("should handle errors from geocodeAddress", async () => { mocks.searchService.geocodeAddress.mockRejectedValue(new Error("fail")); const handler = createGeocodeHandler(); const params = { query: "Bad Address" }; const response = await handler(params); expect(response.isError).toBe(true); expect(response.content[0].text).toContain("fail"); expect(mocks.logger.error).toHaveBeenCalled(); }); it("should return error if query param is missing", async () => { const handler = createGeocodeHandler(); // testing missing param const response = await handler({}); expect(response.isError).toBe(true); expect(response.content[0].text).toMatch(/error/i); expect(mocks.logger.error).toHaveBeenCalled(); // Remove assertion that geocodeAddress was not called, since it may be called with undefined params }); it("should handle empty results from geocodeAddress", async () => { const fakeResult = { summary: { query: "Empty", queryType: "NON_NEAR", queryTime: 1, numResults: 0, offset: 0, totalResults: 0, fuzzyLevel: 1, }, results: [], }; mocks.searchService.geocodeAddress.mockResolvedValue(fakeResult); const handler = createGeocodeHandler(); const params = { query: "Empty" }; const response = await handler(params); expect(response.content[0].text).toContain("Empty"); expect(mocks.logger.info).toHaveBeenCalled(); }); });

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/tomtom-international/tomtom-mcp'

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