/** * Test setup and global configuration. * Sets up global test environment and utilities. */ import { beforeAll, afterAll, vi } from 'vitest' // Global test setup beforeAll(() => { // Suppress console logs during tests unless explicitly needed const originalConsoleLog = console.log const originalConsoleWarn = console.warn const originalConsoleError = console.error console.log = vi.fn() console.warn = vi.fn() console.error = vi.fn() // Restore original console methods when needed for debugging ;(global as any).originalConsole = { log: originalConsoleLog, warn: originalConsoleWarn, error: originalConsoleError } }) afterAll(() => { vi.restoreAllMocks() }) // Global test utilities export const testUtils = { /** * Generate a random UUID for testing */ generateUUID: (): string => { return '123e4567-e89b-12d3-a456-426614174' + Math.floor(Math.random() * 1000).toString().padStart(3, '0') }, /** * Generate test data with proper types */ generateTestData: { user: () => ({ id: testUtils.generateUUID(), name: 'Test User', email: 'test@example.com', age: 25, isActive: true }), post: () => ({ id: testUtils.generateUUID(), title: 'Test Post', content: 'This is a test post content', tags: ['test', 'example'], published: false, createdAt: new Date().toISOString() }), apiResponse: (data: T) => ({ success: true as const, data }), apiError: (code: number, message: string) => ({ success: false as const, code, msg: message }) }, /** * Wait for a specified amount of time */ delay: (ms: number): Promise => { return new Promise(resolve => setTimeout(resolve, ms)) }, /** * Create a mock function that resolves after a delay */ createAsyncMock: (returnValue: T, delay: number = 0) => { return vi.fn().mockImplementation(async () => { if (delay > 0) { await testUtils.delay(delay) } return returnValue }) } }