test: E2E 5차 전체 테스트 결과 및 개발팀 수정 요청서 (177 PASS / 7 FAIL)

- run-all.js에 --skip-passed 옵션 추가 (이미 성공한 시나리오 건너뛰기)
- 5차 E2E 전체 테스트 결과 리포트 추가 (184개 시나리오, 96.2% 성공률)
- 개발팀 버그 수정 요청서 작성 (미수정 3건: 정렬/필터/리다이렉트)
- 4차 대비 4건 해소, 신규 리그레션 0건

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-25 19:26:11 +09:00
parent 9d272dfaea
commit 851ed29c75
408 changed files with 17331 additions and 0 deletions

View File

@@ -12,6 +12,7 @@
* node e2e/runner/run-all.js --headed # headed (기본값)
* node e2e/runner/run-all.js --headless # headless
* node e2e/runner/run-all.js --exclude sales # 파일명에 "sales" 포함된 것 제외
* node e2e/runner/run-all.js --skip-passed # 이미 성공한 시나리오 건너뛰기
*/
const fs = require('fs');
@@ -44,6 +45,7 @@ const EXCLUDE = (() => {
const idx = args.indexOf('--exclude');
return idx >= 0 && args[idx + 1] ? args[idx + 1] : null;
})();
const SKIP_PASSED = args.includes('--skip-passed');
// ─── Helpers ────────────────────────────────────────────────
@@ -61,6 +63,26 @@ function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
/**
* success/ 폴더의 OK- 리포트에서 이미 성공한 시나리오 ID 집합을 반환.
* 파일명 형식: OK-{scenario-id}_{timestamp}.md
*/
function getPassedScenarioIds() {
const passed = new Set();
if (!fs.existsSync(SUCCESS_DIR)) return passed;
const files = fs.readdirSync(SUCCESS_DIR).filter(f => f.startsWith('OK-') && f.endsWith('.md'));
for (const f of files) {
// OK-accounting-deposit_2026-02-23_20-22-27.md → accounting-deposit
const withoutPrefix = f.substring(3); // remove "OK-"
const tsMatch = withoutPrefix.match(/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}\.md$/);
if (tsMatch) {
const id = withoutPrefix.substring(0, tsMatch.index);
passed.add(id);
}
}
return passed;
}
/** Color console helpers */
const C = {
green: (s) => `\x1b[32m${s}\x1b[0m`,
@@ -1247,6 +1269,7 @@ async function main() {
if (WORKFLOW_ONLY) console.log(`카테고리: workflow only`);
if (FILTER) console.log(`필터: ${FILTER}`);
if (EXCLUDE) console.log(`제외: ${EXCLUDE}`);
if (SKIP_PASSED) console.log(`스킵: 이미 성공한 시나리오 건너뛰기 (--skip-passed)`);
console.log('');
// Ensure directories
@@ -1277,6 +1300,21 @@ async function main() {
scenarioFiles = scenarioFiles.filter((f) => !f.includes(EXCLUDE));
}
// --skip-passed: 이미 성공한 시나리오 건너뛰기
let skippedCount = 0;
if (SKIP_PASSED) {
const passedIds = getPassedScenarioIds();
const before = scenarioFiles.length;
scenarioFiles = scenarioFiles.filter((f) => {
const id = f.replace('.json', '');
return !passedIds.has(id);
});
skippedCount = before - scenarioFiles.length;
if (skippedCount > 0) {
console.log(C.cyan(`이미 성공한 시나리오 ${skippedCount}개 건너뜀 (--skip-passed)\n`));
}
}
const totalScenarios = scenarioFiles.length;
console.log(`시나리오: ${totalScenarios}개 발견\n`);