import { test, expect } from '@playwright/test'; test('production: verify all admin pages load correctly', async ({ page }) => { const baseUrl = 'http://178.104.200.7/taxbaik'; // Login console.log('πŸ” Logging in...'); await page.goto(`${baseUrl}/admin/login`); await page.fill('input[placeholder="μ‚¬μš©μžλͺ…"]', 'test_admin'); await page.fill('input[placeholder="λΉ„λ°€λ²ˆν˜Έ"]', 'TestAdmin@123456'); await page.click('button[type="submit"]'); await page.waitForURL(/admin\/dashboard/); console.log('βœ“ Login successful\n'); const pageHero = page.locator('.admin-page-hero').first(); const loadingOverlay = page.locator('#blazor-loading'); // List of all admin pages to test (using direct URLs) const pages = [ { name: 'πŸ“Š Dashboard', url: `${baseUrl}/admin/dashboard`, hasData: false }, { name: 'πŸ‘₯ Clients', url: `${baseUrl}/admin/clients`, hasData: true }, { name: 'πŸ“… Tax Filings', url: `${baseUrl}/admin/tax-filings`, hasData: true }, { name: 'πŸ“’ Announcements', url: `${baseUrl}/admin/announcements`, hasData: false }, { name: '❓ FAQs', url: `${baseUrl}/admin/faqs`, hasData: true }, { name: 'πŸ“ Blog', url: `${baseUrl}/admin/blog`, hasData: true }, { name: '🎭 Season Simulator', url: `${baseUrl}/admin/season-simulator`, hasData: false }, { name: '❔ Inquiries', url: `${baseUrl}/admin/inquiries`, hasData: true }, { name: 'βš™οΈ Settings', url: `${baseUrl}/admin/settings`, hasData: false }, ]; for (const pageInfo of pages) { console.log(`${'─'.repeat(60)}`); console.log(`Testing: ${pageInfo.name}`); console.log(`URL: ${pageInfo.url}`); console.log(`${'─'.repeat(60)}`); const startTime = Date.now(); try { // Navigate to page await page.goto(pageInfo.url); // Wait for page hero or basic element try { await pageHero.waitFor({ state: 'visible', timeout: 3000 }); console.log(` βœ“ Page hero visible`); } catch { // Some pages might not have page hero, that's OK } // Check if page loaded successfully by looking for content const pageContent = page.locator('body').first(); await pageContent.waitFor({ state: 'visible', timeout: 5000 }); // Wait for data if expected if (pageInfo.hasData) { try { // Try to find table rows await page.waitForSelector('tbody tr', { timeout: 8000 }); const rowCount = await page.locator('tbody tr').count(); if (rowCount > 0) { console.log(` βœ“ Data loaded: ${rowCount} rows`); } else { console.log(` ⚠️ Table found but no rows`); } } catch { console.log(` ℹ️ No table data (may not have table)`); } } // Verify overlay is hidden const overlayShown = await loadingOverlay.evaluate((el: HTMLElement) => el.classList.contains('show') ).catch(() => false); if (!overlayShown) { console.log(` βœ“ Loading overlay hidden`); } else { console.log(` ⚠️ Loading overlay still visible`); } const totalTime = Date.now() - startTime; console.log(` ⏱️ Load time: ${totalTime}ms`); console.log(` βœ… PAGE LOADED SUCCESSFULLY\n`); } catch (error) { const totalTime = Date.now() - startTime; console.log(` ❌ FAILED: ${error}`); console.log(` ⏱️ Time: ${totalTime}ms\n`); throw error; } } console.log(`${'═'.repeat(60)}`); console.log('βœ… ALL PAGES VERIFIED SUCCESSFULLY'); console.log(`${'═'.repeat(60)}`); });