import { describe, it, expect, vi, beforeEach } from 'vitest'; vi.mock('@sentry/sveltekit', () => ({ init: vi.fn(), handleErrorWithSentry: (fn: (args: unknown) => unknown) => fn, lastEventId: vi.fn(() => 'sentry-event-id-abc123') })); describe('hooks.client handleError', () => { beforeEach(() => { vi.resetModules(); }); it('returns Sentry lastEventId as errorId', async () => { const Sentry = await import('@sentry/sveltekit'); vi.mocked(Sentry.lastEventId).mockReturnValue('sentry-event-id-abc123'); const { handleError } = await import('./hooks.client'); const result = (handleError as (args: unknown) => { message: string; errorId: string })({ error: new Error('boom'), event: {}, status: 500, message: 'Internal Error' }); expect(result.errorId).toBe('sentry-event-id-abc123'); expect(result.message).toBe('An unexpected error occurred'); }); it('falls back to crypto.randomUUID when lastEventId returns undefined', async () => { const Sentry = await import('@sentry/sveltekit'); vi.mocked(Sentry.lastEventId).mockReturnValue(undefined); const { handleError } = await import('./hooks.client'); const result = (handleError as (args: unknown) => { message: string; errorId: string })({ error: new Error('boom'), event: {}, status: 500, message: 'Internal Error' }); expect(result.errorId).toMatch( /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/ ); expect(result.message).toBe('An unexpected error occurred'); }); });