import { beforeEach, vi } from 'vitest' /** * Global test setup for analytics backend * This file runs before each test suite */ // Mock Redis client export const mockRedis = { get: vi.fn(), set: vi.fn(), del: vi.fn(), exists: vi.fn(), expire: vi.fn(), incr: vi.fn(), decr: vi.fn(), hget: vi.fn(), hset: vi.fn(), hdel: vi.fn(), hgetall: vi.fn(), lpush: vi.fn(), rpush: vi.fn(), lrange: vi.fn(), sadd: vi.fn(), scard: vi.fn(), smembers: vi.fn(), zadd: vi.fn(), zrange: vi.fn(), zrangebyscore: vi.fn(), keys: vi.fn(), ping: vi.fn().mockResolvedValue('PONG'), quit: vi.fn().mockResolvedValue('OK'), disconnect: vi.fn().mockResolvedValue(undefined), } // Mock Redis module vi.mock('redis', () => ({ createClient: vi.fn(() => mockRedis), })) // Mock BullMQ Queue export const mockQueue = { add: vi.fn(), getJob: vi.fn(), getJobs: vi.fn(), clean: vi.fn(), obliterate: vi.fn(), pause: vi.fn(), resume: vi.fn(), close: vi.fn(), on: vi.fn(), } vi.mock('bullmq', () => ({ Queue: vi.fn(() => mockQueue), Worker: vi.fn(), })) // Reset all mocks before each test beforeEach(() => { vi.clearAllMocks() // Reset Redis mocks to default behavior mockRedis.get.mockResolvedValue(null) mockRedis.set.mockResolvedValue('OK') mockRedis.del.mockResolvedValue(1) mockRedis.exists.mockResolvedValue(0) mockRedis.expire.mockResolvedValue(1) mockRedis.incr.mockResolvedValue(1) mockRedis.decr.mockResolvedValue(0) mockRedis.hget.mockResolvedValue(null) mockRedis.hset.mockResolvedValue(1) mockRedis.hdel.mockResolvedValue(1) mockRedis.hgetall.mockResolvedValue({}) mockRedis.lpush.mockResolvedValue(1) mockRedis.rpush.mockResolvedValue(1) mockRedis.lrange.mockResolvedValue([]) mockRedis.sadd.mockResolvedValue(1) mockRedis.scard.mockResolvedValue(0) mockRedis.smembers.mockResolvedValue([]) mockRedis.zadd.mockResolvedValue(1) mockRedis.zrange.mockResolvedValue([]) mockRedis.zrangebyscore.mockResolvedValue([]) mockRedis.keys.mockResolvedValue([]) // Reset Queue mocks mockQueue.add.mockResolvedValue({ id: '1', data: {} }) mockQueue.getJob.mockResolvedValue(null) mockQueue.getJobs.mockResolvedValue([]) mockQueue.clean.mockResolvedValue([]) mockQueue.obliterate.mockResolvedValue(undefined) mockQueue.pause.mockResolvedValue(undefined) mockQueue.resume.mockResolvedValue(undefined) mockQueue.close.mockResolvedValue(undefined) }) // Set test environment variables process.env.NODE_ENV = 'test' process.env.DATABASE_URL = 'postgresql://test:test@localhost:5432/analytics_test' process.env.DATABASE_REDIS_URL = 'redis://localhost:6379' process.env.JWT_SECRET = 'test-secret-key-for-testing-only'