module.exports = { agents: () => ({ sleep: jest.fn() }), api: (overrides = {}) => ({ isEnabled: jest.fn(), createAxiosInstance: jest.fn(() => ({ get: jest.fn(), post: jest.fn(), put: jest.fn(), delete: jest.fn(), })), logAxiosError: jest.fn(), ...overrides, }), dataSchemas: () => ({ logger: { debug: jest.fn(), info: jest.fn(), warn: jest.fn(), error: jest.fn(), }, createModels: jest.fn(() => ({ User: {}, Conversation: {}, Message: {}, SharedLink: {}, })), }), dataProvider: (overrides = {}) => ({ CacheKeys: { GEN_TITLE: 'GEN_TITLE' }, EModelEndpoint: { azureAssistants: 'azureAssistants', assistants: 'assistants', }, ...overrides, }), conversationModel: () => ({ getConvosByCursor: jest.fn(), getConvo: jest.fn(), deleteConvos: jest.fn(), saveConvo: jest.fn(), }), toolCallModel: () => ({ deleteToolCalls: jest.fn() }), sharedModels: () => ({ deleteAllSharedLinks: jest.fn(), deleteConvoSharedLink: jest.fn(), }), requireJwtAuth: () => (req, res, next) => next(), middlewarePassthrough: () => ({ createImportLimiters: jest.fn(() => ({ importIpLimiter: (req, res, next) => next(), importUserLimiter: (req, res, next) => next(), })), createForkLimiters: jest.fn(() => ({ forkIpLimiter: (req, res, next) => next(), forkUserLimiter: (req, res, next) => next(), })), configMiddleware: (req, res, next) => next(), validateConvoAccess: (req, res, next) => next(), }), forkUtils: () => ({ forkConversation: jest.fn(), duplicateConversation: jest.fn(), }), importUtils: () => ({ importConversations: jest.fn() }), logStores: () => jest.fn(), multerSetup: () => ({ storage: {}, importFileFilter: jest.fn(), }), multerLib: () => jest.fn(() => ({ single: jest.fn(() => (req, res, next) => { req.file = { path: '/tmp/test-file.json' }; next(); }), })), assistantEndpoint: () => ({ initializeClient: jest.fn() }), };