216 lines
6.6 KiB
JavaScript
216 lines
6.6 KiB
JavaScript
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);
|
|
});
|