Files
telegram-management-system/frontend/test-all-routes.js
你的用户名 237c7802e5
Some checks failed
Deploy / deploy (push) Has been cancelled
Initial commit: Telegram Management System
Full-stack web application for Telegram management
- Frontend: Vue 3 + Vben Admin
- Backend: NestJS
- Features: User management, group broadcast, statistics

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 15:37:50 +08:00

303 lines
13 KiB
JavaScript

const { chromium } = require('playwright');
const fs = require('fs');
// All routes to test
const routes = [
// Basic routes
{ path: '/login', name: 'Login Page', requiresAuth: false },
{ path: '/', name: 'Home (redirect)', requiresAuth: true },
{ path: '/home', name: 'Dashboard', requiresAuth: true },
{ path: '/message/message_page', name: 'Message Center', requiresAuth: true },
// Telegram Account Management (10 routes)
{ path: '/tgAccountManage/tgAccountList', name: 'TG Account List', requiresAuth: true },
{ path: '/tgAccountManage/telegramWeb', name: 'Telegram Web', requiresAuth: true },
{ path: '/tgAccountManage/telegramChat', name: 'Telegram Chat', requiresAuth: true },
{ path: '/tgAccountManage/telegramWebFull', name: 'Telegram Web Full', requiresAuth: true },
{ path: '/tgAccountManage/telegramGuide', name: 'Telegram Guide', requiresAuth: true },
{ path: '/tgAccountManage/telegramQuickAccess', name: 'Telegram Quick Access', requiresAuth: true },
{ path: '/tgAccountManage/registerPhone', name: 'Register Phone', requiresAuth: true },
{ path: '/tgAccountManage/autoRegister', name: 'Auto Register', requiresAuth: true },
{ path: '/tgAccountManage/accountUsageList', name: 'Account Usage List', requiresAuth: true },
{ path: '/pullMemberTask/pullMemberTaskList', name: 'Pull Member Task List', requiresAuth: true },
// Group Management (4 routes)
{ path: '/groupManage/groupList', name: 'Group List', requiresAuth: true },
{ path: '/groupManage/groupMemberList', name: 'Group Member List', requiresAuth: true },
{ path: '/groupManage/groupSet', name: 'Group Settings', requiresAuth: true },
{ path: '/groupListenerManage/groupListenerList', name: 'Group Listener List', requiresAuth: true },
// Message Management (3 routes)
{ path: '/messageManage/messageList', name: 'Message List', requiresAuth: true },
{ path: '/messageManage/messageSet', name: 'Message Settings', requiresAuth: true },
{ path: '/exchangeManage/exchangeList', name: 'Exchange List', requiresAuth: true },
// Script Management (5 routes)
{ path: '/scriptManage/scriptList', name: 'Script List', requiresAuth: true },
{ path: '/scriptManage/scriptProject', name: 'Script Project', requiresAuth: true },
{ path: '/scriptTaskManage/scriptTaskList', name: 'Script Task List', requiresAuth: true },
{ path: '/taskManage/groupTaskList', name: 'Group Task List', requiresAuth: true },
{ path: '/taskManage/groupTaskWsLog', name: 'Group Task WS Log', requiresAuth: true },
// SMS Platform (7 routes)
{ path: '/sms_platform/sms_platform_list', name: 'SMS Platform List', requiresAuth: true },
{ path: '/sms_platform/sms_dashboard', name: 'SMS Dashboard', requiresAuth: true },
{ path: '/sms_platform/sms_records', name: 'SMS Records', requiresAuth: true },
{ path: '/sms_platform/sms_statistics', name: 'SMS Statistics', requiresAuth: true },
{ path: '/sms_platform/sms_price_compare', name: 'SMS Price Compare', requiresAuth: true },
{ path: '/sms_platform/sms_quick_actions', name: 'SMS Quick Actions', requiresAuth: true },
{ path: '/sms_platform/balanceAlert', name: 'Balance Alert', requiresAuth: true },
// Configuration Management (7 routes)
{ path: '/configManage/baseConfig', name: 'Base Config', requiresAuth: true },
{ path: '/configManage/dcList', name: 'DC List', requiresAuth: true },
{ path: '/configManage/paramConfig', name: 'Param Config', requiresAuth: true },
{ path: '/nameManage/firstnameList', name: 'First Name List', requiresAuth: true },
{ path: '/nameManage/lastnameList', name: 'Last Name List', requiresAuth: true },
{ path: '/apiData/list', name: 'API Data List', requiresAuth: true },
{ path: '/adminManage/modifyPwd', name: 'Modify Password', requiresAuth: true },
// Log Management (10 routes)
{ path: '/logManage/groupJoinLog', name: 'Group Join Log', requiresAuth: true },
{ path: '/logManage/groupSendLog', name: 'Group Send Log', requiresAuth: true },
{ path: '/logManage/loginLog', name: 'Login Log', requiresAuth: true },
{ path: '/logManage/pullMemberLog', name: 'Pull Member Log', requiresAuth: true },
{ path: '/logManage/pullMemberProjectStatistic', name: 'Pull Member Project Stats', requiresAuth: true },
{ path: '/logManage/pullMemberStatistic', name: 'Pull Member Stats', requiresAuth: true },
{ path: '/logManage/registerLog', name: 'Register Log', requiresAuth: true },
{ path: '/logManage/tgLoginCodeLog', name: 'TG Login Code Log', requiresAuth: true },
{ path: '/logManage/tgRegisterLog', name: 'TG Register Log', requiresAuth: true },
{ path: '/error_logger/error_logger_page', name: 'Error Logger Page', requiresAuth: true },
// Error Pages (3 routes)
{ path: '/401', name: '401 Error Page', requiresAuth: false },
{ path: '/404', name: '404 Error Page', requiresAuth: false },
{ path: '/500', name: '500 Error Page', requiresAuth: false },
// Component Examples (11 routes)
{ path: '/components/tree_select_page', name: 'Tree Select', requiresAuth: true },
{ path: '/components/count_to_page', name: 'Count To', requiresAuth: true },
{ path: '/components/drag_list_page', name: 'Drag List', requiresAuth: true },
{ path: '/components/drag_drawer_page', name: 'Drag Drawer', requiresAuth: true },
{ path: '/components/org_tree_page', name: 'Org Tree', requiresAuth: true },
{ path: '/components/tree_table_page', name: 'Tree Table', requiresAuth: true },
{ path: '/components/cropper_page', name: 'Cropper', requiresAuth: true },
{ path: '/components/tables_page', name: 'Tables', requiresAuth: true },
{ path: '/components/split_pane_page', name: 'Split Pane', requiresAuth: true },
{ path: '/components/editor_page', name: 'Editor', requiresAuth: true },
{ path: '/components/icons_page', name: 'Icons', requiresAuth: true },
// Additional Features (11 routes)
{ path: '/update/update_table_page', name: 'Upload CSV', requiresAuth: true },
{ path: '/update/update_paste_page', name: 'Paste Table Data', requiresAuth: true },
{ path: '/excel/upload-excel', name: 'Upload Excel', requiresAuth: true },
{ path: '/excel/export-excel', name: 'Export Excel', requiresAuth: true },
{ path: '/tools_methods/tools_methods_page', name: 'Tools Methods', requiresAuth: true },
{ path: '/i18n/i18n_page', name: 'i18n Page', requiresAuth: true },
{ path: '/error_store/error_store_page', name: 'Error Store', requiresAuth: true },
{ path: '/directive/directive_page', name: 'Directive', requiresAuth: true },
{ path: '/multilevel/level_2_1', name: 'Multilevel 2-1', requiresAuth: true },
{ path: '/multilevel/level_2_2/level_2_2_1', name: 'Multilevel 2-2-1', requiresAuth: true },
{ path: '/multilevel/level_2_2/level_2_2_2', name: 'Multilevel 2-2-2', requiresAuth: true },
{ path: '/multilevel/level_2_3', name: 'Multilevel 2-3', requiresAuth: true },
{ path: '/argu/params/test123', name: 'Dynamic Route - Params', requiresAuth: true },
{ path: '/argu/query?id=test123', name: 'Dynamic Route - Query', requiresAuth: true }
];
// Test results
const testResults = [];
async function testAllRoutes() {
const browser = await chromium.launch({
headless: false,
slowMo: 50
});
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 }
});
const page = await context.newPage();
// Enable console logging
page.on('console', msg => {
if (msg.type() === 'error') {
console.error(`Console error: ${msg.text()}`);
}
});
page.on('pageerror', error => {
console.error(`Page error: ${error.message}`);
});
const baseUrl = 'http://localhost:8890';
console.log('Starting route testing...\n');
// First, test login
console.log('Testing login functionality...');
try {
await page.goto(`${baseUrl}/login`, { waitUntil: 'networkidle' });
// Check if login page loads
await page.waitForSelector('form', { timeout: 5000 });
// Try to login with test credentials
// Adjust selectors based on your login form structure
const usernameInput = await page.locator('input[placeholder*="用户名"], input[placeholder*="username"], input[type="text"]').first();
const passwordInput = await page.locator('input[placeholder*="密码"], input[placeholder*="password"], input[type="password"]').first();
await usernameInput.fill('admin');
await passwordInput.fill('111111');
const submitButton = await page.locator('button[type="submit"], button:has-text("登录"), button:has-text("Login")').first();
await submitButton.click();
// Wait for navigation after login
await page.waitForNavigation({ waitUntil: 'networkidle' });
// Check if we're redirected to home
const currentUrl = page.url();
if (currentUrl.includes('/home')) {
console.log('✅ Login successful!');
testResults.push({
path: '/login',
name: 'Login',
status: 'success',
message: 'Login functionality working'
});
} else {
console.log('❌ Login failed!');
testResults.push({
path: '/login',
name: 'Login',
status: 'failed',
message: 'Login failed - not redirected to home'
});
}
} catch (error) {
console.error('❌ Login test failed:', error.message);
testResults.push({
path: '/login',
name: 'Login',
status: 'error',
message: error.message
});
}
// Test all other routes
for (const route of routes) {
if (route.path === '/login') continue; // Already tested
console.log(`\nTesting: ${route.name} (${route.path})`);
try {
const response = await page.goto(`${baseUrl}${route.path}`, {
waitUntil: 'networkidle',
timeout: 30000
});
// Check response status
const status = response.status();
// Wait a bit for Vue to render
await page.waitForTimeout(1000);
// Check for common error indicators
const hasErrorPage = await page.$('.error-page') !== null;
const has404 = await page.locator('text=/404/i').count() > 0;
const has500 = await page.locator('text=/500/i').count() > 0;
const hasConsoleErrors = await page.evaluate(() => {
return window.__consoleErrors && window.__consoleErrors.length > 0;
});
// Take screenshot for visual verification
await page.screenshot({
path: `screenshots/route_${route.path.replace(/\//g, '_')}.png`,
fullPage: true
});
if (status === 200 && !hasErrorPage && !has404 && !has500) {
console.log(`${route.name} - Success`);
testResults.push({
path: route.path,
name: route.name,
status: 'success',
httpStatus: status,
hasConsoleErrors
});
} else {
console.log(`${route.name} - Failed (Status: ${status})`);
testResults.push({
path: route.path,
name: route.name,
status: 'failed',
httpStatus: status,
hasErrorPage,
has404,
has500,
hasConsoleErrors
});
}
} catch (error) {
console.error(`${route.name} - Error: ${error.message}`);
testResults.push({
path: route.path,
name: route.name,
status: 'error',
message: error.message
});
}
}
// Generate test report
const report = {
testDate: new Date().toISOString(),
totalRoutes: routes.length,
results: testResults,
summary: {
success: testResults.filter(r => r.status === 'success').length,
failed: testResults.filter(r => r.status === 'failed').length,
error: testResults.filter(r => r.status === 'error').length
}
};
// Save report
fs.writeFileSync('route-test-report.json', JSON.stringify(report, null, 2));
console.log('\n========== TEST SUMMARY ==========');
console.log(`Total Routes Tested: ${report.totalRoutes}`);
console.log(`✅ Success: ${report.summary.success}`);
console.log(`❌ Failed: ${report.summary.failed}`);
console.log(`⚠️ Error: ${report.summary.error}`);
console.log('==================================\n');
// Print failed routes
const failedRoutes = testResults.filter(r => r.status !== 'success');
if (failedRoutes.length > 0) {
console.log('Failed Routes:');
failedRoutes.forEach(route => {
console.log(`- ${route.name} (${route.path}): ${route.message || 'Failed'}`);
});
}
await browser.close();
}
// Create screenshots directory
if (!fs.existsSync('screenshots')) {
fs.mkdirSync('screenshots');
}
// Inject console error tracking
const setupScript = `
window.__consoleErrors = [];
const originalError = console.error;
console.error = function(...args) {
window.__consoleErrors.push(args.join(' '));
originalError.apply(console, args);
};
`;
// Run the tests
testAllRoutes().catch(console.error);