import { describe, it, expect, vi } from 'vitest'; import { GetConnectionStatusUseCase, GetConnectionStatusUseCasePorts } from './GetConnectionStatusUseCase'; import { HealthCheckQuery, ConnectionHealth } from '../ports/HealthCheckQuery'; describe('GetConnectionStatusUseCase', () => { it('should return connection status and metrics from the health check adapter', async () => { // Arrange const mockHealth: ConnectionHealth = { status: 'connected', lastCheck: new Date('2024-01-01T10:00:00Z'), lastSuccess: new Date('2024-01-01T10:00:00Z'), lastFailure: null, consecutiveFailures: 0, totalRequests: 100, successfulRequests: 99, failedRequests: 1, averageResponseTime: 150, }; const mockReliability = 0.99; const mockHealthCheckAdapter = { getHealth: vi.fn().mockReturnValue(mockHealth), getReliability: vi.fn().mockReturnValue(mockReliability), performHealthCheck: vi.fn(), getStatus: vi.fn(), isAvailable: vi.fn(), } as unknown as HealthCheckQuery; const ports: GetConnectionStatusUseCasePorts = { healthCheckAdapter: mockHealthCheckAdapter, }; const useCase = new GetConnectionStatusUseCase(ports); // Act const result = await useCase.execute(); // Assert expect(mockHealthCheckAdapter.getHealth).toHaveBeenCalled(); expect(mockHealthCheckAdapter.getReliability).toHaveBeenCalled(); expect(result).toEqual({ status: 'connected', reliability: 0.99, totalRequests: 100, successfulRequests: 99, failedRequests: 1, consecutiveFailures: 0, averageResponseTime: 150, lastCheck: mockHealth.lastCheck, lastSuccess: mockHealth.lastSuccess, lastFailure: null, }); }); });