import { describe, it, expect, vi, beforeEach } from 'vitest'; import { GlitchtipErrorReportingService } from '../lib/services/errors/glitchtip-error-reporting-service'; // Mock the LoggerService const mockLogger = { child: vi.fn().mockReturnThis(), info: vi.fn(), error: vi.fn(), warn: vi.fn(), debug: vi.fn(), } as any; const mockSentryInit = vi.fn(); vi.mock('@sentry/nextjs', () => ({ init: (...args: any[]) => mockSentryInit(...args), captureException: vi.fn(), captureMessage: vi.fn(), })); describe('GlitchtipErrorReportingService', () => { beforeEach(() => { vi.clearAllMocks(); }); it('should ignore version drift errors (ChunkLoadError and Server Action) in Sentry config', async () => { // Simulate window to force client-side init behavior instantly const originalWindow = global.window; global.window = { requestIdleCallback: (cb: Function) => cb(), } as any; const service = new GlitchtipErrorReportingService({ enabled: true }, mockLogger); // Give the dynamic import a moment to resolve await new Promise((resolve) => setTimeout(resolve, 50)); expect(mockSentryInit).toHaveBeenCalledOnce(); const initCallArgs = mockSentryInit.mock.calls[0][0]; expect(initCallArgs.ignoreErrors).toBeDefined(); expect(initCallArgs.ignoreErrors).toContain('ChunkLoadError'); expect(initCallArgs.ignoreErrors).toContain('Failed to find Server Action'); global.window = originalWindow; }); });