import { describe, it, expect, vi, beforeEach } from 'vitest'; import { getWebSocketConnections, getWebSocketStats } from '../websocket'; import client from '../client'; vi.mock('../client'); describe('WebSocket API', () => { beforeEach(() => { vi.clearAllMocks(); }); describe('getWebSocketConnections', () => { it('should fetch WebSocket connections', async () => { const mockResponse = { connections: [ { id: 'test-conn-1', type: 'logs', connected_at: '2024-01-15T10:00:00Z', last_activity_at: '2024-01-15T10:05:00Z', remote_addr: '192.168.1.1:12345', user_agent: 'Mozilla/5.0', filters: 'level=error', }, { id: 'test-conn-2', type: 'cerberus', connected_at: '2024-01-15T10:02:00Z', last_activity_at: '2024-01-15T10:06:00Z', remote_addr: '192.168.1.2:54321', user_agent: 'Chrome/90.0', filters: 'source=waf', }, ], count: 2, }; vi.mocked(client.get).mockResolvedValue({ data: mockResponse }); const result = await getWebSocketConnections(); expect(client.get).toHaveBeenCalledWith('/websocket/connections'); expect(result).toEqual(mockResponse); expect(result.count).toBe(2); expect(result.connections).toHaveLength(2); }); it('should handle empty connections', async () => { const mockResponse = { connections: [], count: 0, }; vi.mocked(client.get).mockResolvedValue({ data: mockResponse }); const result = await getWebSocketConnections(); expect(result.connections).toHaveLength(0); expect(result.count).toBe(0); }); it('should handle API errors', async () => { vi.mocked(client.get).mockRejectedValue(new Error('Network error')); await expect(getWebSocketConnections()).rejects.toThrow('Network error'); }); }); describe('getWebSocketStats', () => { it('should fetch WebSocket statistics', async () => { const mockResponse = { total_active: 3, logs_connections: 2, cerberus_connections: 1, oldest_connection: '2024-01-15T09:55:00Z', last_updated: '2024-01-15T10:10:00Z', }; vi.mocked(client.get).mockResolvedValue({ data: mockResponse }); const result = await getWebSocketStats(); expect(client.get).toHaveBeenCalledWith('/websocket/stats'); expect(result).toEqual(mockResponse); expect(result.total_active).toBe(3); expect(result.logs_connections).toBe(2); expect(result.cerberus_connections).toBe(1); }); it('should handle stats with no connections', async () => { const mockResponse = { total_active: 0, logs_connections: 0, cerberus_connections: 0, last_updated: '2024-01-15T10:10:00Z', }; vi.mocked(client.get).mockResolvedValue({ data: mockResponse }); const result = await getWebSocketStats(); expect(result.total_active).toBe(0); expect(result.oldest_connection).toBeUndefined(); }); it('should handle API errors', async () => { vi.mocked(client.get).mockRejectedValue(new Error('Server error')); await expect(getWebSocketStats()).rejects.toThrow('Server error'); }); }); });