Skip to main content
Glama
index.test.ts3.7 kB
import { HevyClient } from 'hevy-ts'; import { z } from 'zod'; jest.mock('hevy-ts'); const mockHevy = { getWorkouts: jest.fn().mockResolvedValue([{ id: 'w1' }]), getWorkoutById: jest.fn().mockResolvedValue({ id: 'w1', title: 'Test' }), createWorkout: jest.fn().mockResolvedValue({ id: 'w2', title: 'Created' }), updateWorkout: jest.fn().mockResolvedValue({ id: 'w1', title: 'Updated' }), getRoutineFolders: jest.fn().mockResolvedValue([{ id: 1, title: 'Folder' }]), getRoutineFolderById: jest.fn().mockResolvedValue({ id: 1, title: 'Folder' }), createRoutineFolder: jest.fn().mockResolvedValue({ id: 2, title: 'New Folder' }), getExerciseTemplates: jest.fn().mockResolvedValue([{ id: 'e1', title: 'Bench' }]), getExerciseTemplateById: jest.fn().mockResolvedValue({ id: 'e1', title: 'Bench' }), getWebhookSubscription: jest.fn().mockResolvedValue({ id: 'webhook1' }), createWebhookSubscription: jest.fn().mockResolvedValue({ id: 'webhook2' }), deleteWebhookSubscription: jest.fn().mockResolvedValue(undefined), }; (HevyClient as jest.Mock).mockImplementation(() => mockHevy); describe('Hevy MCP Tools', () => { it('getWorkouts returns workouts', async () => { const result = await mockHevy.getWorkouts(1, 10); expect(result).toEqual([{ id: 'w1' }]); }); it('getWorkoutById returns a workout', async () => { const result = await mockHevy.getWorkoutById('w1'); expect(result).toHaveProperty('id', 'w1'); }); it('createWorkout returns created workout', async () => { const input = { title: 't', description: 'd', start_time: '', end_time: '', is_private: false, exercises: [] }; const result = await mockHevy.createWorkout(input); expect(result).toHaveProperty('title', 'Created'); }); it('updateWorkout returns updated workout', async () => { const input = { title: 't', description: 'd', start_time: '', end_time: '', is_private: false, exercises: [] }; const result = await mockHevy.updateWorkout('w1', input); expect(result).toHaveProperty('title', 'Updated'); }); it('getRoutineFolders returns folders', async () => { const result = await mockHevy.getRoutineFolders(1, 10); expect(result[0]).toHaveProperty('title', 'Folder'); }); it('getRoutineFolderById returns a folder', async () => { const result = await mockHevy.getRoutineFolderById(1); expect(result).toHaveProperty('id', 1); }); it('createRoutineFolder returns new folder', async () => { const result = await mockHevy.createRoutineFolder({ title: 'New Folder' }); expect(result).toHaveProperty('title', 'New Folder'); }); it('getExerciseTemplates returns templates', async () => { const result = await mockHevy.getExerciseTemplates(1, 10); expect(result[0]).toHaveProperty('title', 'Bench'); }); it('getExerciseTemplateById returns a template', async () => { const result = await mockHevy.getExerciseTemplateById('e1'); expect(result).toHaveProperty('id', 'e1'); }); it('getWebhookSubscription returns webhook', async () => { const result = await mockHevy.getWebhookSubscription(); expect(result).toHaveProperty('id', 'webhook1'); }); it('createWebhookSubscription returns webhook', async () => { const result = await mockHevy.createWebhookSubscription({ authToken: 'a', url: 'u' }); expect(result).toHaveProperty('id', 'webhook2'); }); it('deleteWebhookSubscription resolves', async () => { await expect(mockHevy.deleteWebhookSubscription()).resolves.toBeUndefined(); }); });

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/jcjiron/hevy-mcp'

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