55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
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,
|
|
});
|
|
});
|
|
});
|