Skip to main content
Glama

Stadia Maps Location API MCP Server

routing.test.ts3.63 kB
import { describe, it, expect } from "vitest"; import { routeOverview, type RouteOverviewParams } from "./routing.js"; import { CostingModel, DistanceUnit } from "@stadiamaps/api"; import { server } from "../test/setup.js"; import { http, HttpResponse } from "msw"; import { routeErrorFixture } from "../test/fixtures/routeError.js"; describe("Routing Tools", () => { describe("routeOverview", () => { it("should calculate a route between two points", async () => { const params: RouteOverviewParams = { locations: [ { lat: 37.7749, lon: -122.4194 }, // San Francisco { lat: 37.7849, lon: -122.4094 }, // Nearby point ], costing: CostingModel.Auto, units: DistanceUnit.Km, }; const result = await routeOverview(params); expect(result).toBeDefined(); expect(result.content).toBeDefined(); expect(result.content[0]).toHaveProperty("type", "text"); // @ts-ignore const json_value = JSON.parse(result.content[0].text); expect(json_value.distance).toBeDefined(); expect(json_value.time).toBeDefined(); expect(json_value.bbox_w_s_n_e).toBeDefined(); expect(json_value.polyline6).toBeDefined(); }); it("should format travel time correctly for short durations", async () => { // This test assumes the mock returns 1200 seconds (20 minutes) const params: RouteOverviewParams = { locations: [ { lat: 37.7749, lon: -122.4194 }, { lat: 37.7849, lon: -122.4094 }, ], costing: CostingModel.Auto, units: DistanceUnit.Km, }; const result = await routeOverview(params); expect(result.content[0].text).toContain("less than a minute"); }); it("should include bounding box information", async () => { const params: RouteOverviewParams = { locations: [ { lat: 37.7749, lon: -122.4194 }, { lat: 37.7849, lon: -122.4094 }, ], costing: CostingModel.Auto, units: DistanceUnit.Km, }; const result = await routeOverview(params); // @ts-ignore expect(JSON.parse(result.content[0].text).bbox_w_s_n_e).toEqual([ -149.54858, 60.534715, -149.543469, 60.535008, ]); }); it("should include encoded polyline", async () => { const params: RouteOverviewParams = { locations: [ { lat: 37.7749, lon: -122.4194 }, { lat: 37.7849, lon: -122.4094 }, ], costing: CostingModel.Auto, units: DistanceUnit.Km, }; const result = await routeOverview(params); // @ts-ignore expect(JSON.parse(result.content[0].text).polyline6).toEqual( "wzvmrBxalf|GcCrX}A|Nu@jI}@pMkBtZ{@x^_Afj@Inn@`@veB", ); }); }); describe("Error handling", () => { it("should handle API errors gracefully", async () => { // Override the default handler for this test to return an error server.use( http.post("https://api.stadiamaps.com/route/v1", () => { return HttpResponse.json(routeErrorFixture, { status: 400 }); }), ); const params: RouteOverviewParams = { locations: [ { lat: 37.7749, lon: -122.4194 }, { lat: 37.7849, lon: -122.4094 }, ], costing: CostingModel.Auto, units: DistanceUnit.Km, }; const result = await routeOverview(params); expect(result).toBeDefined(); expect(result.content[0]).toHaveProperty("type", "text"); expect(result.content[0].text).toContain("Route calculation failed:"); }); }); });

Latest Blog Posts

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/stadiamaps/stadiamaps-mcp-server-ts'

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