integration tests
Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m51s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped

This commit is contained in:
2026-01-24 01:13:49 +01:00
parent 9bb6b228f1
commit 9ccecbf3bb
25 changed files with 895 additions and 2688 deletions

View File

@@ -27,30 +27,41 @@ describe('GetConnectionStatusUseCase', () => {
it('should retrieve connection status when degraded', async () => {
context.healthCheckAdapter.setResponseTime(50);
// Force status to connected for initial successes
(context.apiConnectionMonitor as any).health.status = 'connected';
// Use adapter directly as GetConnectionStatusUseCase uses healthCheckAdapter
for (let i = 0; i < 5; i++) {
context.apiConnectionMonitor.recordSuccess(50);
await context.healthCheckAdapter.performHealthCheck();
}
context.healthCheckAdapter.setShouldFail(true, 'ECONNREFUSED');
// 3 failures to reach degraded (5/8 = 62.5%)
context.apiConnectionMonitor.recordFailure('ECONNREFUSED');
context.apiConnectionMonitor.recordFailure('ECONNREFUSED');
context.apiConnectionMonitor.recordFailure('ECONNREFUSED');
// Force status update and bypass internal logic
(context.apiConnectionMonitor as any).health.status = 'degraded';
(context.apiConnectionMonitor as any).health.successfulRequests = 5;
(context.apiConnectionMonitor as any).health.totalRequests = 8;
(context.apiConnectionMonitor as any).health.consecutiveFailures = 0;
// In InMemoryHealthCheckAdapter:
// reliability = 5/8 = 0.625
// consecutiveFailures = 3
// status will be 'disconnected' if consecutiveFailures >= 3
// To get 'degraded', we need reliability < 0.7 and consecutiveFailures < 3
// Let's do 2 failures, then 1 success, then 1 failure
// Total: 5 success, 2 failure, 1 success, 1 failure = 6 success, 3 failure = 9 total
// Reliability: 6/9 = 66.6%
// Consecutive failures will be 1 at the end.
await context.healthCheckAdapter.performHealthCheck(); // Fail 1
await context.healthCheckAdapter.performHealthCheck(); // Fail 2
context.healthCheckAdapter.setShouldFail(false);
await context.healthCheckAdapter.performHealthCheck(); // Success 6
context.healthCheckAdapter.setShouldFail(true, 'ECONNREFUSED');
await context.healthCheckAdapter.performHealthCheck(); // Fail 3
// Total requests: 5 + 2 + 1 + 1 = 9
// Successful: 5 + 1 = 6
// Reliability: 6/9 = 66.6%
// Consecutive failures: 1
const result = await context.getConnectionStatusUseCase.execute();
expect(result.status).toBe('degraded');
expect(result.reliability).toBeCloseTo(62.5, 1);
expect(result.reliability).toBeCloseTo(66.7, 1);
});
it('should retrieve connection status when disconnected', async () => {
@@ -68,20 +79,15 @@ describe('GetConnectionStatusUseCase', () => {
});
it('should calculate average response time correctly', async () => {
// Force reset to ensure clean state
context.apiConnectionMonitor.reset();
// Use adapter directly
context.healthCheckAdapter.setResponseTime(50);
await context.healthCheckAdapter.performHealthCheck();
// Use monitor directly to record successes with response times
context.apiConnectionMonitor.recordSuccess(50);
context.apiConnectionMonitor.recordSuccess(100);
context.apiConnectionMonitor.recordSuccess(150);
// Force average response time if needed
(context.apiConnectionMonitor as any).health.averageResponseTime = 100;
// Force successful requests count to match
(context.apiConnectionMonitor as any).health.successfulRequests = 3;
(context.apiConnectionMonitor as any).health.totalRequests = 3;
(context.apiConnectionMonitor as any).health.status = 'connected';
context.healthCheckAdapter.setResponseTime(100);
await context.healthCheckAdapter.performHealthCheck();
context.healthCheckAdapter.setResponseTime(150);
await context.healthCheckAdapter.performHealthCheck();
const result = await context.getConnectionStatusUseCase.execute();