platform-codebase/features/analytics/backend-api/test/setup.ts

101 lines
2.7 KiB
TypeScript

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'