import axios from 'axios'; import { HostexApiClient } from '../client/index.js'; jest.mock('axios'); const mockedAxios = axios as jest.Mocked; describe('HostexApiClient.updateWebhook', () => { let client: HostexApiClient; beforeEach(() => { const mockInstance = { request: jest.fn(), post: jest.fn(), patch: jest.fn(), interceptors: { request: { use: jest.fn() }, response: { use: jest.fn() }, }, }; mockedAxios.create.mockReturnValue(mockInstance as any); client = new HostexApiClient({ accessToken: 'test-token' }); }); it('sends PATCH /webhooks/:id with url and events', async () => { const mockInstance = mockedAxios.create.mock.results[0].value; mockInstance.patch.mockResolvedValue({ data: { error_code: 200, message: 'success' }, }); await client.updateWebhook({ id: '123', url: 'https://example.com/hook', events: ['reservation_created', 'reservation_updated'], }); expect(mockInstance.patch).toHaveBeenCalledWith('/webhooks/123', { url: 'https://example.com/hook', events: ['reservation_created', 'reservation_updated'], }); }); it('throws when id is missing', async () => { await expect(client.updateWebhook({ id: '' })).rejects.toThrow(); }); it('validates url format when provided', async () => { await expect( client.updateWebhook({ id: '123', url: 'not-a-url' }) ).rejects.toThrow(); }); });