add changes
This commit is contained in:
215
tests/test-error-handling.js
Normal file
215
tests/test-error-handling.js
Normal file
@@ -0,0 +1,215 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user