import '@testing-library/jest-dom' // Mock environment variables for testing process.env.REDIS_URL = 'redis://localhost:6379' process.env.GEMINI_API_KEY = 'test-api-key' // Mock Next.js Request and Response for API route testing global.Request = class MockRequest { constructor(url, options = {}) { Object.defineProperty(this, 'url', { value: url, writable: false, configurable: true }); this.method = options.method || 'GET'; this.body = options.body; this.headers = new Map(Object.entries(options.headers || {})); } json() { return Promise.resolve(JSON.parse(this.body || '{}')); } text() { return Promise.resolve(this.body || ''); } } global.Response = class MockResponse { constructor(body, options = {}) { this.body = body; this.status = options.status || 200; this.headers = new Map(Object.entries(options.headers || {})); } json() { return Promise.resolve(typeof this.body === 'string' ? JSON.parse(this.body) : this.body); } text() { return Promise.resolve(typeof this.body === 'string' ? this.body : JSON.stringify(this.body)); } } // Mock NextResponse for API route testing jest.mock('next/server', () => ({ NextRequest: global.Request, NextResponse: { json: jest.fn((data, options = {}) => { return new global.Response(JSON.stringify(data), { status: options.status || 200, headers: options.headers || {} }); }) } })); // Mock PDF.js and Tesseract.js for testing jest.mock('pdfjs-dist', () => ({ GlobalWorkerOptions: { workerSrc: 'test-worker-src' }, getDocument: jest.fn().mockResolvedValue({ numPages: 1, getPage: jest.fn().mockResolvedValue({ getTextContent: jest.fn().mockResolvedValue({ items: [{ str: 'Test PDF content' }] }) }) }) })) jest.mock('tesseract.js', () => ({ recognize: jest.fn().mockResolvedValue({ data: { text: 'Test OCR content' } }) })) // Mock Google Generative AI jest.mock('@google/generative-ai', () => ({ GoogleGenerativeAI: jest.fn().mockImplementation(() => ({ getGenerativeModel: jest.fn().mockReturnValue({ embedContent: jest.fn().mockResolvedValue({ embedding: { values: new Array(768).fill(0.1) } }), generateContent: jest.fn().mockResolvedValue({ response: { text: () => 'Test AI response' } }), startChat: jest.fn().mockReturnValue({ sendMessage: jest.fn().mockResolvedValue({ response: { text: () => 'Test chat response' } }) }) }) })) }))