// API Integration Test Script const BASE_URL = 'http://localhost:3001'; // Helper function for making requests async function request(endpoint, options = {}) { const url = `${BASE_URL}${endpoint}`; const config = { headers: { 'Content-Type': 'application/json', ...options.headers, }, ...options, }; try { const response = await fetch(url, config); const data = await response.json(); return { status: response.status, ok: response.ok, data }; } catch (error) { return { status: 500, ok: false, error: error.message }; } } // Test Results const testResults = []; async function runTests() { console.log('๐Ÿš€ Starting API Integration Tests...\n'); // 1. Health Check console.log('1. Testing Health Check...'); const healthTest = await request('/health'); testResults.push({ name: 'Health Check', passed: healthTest.ok, status: healthTest.status, data: healthTest.data }); console.log(` ${healthTest.ok ? 'โœ…' : 'โŒ'} ${healthTest.status}`); // 2. Create Test User console.log('\n2. Testing Create User...'); const userTest = await request('/api/users', { method: 'POST', body: JSON.stringify({ name: 'Test User', email: 'test' + Date.now() + '@example.com' }) }); testResults.push({ name: 'Create User', passed: userTest.ok, status: userTest.status, data: userTest.data }); console.log(` ${userTest.ok ? 'โœ…' : 'โŒ'} ${userTest.status}`); const userId = userTest.data?.data?.id; if (!userId) { console.log(' โŒ Cannot continue without user ID'); return; } console.log(` Created User ID: ${userId}`); // 3. Create Account console.log('\n3. Testing Create Account...'); const accountTest = await request('/api/accounts', { method: 'POST', body: JSON.stringify({ userId, name: '็Žฐ้‡‘่ดฆๆˆท', type: 'cash', color: '#1890FF', balance: 1000 }) }); testResults.push({ name: 'Create Account', passed: accountTest.ok, status: accountTest.status, data: accountTest.data }); console.log(` ${accountTest.ok ? 'โœ…' : 'โŒ'} ${accountTest.status}`); const accountId = accountTest.data?.data?.id; // 4. Get Accounts console.log('\n4. Testing Get Accounts...'); const getAccountsTest = await request(`/api/accounts?userId=${userId}`); testResults.push({ name: 'Get Accounts', passed: getAccountsTest.ok, status: getAccountsTest.status, data: getAccountsTest.data }); console.log(` ${getAccountsTest.ok ? 'โœ…' : 'โŒ'} ${getAccountsTest.status}`); // 5. Create Income Record console.log('\n5. Testing Create Income Record...'); const incomeTest = await request('/api/records', { method: 'POST', body: JSON.stringify({ userId, accountId, type: 'income', amount: 5000, category: 'ๅทฅ่ต„', description: '4ๆœˆไปฝๅทฅ่ต„', date: new Date().toISOString() }) }); testResults.push({ name: 'Create Income Record', passed: incomeTest.ok, status: incomeTest.status, data: incomeTest.data }); console.log(` ${incomeTest.ok ? 'โœ…' : 'โŒ'} ${incomeTest.status}`); // 6. Create Expense Record console.log('\n6. Testing Create Expense Record...'); const expenseTest = await request('/api/records', { method: 'POST', body: JSON.stringify({ userId, accountId, type: 'expense', amount: 150, category: '้ค้ฅฎ', description: 'ๅˆ้ค', date: new Date().toISOString() }) }); testResults.push({ name: 'Create Expense Record', passed: expenseTest.ok, status: expenseTest.status, data: expenseTest.data }); console.log(` ${expenseTest.ok ? 'โœ…' : 'โŒ'} ${expenseTest.status}`); // 7. Get Records console.log('\n7. Testing Get Records...'); const getRecordsTest = await request(`/api/records?userId=${userId}`); testResults.push({ name: 'Get Records', passed: getRecordsTest.ok, status: getRecordsTest.status, data: getRecordsTest.data }); console.log(` ${getRecordsTest.ok ? 'โœ…' : 'โŒ'} ${getRecordsTest.status}`); // 8. Create Budget const currentMonth = `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, '0')}`; console.log('\n8. Testing Create Budget...'); const budgetTest = await request('/api/budgets', { method: 'POST', body: JSON.stringify({ userId, category: '้ค้ฅฎ', amount: 2000, month: currentMonth }) }); testResults.push({ name: 'Create Budget', passed: budgetTest.ok, status: budgetTest.status, data: budgetTest.data }); console.log(` ${budgetTest.ok ? 'โœ…' : 'โŒ'} ${budgetTest.status}`); // 9. Get Budgets console.log('\n9. Testing Get Budgets...'); const getBudgetsTest = await request(`/api/budgets?userId=${userId}&month=${currentMonth}`); testResults.push({ name: 'Get Budgets', passed: getBudgetsTest.ok, status: getBudgetsTest.status, data: getBudgetsTest.data }); console.log(` ${getBudgetsTest.ok ? 'โœ…' : 'โŒ'} ${getBudgetsTest.status}`); // 10. Monthly Statistics console.log('\n10. Testing Monthly Statistics...'); const monthlyStatsTest = await request(`/api/statistics/monthly?userId=${userId}&month=${currentMonth}`); testResults.push({ name: 'Monthly Statistics', passed: monthlyStatsTest.ok, status: monthlyStatsTest.status, data: monthlyStatsTest.data }); console.log(` ${monthlyStatsTest.ok ? 'โœ…' : 'โŒ'} ${monthlyStatsTest.status}`); // 11. Trend Statistics console.log('\n11. Testing Trend Statistics...'); const trendTest = await request(`/api/statistics/trend?userId=${userId}`); testResults.push({ name: 'Trend Statistics', passed: trendTest.ok, status: trendTest.status, data: trendTest.data }); console.log(` ${trendTest.ok ? 'โœ…' : 'โŒ'} ${trendTest.status}`); // 12. Dashboard Summary console.log('\n12. Testing Dashboard Summary...'); const dashboardTest = await request(`/api/dashboard/summary?userId=${userId}`); testResults.push({ name: 'Dashboard Summary', passed: dashboardTest.ok, status: dashboardTest.status, data: dashboardTest.data }); console.log(` ${dashboardTest.ok ? 'โœ…' : 'โŒ'} ${dashboardTest.status}`); // Summary console.log('\n' + '='.repeat(50)); console.log('๐Ÿ“Š Test Summary:'); const passed = testResults.filter(t => t.passed).length; const total = testResults.length; console.log(` Total: ${total}`); console.log(` Passed: ${passed} โœ…`); console.log(` Failed: ${total - passed} โŒ`); console.log('='.repeat(50)); return testResults; } runTests().then(results => { console.log('\nTest run completed!'); process.exit(0); }).catch(error => { console.error('Test run failed:', error); process.exit(1); });