import { jest } from '@jest/globals';
import { handleListEvents } from '../../../src/tools/calendar/list';
import * as calendarService from '../../../src/services/calendar/events';
import { DEFAULTS } from '../../../src/config/constants';
import { CalendarResponse } from '../../../src/services/calendar/types';
// Mock the calendar service
jest.mock('../../../src/services/calendar/events');
describe('List Events Tool', () => {
const mockEvents: CalendarResponse = {
content: [
{ type: 'text', text: 'Test Event 1 at 2pm' },
{ type: 'text', text: 'Test Event 2 at 3pm' }
]
};
beforeEach(() => {
jest.resetAllMocks();
// Mock both the class method and the exported function
jest.spyOn(calendarService.CalendarService, 'listEvents')
.mockResolvedValue(mockEvents);
});
it('returns events with default parameters', async () => {
const result = await handleListEvents();
expect(calendarService.CalendarService.listEvents).toHaveBeenCalledWith({
maxResults: DEFAULTS.CALENDAR_MAX_RESULTS
});
expect(result).toEqual(mockEvents);
});
it('passes all parameters to service', async () => {
const params = {
maxResults: 10,
timeMin: '2024-01-27T00:00:00Z',
timeMax: '2024-02-27T00:00:00Z',
query: 'test',
timeZone: 'UTC'
};
const result = await handleListEvents(params);
expect(calendarService.CalendarService.listEvents).toHaveBeenCalledWith(params);
expect(result).toEqual(mockEvents);
});
it('handles service errors', async () => {
const error = new Error('API Error');
jest.spyOn(calendarService.CalendarService, 'listEvents')
.mockRejectedValue(error);
await expect(handleListEvents()).rejects.toThrow('API Error');
});
});