// This file runs before any modules are loaded // Mock axios first since couchdbService uses it jest.mock('axios', () => ({ create: jest.fn(() => ({ get: jest.fn().mockResolvedValue({ data: {} }), put: jest.fn().mockResolvedValue({ data: { ok: true } }), post: jest.fn().mockResolvedValue({ data: { ok: true } }), delete: jest.fn().mockResolvedValue({ data: { ok: true } }), })), get: jest.fn().mockResolvedValue({ data: {} }), put: jest.fn().mockResolvedValue({ data: { ok: true } }), post: jest.fn().mockResolvedValue({ data: { ok: true } }), delete: jest.fn().mockResolvedValue({ data: { ok: true } }), })); // Mock CouchDB service at the module level to prevent real service from loading jest.mock('../services/couchdbService', () => ({ initialize: jest.fn().mockResolvedValue(true), isReady: jest.fn().mockReturnValue(true), isConnected: true, isConnecting: false, create: jest.fn(), getById: jest.fn(), get: jest.fn(), find: jest.fn(), destroy: jest.fn(), delete: jest.fn(), createDocument: jest.fn().mockImplementation((doc) => Promise.resolve({ _id: `test_${Date.now()}`, _rev: '1-test', ...doc })), updateDocument: jest.fn().mockImplementation((doc) => Promise.resolve({ ...doc, _rev: '2-test' })), deleteDocument: jest.fn().mockResolvedValue(true), findByType: jest.fn().mockResolvedValue([]), findUserById: jest.fn(), findUserByEmail: jest.fn(), update: jest.fn(), updateUserPoints: jest.fn().mockResolvedValue(true), getDocument: jest.fn(), findDocumentById: jest.fn(), bulkDocs: jest.fn().mockResolvedValue([{ ok: true, id: 'test', rev: '1-test' }]), insertMany: jest.fn().mockResolvedValue([]), deleteMany: jest.fn().mockResolvedValue(true), findStreetsByLocation: jest.fn().mockResolvedValue([]), generateId: jest.fn().mockImplementation((type, id) => `${type}_${id}`), extractOriginalId: jest.fn().mockImplementation((prefixedId) => prefixedId.split('_').slice(1).join('_')), validateDocument: jest.fn().mockReturnValue([]), getDB: jest.fn().mockReturnValue({}), shutdown: jest.fn().mockResolvedValue(true), }), { virtual: true }); // Mock Cloudinary jest.mock('cloudinary', () => ({ v2: { config: jest.fn(), uploader: { upload: jest.fn().mockResolvedValue({ secure_url: 'https://cloudinary.com/test/image.jpg', public_id: 'test_public_id', width: 500, height: 500, format: 'jpg' }), destroy: jest.fn().mockResolvedValue({ result: 'ok' }) } } }));