Hoghoghi / app /frontend /dev /api-test.html
Really-amin's picture
Upload 25 files
89ba751 verified
raw
history blame
10.2 kB
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>API Connection Test - Legal Dashboard</title>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
.test-section {
background: white;
padding: 20px;
margin: 20px 0;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.success { color: #10b981; }
.error { color: #ef4444; }
.info { color: #3b82f6; }
.warning { color: #f59e0b; }
button {
background: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
margin: 5px;
}
button:hover {
background: #0056b3;
}
pre {
background: #f8f9fa;
padding: 10px;
border-radius: 4px;
overflow-x: auto;
max-height: 300px;
overflow-y: auto;
}
.endpoint-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 15px;
margin-top: 20px;
}
.endpoint-card {
border: 1px solid #ddd;
border-radius: 8px;
padding: 15px;
background: white;
}
.endpoint-card.success {
border-color: #10b981;
background: #f0fdf4;
}
.endpoint-card.error {
border-color: #ef4444;
background: #fef2f2;
}
.endpoint-card.warning {
border-color: #f59e0b;
background: #fffbeb;
}
.status-indicator {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
margin-right: 8px;
}
.status-indicator.success { background: #10b981; }
.status-indicator.error { background: #ef4444; }
.status-indicator.warning { background: #f59e0b; }
.summary-stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 15px;
margin-bottom: 20px;
}
.stat-card {
background: white;
padding: 15px;
border-radius: 8px;
text-align: center;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.stat-number {
font-size: 2rem;
font-weight: bold;
margin-bottom: 5px;
}
.stat-label {
color: #666;
font-size: 0.9rem;
}
</style>
</head>
<body>
<h1>🔧 API Connection Test - Legal Dashboard</h1>
<div class="test-section">
<h2>📊 Test Summary</h2>
<div class="summary-stats" id="summaryStats">
<div class="stat-card">
<div class="stat-number" id="totalTests">0</div>
<div class="stat-label">Total Tests</div>
</div>
<div class="stat-card">
<div class="stat-number success" id="passedTests">0</div>
<div class="stat-label">Passed</div>
</div>
<div class="stat-card">
<div class="stat-number error" id="failedTests">0</div>
<div class="stat-label">Failed</div>
</div>
<div class="stat-card">
<div class="stat-number info" id="successRate">0%</div>
<div class="stat-label">Success Rate</div>
</div>
</div>
<button type="button" onclick="runAllTests()">Run All API Tests</button>
<button type="button" onclick="testEndpointPatterns()">Test Endpoint Patterns</button>
<button type="button" onclick="clearResults()">Clear Results</button>
</div>
<div class="test-section">
<h2>🔍 Endpoint Test Results</h2>
<div class="endpoint-grid" id="endpointResults">
<!-- Results will be populated here -->
</div>
</div>
<div class="test-section">
<h2>📋 Detailed Results</h2>
<div id="detailedResults">
<p class="info">Click "Run All API Tests" to start testing...</p>
</div>
</div>
<script src="js/api-connection-test.js"></script>
<script>
let testResults = [];
async function runAllTests() {
console.log('Starting comprehensive API tests...');
// Clear previous results
document.getElementById('endpointResults').innerHTML = '';
document.getElementById('detailedResults').innerHTML = '<p class="info">Running tests...</p>';
// Run the API tests
const results = await window.apiTester.runAllTests();
testResults = results;
// Update summary
updateSummary(results);
// Display detailed results
displayDetailedResults(results);
console.log('API tests completed');
}
async function testEndpointPatterns() {
console.log('Testing endpoint patterns...');
await window.apiTester.testEndpointPatterns();
}
function clearResults() {
document.getElementById('endpointResults').innerHTML = '';
document.getElementById('detailedResults').innerHTML = '<p class="info">Results cleared</p>';
updateSummary([]);
}
function updateSummary(results) {
const total = results.length;
const passed = results.filter(r => r.success).length;
const failed = total - passed;
const successRate = total > 0 ? ((passed / total) * 100).toFixed(1) : 0;
document.getElementById('totalTests').textContent = total;
document.getElementById('passedTests').textContent = passed;
document.getElementById('failedTests').textContent = failed;
document.getElementById('successRate').textContent = successRate + '%';
}
function displayDetailedResults(results) {
const container = document.getElementById('endpointResults');
const detailedContainer = document.getElementById('detailedResults');
// Clear containers
container.innerHTML = '';
detailedContainer.innerHTML = '';
// Group results by category
const categories = {};
results.forEach(result => {
if (!categories[result.category]) {
categories[result.category] = [];
}
categories[result.category].push(result);
});
// Create endpoint cards
results.forEach(result => {
const card = document.createElement('div');
card.className = `endpoint-card ${result.success ? 'success' : 'error'}`;
const statusClass = result.success ? 'success' : 'error';
const statusText = result.success ? 'PASS' : 'FAIL';
card.innerHTML = `
<div style="display: flex; align-items: center; margin-bottom: 10px;">
<span class="status-indicator ${statusClass}"></span>
<strong>${result.name}</strong>
<span style="margin-left: auto; font-size: 0.8rem; color: #666;">
${result.responseTime}ms
</span>
</div>
<div style="font-size: 0.9rem; color: #666;">
<div>URL: ${result.url}</div>
<div>Method: ${result.method}</div>
<div>Status: ${result.status}</div>
${result.error ? `<div style="color: #ef4444;">Error: ${result.error}</div>` : ''}
</div>
`;
container.appendChild(card);
});
// Create detailed results
let detailedHTML = '<h3>Test Results by Category</h3>';
Object.entries(categories).forEach(([category, categoryResults]) => {
const passed = categoryResults.filter(r => r.success).length;
const total = categoryResults.length;
const rate = ((passed / total) * 100).toFixed(1);
detailedHTML += `
<div style="margin-bottom: 20px;">
<h4>${category} (${passed}/${total} - ${rate}%)</h4>
<ul>
${categoryResults.map(result => `
<li class="${result.success ? 'success' : 'error'}">
${result.name}: ${result.success ? 'PASS' : 'FAIL'}
(${result.responseTime}ms)
${result.error ? ` - ${result.error}` : ''}
</li>
`).join('')}
</ul>
</div>
`;
});
detailedContainer.innerHTML = detailedHTML;
}
// Auto-run tests when page loads
window.addEventListener('load', () => {
setTimeout(() => {
console.log('Auto-running API tests...');
runAllTests();
}, 1000);
});
</script>
</body>
</html>