Skip to main content
Glama

Intervals.icu MCP Server

by mvilanova
test_server.py5.74 kB
""" Unit tests for the main MCP server tool functions in intervals_mcp_server.server. These tests use monkeypatching to mock API responses and verify the formatting and output of each tool function: - get_activities - get_activity_details - get_events - get_event_by_id - get_wellness_data - get_activity_intervals The tests ensure that the server's public API returns expected strings and handles data correctly. """ import asyncio import os import pathlib import sys sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "src")) os.environ.setdefault("API_KEY", "test") os.environ.setdefault("ATHLETE_ID", "i1") from intervals_mcp_server.server import ( # pylint: disable=wrong-import-position get_activities, get_activity_details, get_events, get_event_by_id, get_wellness_data, get_activity_intervals, add_or_update_event, ) from tests.sample_data import INTERVALS_DATA # pylint: disable=wrong-import-position def test_get_activities(monkeypatch): """ Test get_activities returns a formatted string containing activity details when given a sample activity. """ sample = { "name": "Morning Ride", "id": 123, "type": "Ride", "startTime": "2024-01-01T08:00:00Z", "distance": 1000, "duration": 3600, } async def fake_request(*_args, **_kwargs): return [sample] monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_activities(athlete_id="1", limit=1, include_unnamed=True)) assert "Morning Ride" in result assert "Activities:" in result def test_get_activity_details(monkeypatch): """ Test get_activity_details returns a formatted string with the activity name and details. """ sample = { "name": "Morning Ride", "id": 123, "type": "Ride", "startTime": "2024-01-01T08:00:00Z", "distance": 1000, "duration": 3600, } async def fake_request(*_args, **_kwargs): return sample monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_activity_details(123)) assert "Activity: Morning Ride" in result def test_get_events(monkeypatch): """ Test get_events returns a formatted string containing event details when given a sample event. """ event = { "date": "2024-01-01", "id": "e1", "name": "Test Event", "description": "desc", "race": True, } async def fake_request(*_args, **_kwargs): return [event] monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_events(athlete_id="1", start_date="2024-01-01", end_date="2024-01-02")) assert "Test Event" in result assert "Events:" in result def test_get_event_by_id(monkeypatch): """ Test get_event_by_id returns a formatted string with event details for a given event ID. """ event = { "id": "e1", "date": "2024-01-01", "name": "Test Event", "description": "desc", "race": True, } async def fake_request(*_args, **_kwargs): return event monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_event_by_id("e1", athlete_id="1")) assert "Event Details:" in result assert "Test Event" in result def test_get_wellness_data(monkeypatch): """ Test get_wellness_data returns a formatted string containing wellness data for a given athlete. """ wellness = { "2024-01-01": { "id": "2024-01-01", "ctl": 75, "sleepSecs": 28800, } } async def fake_request(*_args, **_kwargs): return wellness monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_wellness_data(athlete_id="1")) assert "Wellness Data:" in result assert "2024-01-01" in result def test_get_activity_intervals(monkeypatch): """ Test get_activity_intervals returns a formatted string with interval analysis for a given activity. """ async def fake_request(*_args, **_kwargs): return INTERVALS_DATA monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_request) result = asyncio.run(get_activity_intervals("123")) assert "Intervals Analysis:" in result assert "Rep 1" in result def test_add_or_update_event(monkeypatch): """ Test add_or_update_event successfully posts an event and returns the response data. """ expected_response = { "id": "e123", "start_date_local": "2024-01-15T00:00:00", "category": "WORKOUT", "name": "Test Workout", "type": "Ride", } sample_data = { "steps": [ {"duration": "15m", "target": "80%", "description": "Warm-up"}, {"duration": "3m", "target": "110%", "description": "High-intensity interval"}, {"duration": "3m", "target": "80%", "description": "Recovery"}, {"duration": "10m", "target": "80%", "description": "Cool-down"}, ] } async def fake_post_request(*_args, **_kwargs): return expected_response monkeypatch.setattr("intervals_mcp_server.server.make_intervals_request", fake_post_request) result = asyncio.run( add_or_update_event(athlete_id="i1", start_date="2024-01-15", name="Test Workout", workout_type="Ride") ) assert "Successfully created event:" in result assert '"id": "e123"' in result assert '"name": "Test Workout"' in result

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/mvilanova/intervals-mcp-server'

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