banatie-service/apps/api-service/test-network-error-detector.ts

61 lines
2.8 KiB
TypeScript

/**
* Manual test script for NetworkErrorDetector
* Run with: npx tsx test-network-error-detector.ts
*/
import { NetworkErrorDetector } from './src/utils/NetworkErrorDetector';
async function testNetworkErrorDetector() {
console.log('🧪 Testing NetworkErrorDetector\n');
// Test 1: DNS Error
console.log('Test 1: DNS Resolution Error (ENOTFOUND)');
const dnsError = new Error('getaddrinfo ENOTFOUND api.example.com');
(dnsError as any).code = 'ENOTFOUND';
const dnsResult = await NetworkErrorDetector.classifyError(dnsError, 'Gemini API');
console.log(' Is Network Error:', dnsResult.isNetworkError);
console.log(' Error Type:', dnsResult.errorType);
console.log(' User Message:', dnsResult.userMessage);
console.log(' Formatted Log:', NetworkErrorDetector.formatErrorForLogging(dnsResult));
console.log('');
// Test 2: Timeout Error
console.log('Test 2: Connection Timeout (ETIMEDOUT)');
const timeoutError = new Error('connect ETIMEDOUT 142.250.185.10:443');
(timeoutError as any).code = 'ETIMEDOUT';
const timeoutResult = await NetworkErrorDetector.classifyError(timeoutError, 'Gemini API');
console.log(' Is Network Error:', timeoutResult.isNetworkError);
console.log(' Error Type:', timeoutResult.errorType);
console.log(' User Message:', timeoutResult.userMessage);
console.log(' Formatted Log:', NetworkErrorDetector.formatErrorForLogging(timeoutResult));
console.log('');
// Test 3: Fetch Failed (actual error from logs)
console.log('Test 3: Fetch Failed Error (from your logs)');
const fetchError = new Error('exception TypeError: fetch failed sending request');
const fetchResult = await NetworkErrorDetector.classifyError(fetchError, 'Gemini API');
console.log(' Is Network Error:', fetchResult.isNetworkError);
console.log(' Error Type:', fetchResult.errorType);
console.log(' User Message:', fetchResult.userMessage);
console.log(' Formatted Log:', NetworkErrorDetector.formatErrorForLogging(fetchResult));
console.log('');
// Test 4: Non-network Error
console.log('Test 4: Non-Network Error (Invalid API Key)');
const apiError = new Error('Invalid API key provided');
const apiResult = await NetworkErrorDetector.classifyError(apiError, 'Gemini API');
console.log(' Is Network Error:', apiResult.isNetworkError);
console.log(' User Message:', apiResult.userMessage);
console.log(' Formatted Log:', NetworkErrorDetector.formatErrorForLogging(apiResult));
console.log('');
console.log('✅ Tests completed!');
console.log('\n📝 Summary:');
console.log(' - Network errors are detected and classified');
console.log(' - User-friendly messages are provided');
console.log(' - Technical details are preserved for logging');
console.log(' - No overhead on successful requests (only runs on failures)');
}
testNetworkErrorDetector().catch(console.error);