const axios = require('axios'); const BASE_URL = 'http://localhost:3000/api'; console.log('Testing Error Handling & Logging\n'); console.log('='.repeat(50)); async function testErrorHandling() { const tests = [ { name: '404 Not Found', test: async () => { try { await axios.get(`${BASE_URL}/nonexistent-route`); return { success: false, message: 'Should have thrown 404' }; } catch (error) { if (error.response?.status === 404) { return { success: true, message: `✓ 404 handled correctly: ${error.response.data.message}` }; } return { success: false, message: `✗ Unexpected error: ${error.message}` }; } } }, { name: '401 Unauthorized (No Token)', test: async () => { try { await axios.get(`${BASE_URL}/auth/verify`); return { success: false, message: 'Should have thrown 401' }; } catch (error) { if (error.response?.status === 401) { return { success: true, message: `✓ 401 handled correctly: ${error.response.data.message}` }; } return { success: false, message: `✗ Unexpected error: ${error.message}` }; } } }, { name: '401 Unauthorized (Invalid Token)', test: async () => { try { await axios.get(`${BASE_URL}/auth/verify`, { headers: { 'Authorization': 'Bearer invalid-token' } }); return { success: false, message: 'Should have thrown 401' }; } catch (error) { if (error.response?.status === 401) { return { success: true, message: `✓ 401 handled correctly: ${error.response.data.message}` }; } return { success: false, message: `✗ Unexpected error: ${error.message}` }; } } }, { name: '400 Bad Request (Missing Required Fields)', test: async () => { try { await axios.post(`${BASE_URL}/auth/register`, { username: 'test' // missing email and password }); return { success: false, message: 'Should have thrown 400' }; } catch (error) { if (error.response?.status === 400) { return { success: true, message: `✓ 400 handled correctly: ${error.response.data.message}` }; } return { success: false, message: `✗ Unexpected error: ${error.message}` }; } } }, { name: '400 Bad Request (Invalid Email)', test: async () => { try { await axios.post(`${BASE_URL}/auth/register`, { username: 'testuser123', email: 'invalid-email', password: 'password123' }); return { success: false, message: 'Should have thrown 400' }; } catch (error) { if (error.response?.status === 400) { return { success: true, message: `✓ 400 handled correctly: ${error.response.data.message}` }; } return { success: false, message: `✗ Unexpected error: ${error.message}` }; } } }, { name: 'Health Check (Success)', test: async () => { try { const response = await axios.get('http://localhost:3000/health'); if (response.status === 200 && response.data.status === 'OK') { return { success: true, message: `✓ Health check passed: ${response.data.message}` }; } return { success: false, message: '✗ Health check failed' }; } catch (error) { return { success: false, message: `✗ Health check error: ${error.message}` }; } } }, { name: 'Successful Login Flow', test: async () => { try { // First, try to register a test user const timestamp = Date.now(); const testUser = { username: `errortest${timestamp}`, email: `errortest${timestamp}@example.com`, password: 'password123' }; await axios.post(`${BASE_URL}/auth/register`, testUser); // Then login const loginResponse = await axios.post(`${BASE_URL}/auth/login`, { email: testUser.email, password: testUser.password }); if (loginResponse.status === 200 && loginResponse.data.token) { return { success: true, message: `✓ Login successful, token received` }; } return { success: false, message: '✗ Login failed' }; } catch (error) { if (error.response?.status === 409) { // User already exists, try logging in return { success: true, message: `✓ Validation working (user exists)` }; } return { success: false, message: `✗ Error: ${error.message}` }; } } }, { name: 'Check Logs Directory', test: async () => { const fs = require('fs'); const path = require('path'); const logsDir = path.join(__dirname, 'logs'); if (fs.existsSync(logsDir)) { const files = fs.readdirSync(logsDir); if (files.length > 0) { return { success: true, message: `✓ Logs directory exists with ${files.length} file(s): ${files.join(', ')}` }; } return { success: true, message: `✓ Logs directory exists (empty)` }; } return { success: false, message: '✗ Logs directory not found' }; } } ]; let passed = 0; let failed = 0; for (const test of tests) { console.log(`\n${test.name}:`); try { const result = await test.test(); console.log(` ${result.message}`); if (result.success) passed++; else failed++; } catch (error) { console.log(` ✗ Test error: ${error.message}`); failed++; } } console.log('\n' + '='.repeat(50)); console.log(`\nTest Results: ${passed}/${tests.length} passed, ${failed} failed`); if (failed === 0) { console.log('\n✅ All error handling tests passed!'); } else { console.log(`\n⚠️ Some tests failed. Check the logs for details.`); } } // Run tests testErrorHandling().catch(error => { console.error('Fatal error:', error); process.exit(1); });