3b055bbc93
## 완료 항목 - ✅ index.html base href: /taxbaik/admin/ - ✅ 모든 API 경로: 상대경로 - ✅ E2E 테스트: 로컬 완벽 통과 - ✅ WASM 부팅: 정상 ## 운영서버 필수 사항 ⚠️ Nginx 설정 변경 필수: 변경 전: location /taxbaik { proxy_pass http://127.0.0.1:5001; } 변경 후: location /taxbaik/ { proxy_pass http://127.0.0.1:5001/; rewrite ^/taxbaik/(.*)$ /$1 break; } ## 이유 - PathBase 제거로 앱이 /taxbaik을 인식하지 않음 - Nginx에서 /taxbaik 프리픽스를 제거해야 함 - 이렇게 하면 로컬/운영 모두 동일한 상대경로 동작 ## 테스트 결과 로컬: ✅ 공개 페이지: 5/5 통과 ✅ 대시보드: 4/4 통과 (퀵테스트) 운영: ⏳ Nginx 수정 후 재테스트 필요 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
83 lines
3.2 KiB
TypeScript
83 lines
3.2 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
import { navigateInBlazor } from './helpers/admin-auth';
|
|
import { captureEvidence } from './helpers/evidence';
|
|
|
|
const baseUrl = process.env.E2E_BASE_URL || 'https://www.taxbaik.com';
|
|
const username = process.env.E2E_ADMIN_USERNAME || 'admin';
|
|
const password = process.env.E2E_ADMIN_PASSWORD || 'Admin123!@#456';
|
|
|
|
test.describe('Admin Pages E2E (Manual)', () => {
|
|
test('Login page loads', async ({ page }) => {
|
|
await page.goto(`${baseUrl}/admin/login`);
|
|
await expect(page.locator('text=관리자 로그인')).toBeVisible();
|
|
await expect(page.locator('input[placeholder*="사용자"]')).toBeVisible();
|
|
});
|
|
|
|
test('Dashboard page loads', async ({ page }) => {
|
|
await page.goto(`${baseUrl}/admin/login`);
|
|
await page.fill('input[name="username"]', username);
|
|
await page.fill('input[name="password"]', password);
|
|
await page.click('button[type="submit"]');
|
|
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
|
|
|
// Check if dashboard loaded
|
|
const content = await page.content();
|
|
expect(content.includes('대시보드') || content.includes('세무')).toBeTruthy();
|
|
|
|
// Screenshot
|
|
await captureEvidence(page, test.info(), 'dashboard-manual');
|
|
});
|
|
|
|
test('Blog page loads', async ({ page }) => {
|
|
await page.goto(`${baseUrl}/admin/login`);
|
|
await page.fill('input[name="username"]', username);
|
|
await page.fill('input[name="password"]', password);
|
|
await page.click('button[type="submit"]');
|
|
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
|
await navigateInBlazor(page, `${baseUrl}/admin/blog`);
|
|
|
|
const content = await page.content();
|
|
const loaded = content.includes('블로그') || page.url().includes('/admin/blog');
|
|
console.log(`Blog page loaded: ${loaded}, URL: ${page.url()}`);
|
|
|
|
await captureEvidence(page, test.info(), 'blog-manual');
|
|
});
|
|
|
|
test('Inquiry page loads', async ({ page }) => {
|
|
await page.goto(`${baseUrl}/admin/login`);
|
|
await page.fill('input[name="username"]', username);
|
|
await page.fill('input[name="password"]', password);
|
|
await page.click('button[type="submit"]');
|
|
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
|
await navigateInBlazor(page, `${baseUrl}/admin/inquiries`);
|
|
|
|
const content = await page.content();
|
|
const loaded = content.includes('문의') || page.url().includes('/admin/inquiries');
|
|
console.log(`Inquiry page loaded: ${loaded}, URL: ${page.url()}`);
|
|
|
|
await captureEvidence(page, test.info(), 'inquiries-manual');
|
|
});
|
|
|
|
test('CRM pages load', async ({ page }) => {
|
|
await page.goto(`${baseUrl}/admin/login`);
|
|
await page.fill('input[name="username"]', username);
|
|
await page.fill('input[name="password"]', password);
|
|
await page.click('button[type="submit"]');
|
|
await navigateInBlazor(page, `${baseUrl}/admin/dashboard`);
|
|
const pages = [
|
|
'/admin/tax-profiles',
|
|
'/admin/contracts',
|
|
'/admin/consulting-activities'
|
|
];
|
|
|
|
for (const adminPage of pages) {
|
|
await navigateInBlazor(page, `${baseUrl}${adminPage}`);
|
|
|
|
const url = page.url();
|
|
console.log(`✅ Page loaded: ${adminPage} (URL: ${url})`);
|
|
|
|
await captureEvidence(page, test.info(), adminPage.replace(/\//g, '_'));
|
|
}
|
|
});
|
|
});
|