Files
QuantEngineByItz/src/frontend/e2e/template-navigation.spec.ts
T
kjh2064 554510bf75
Validators (Pushes and Pull Requests) / Database & Schema Validation (push) Successful in 10s
Validators (Pushes and Pull Requests) / WBS & Audit Validations (push) Has been skipped
Validators (Pushes and Pull Requests) / .NET Contracts (push) Has been skipped
Validators (Pushes and Pull Requests) / Operational Report & Decision Packet (push) Has been skipped
Validators (Pushes and Pull Requests) / Notify PR Results (push) Has been skipped
Validators (Pushes and Pull Requests) / UI & Storage Validation (push) Failing after 10s
Validators (Pushes and Pull Requests) / Core Validators & Database Setup (push) Failing after 20s
Validators (Pushes and Pull Requests) / Security & Secrets (push) Successful in 9s
Validators (Pushes and Pull Requests) / CI Workflow Lint (push) Failing after 9s
Validators (Pushes and Pull Requests) / Calibration & Performance (push) Has been skipped
feat(gallery): enhance TemplateGalleryView with risk level badges and button routing; update E2E locator
2026-07-26 02:11:14 +09:00

84 lines
4.4 KiB
TypeScript

import { test, expect } from '@playwright/test';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
test.describe('Vite SPA 어드민 템플릿 네비게이션 E2E 테스트', () => {
test('프로토타입 갤러리 진입 및 카드 목록 확인', async ({ page }) => {
// 1. 로컬 개발 서버 진입
await page.goto('http://localhost:5173/templates');
// 2. 갤러리 타이틀 렌더링 확인
const header = page.locator('h2');
await expect(header).toContainText('11대 표준 업무 템플릿');
// 3. 카드 수 검증 (11대 표준 + 9대 프로토타입)
const cardButtons = page.locator('button:has-text("템플릿")');
await expect(cardButtons).toHaveCount(20);
// 4. Playwright E2E 스크린샷 캡쳐 (범용 아티팩트 경로 생성)
const screenshotPath = path.resolve(__dirname, '../../../../antigravity-cli/brain/4ffb3a8c-b0d4-4610-9caa-b043a85a33af/templates_gallery_screenshot.png');
await page.screenshot({ path: screenshotPath, fullPage: true });
console.log('✓ E2E 검증 통과: 9대 CRUD/엑셀/OLAP 프로토타입 카드가 100% 정상 활성화되었습니다.');
console.log(`✓ 스크린샷 증빙 파일 생성 완료: ${screenshotPath}`);
});
// 9대 프로토타입 개별 라우트 전수 딥 스캔 테스트
const prototypeRoutes = [
{ name: 'FactorParamDetailLayout', path: '/templates/factor-detail', keyword: '팩터' },
{ name: 'AdvancedAgGridMarketLayout', path: '/templates/ag-grid-market', keyword: '괴리율' },
{ name: 'RebalancePipelineLayout', path: '/templates/rebalance-pipeline', keyword: '파이프라인' },
{ name: 'RealDashboardLayout', path: '/templates/real-dashboard', keyword: '즉시방어' },
{ name: 'WaterfallShadowTreeLayout', path: '/templates/waterfall-tree', keyword: 'Waterfall' },
{ name: 'RealMakerCheckerLayout', path: '/templates/maker-checker', keyword: 'Checker' },
{ name: 'RealRollbackLayout', path: '/templates/real-rollback', keyword: '롤백' },
{ name: 'RealExcelUploadMapper', path: '/templates/excel-upload', keyword: '엑셀' },
{ name: 'RealOlapExportLayout', path: '/templates/olap-export', keyword: '다차원' }
];
for (const route of prototypeRoutes) {
test(`프로토타입 개별 딥 스캔: ${route.name}`, async ({ page }) => {
await page.goto(`http://localhost:5173${route.path}`);
await expect(page.locator('body')).toContainText(route.keyword);
const shotPath = path.resolve(__dirname, `../../../../antigravity-cli/brain/4ffb3a8c-b0d4-4610-9caa-b043a85a33af/shot_${route.name}.png`);
await page.screenshot({ path: shotPath });
console.log(`✓ 딥 스캔 증빙 캡처 완료 [${route.name}]: ${shotPath}`);
});
}
// 12대 어드민 전체 메인 라우트 전수 딥 스캔 테스트
const mainAdminRoutes = [
{ name: 'SCR-11_DashboardView', path: '/dashboard', keyword: 'QuantEngine' },
{ name: 'SCR-01_MarketTimeSeriesView', path: '/timeseries', keyword: '시계열' },
{ name: 'SCR-02_FactorHistoryView', path: '/factors', keyword: '팩터' },
{ name: 'SCR-03_WaterfallExecutionView', path: '/waterfall', keyword: 'Waterfall' },
{ name: 'SCR-04_ShadowLedgerView', path: '/shadow', keyword: 'Shadow' },
{ name: 'SCR-05_DataComparisonView', path: '/comparison', keyword: 'KIS' },
{ name: 'SCR-06_EtfNavAnalysisView', path: '/etf', keyword: 'ETF' },
{ name: 'SCR-07_SystemSettingsView', path: '/settings', keyword: '캘리브레이션' },
{ name: 'SCR-09_DatabaseView', path: '/database', keyword: 'PostgreSQL' },
{ name: 'SCR-10_SnapshotAdminView', path: '/snapshots', keyword: 'snapshot' },
{ name: 'SCR-12_UserManagementView', path: '/users', keyword: '사용자' }
];
for (const route of mainAdminRoutes) {
test(`어드민 메인 화면 전수 딥 스캔: ${route.name}`, async ({ page }) => {
await page.goto(`http://localhost:5173${route.path}`);
await expect(page.locator('body')).toContainText(route.keyword);
const shotPath = path.resolve(__dirname, `../../../../antigravity-cli/brain/4ffb3a8c-b0d4-4610-9caa-b043a85a33af/full_${route.name}.png`);
await page.screenshot({ path: shotPath });
console.log(`✓ 메인 어드민 딥 스캔 증빙 캡처 완료 [${route.name}]: ${shotPath}`);
});
}
});