Skip to main content
Glama

Stadia Maps Location API MCP Server

isochrone.test.ts3.89 kB
import { describe, it, expect } from "vitest"; import { isochrone, type IsochroneParams } from "./isochrone.js"; import { IsochroneCostingModel } from "@stadiamaps/api"; import { server } from "../test/setup.js"; import { http, HttpResponse } from "msw"; import { isochroneDistanceFixture } from "../test/fixtures/isochroneDistance.js"; import { isochroneEmptyFixture } from "../test/fixtures/isochroneEmpty.js"; describe("Isochrone Tools", () => { describe("isochrone", () => { it("should generate time-based isochrone contours", async () => { const params: IsochroneParams = { location: { lat: 37.7749, lon: -122.4194 }, // San Francisco costing: IsochroneCostingModel.Auto, contours: [{ time: 15 }, { time: 30 }], }; const result = await isochrone(params); expect(result).toBeDefined(); expect(result.content).toBeDefined(); expect(result.content[0]).toHaveProperty("type", "text"); expect(result.content[0].text).toContain("Isochrone Results:"); expect(result.content[0].text).toContain("Contour 15"); expect(result.content[0].text).toContain("Time: 15 minutes"); expect(result.content[0].text).toContain("Contour 30"); expect(result.content[0].text).toContain("Time: 30 minutes"); expect(result.content[0].text).toContain("GeoJSON Geometry:"); }); it("should generate distance-based isochrone contours", async () => { // Override the default handler for this test server.use( http.post("https://api.stadiamaps.com/isochrone/v1", () => { return HttpResponse.json(isochroneDistanceFixture); }), ); const params: IsochroneParams = { location: { lat: 37.7749, lon: -122.4194 }, costing: IsochroneCostingModel.Pedestrian, contours: [{ distance: 5 }], }; const result = await isochrone(params); expect(result).toBeDefined(); expect(result.content[0].text).toContain("Contour 5"); expect(result.content[0].text).toContain("Distance: 5 km"); }); it("should handle single contour", async () => { const params: IsochroneParams = { location: { lat: 37.7749, lon: -122.4194 }, costing: IsochroneCostingModel.Bicycle, contours: [{ time: 15 }], }; const result = await isochrone(params); expect(result).toBeDefined(); expect(result.content[0].text).toContain("Contour 15"); expect(result.content[0].text).toContain("Time: 15 minutes"); // From mock }); it("should handle empty results", async () => { // Override the default handler for this test server.use( http.post("https://api.stadiamaps.com/isochrone/v1", () => { return HttpResponse.json(isochroneEmptyFixture); }), ); const params: IsochroneParams = { location: { lat: 37.7749, lon: -122.4194 }, costing: IsochroneCostingModel.Auto, contours: [{ time: 15 }], }; const result = await isochrone(params); expect(result).toBeDefined(); expect(result.content[0].text).toBe("No isochrone results found."); }); 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/isochrone/v1", () => { return HttpResponse.json( { error: "Invalid request parameters" }, { status: 400 }, ); }), ); const params: IsochroneParams = { location: { lat: 37.7749, lon: -122.4194 }, costing: IsochroneCostingModel.Auto, contours: [{ time: 15 }], }; const result = await isochrone(params); expect(result).toBeDefined(); expect(result.content[0].text).toContain("Isochrone 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