53db2f63e3
- Add Server.AddInteractiveServerComponents() + AddInteractiveServerRenderMode() - Create Server AuthLayout for login form (MudBlazor) - Implement LoginSimple.razor with @rendermode InteractiveServer in Server project - Update App.razor: CascadingAuthenticationState + Router with AppAssembly=Server - Fix Client MudBlazor Providers in MainLayout + AuthLayout - Update Playwright tests: use dynamic selectors for MudTextField (auto-generated IDs) - Build: 0 errors, 0 warnings - API: /api/auth/login fully operational (200 OK confirmed) - Playwright E2E test: 1 passed Architecture: /login → Server InteractiveServer (MudBlazor form) / → Client WebAssembly (Dashboard) /api/* → Server Endpoints Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
58 lines
2.4 KiB
TypeScript
58 lines
2.4 KiB
TypeScript
import { test } from '@playwright/test';
|
|
|
|
test('_framework 파일 로드 확인', async ({ page }) => {
|
|
console.log('\n╔════════════════════════════════════════════════════╗');
|
|
console.log('║ _framework 파일 로드 상태 확인 ║');
|
|
console.log('╚════════════════════════════════════════════════════╝\n');
|
|
|
|
const frameworkRequests: any[] = [];
|
|
|
|
page.on('response', response => {
|
|
const url = response.url();
|
|
if (url.includes('_framework') || url.includes('blazor')) {
|
|
frameworkRequests.push({
|
|
url: url.split('?')[0],
|
|
status: response.status(),
|
|
});
|
|
console.log(`[${response.status()}] ${url.split('?')[0]}`);
|
|
}
|
|
});
|
|
|
|
console.log('페이지 접근...');
|
|
await page.goto('http://localhost:5265/login');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(3000);
|
|
|
|
console.log('\n╔════════════════════════════════════════════════════╗');
|
|
console.log('║ _framework 파일 요약 ║');
|
|
console.log('╚════════════════════════════════════════════════════╝\n');
|
|
|
|
console.log(`총 _framework 요청: ${frameworkRequests.length}\n`);
|
|
|
|
const byStatus: { [key: number]: string[] } = {};
|
|
frameworkRequests.forEach(req => {
|
|
if (!byStatus[req.status]) byStatus[req.status] = [];
|
|
byStatus[req.status].push(req.url);
|
|
});
|
|
|
|
Object.entries(byStatus).forEach(([status, urls]) => {
|
|
console.log(`[${status}] ${urls.length}개`);
|
|
urls.forEach(url => {
|
|
const filename = url.split('/').pop();
|
|
console.log(` ✓ ${filename}`);
|
|
});
|
|
console.log('');
|
|
});
|
|
|
|
const failedCount = (byStatus[404] || []).length + (byStatus[302] || []).length;
|
|
if (failedCount > 0) {
|
|
console.log(`❌ ${failedCount}개의 파일이 로드되지 않음!`);
|
|
} else if (frameworkRequests.length > 0) {
|
|
console.log('✅ 모든 _framework 파일 로드됨');
|
|
} else {
|
|
console.log('❌ _framework 파일이 로드되지 않음');
|
|
}
|
|
|
|
console.log('\n📍 최종 URL:', page.url());
|
|
});
|