2026-02-12 09:29:31 +09:00
{
"id" : "full-crud-acc-deposit" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"name" : "Full CRUD 테스트: 입금관리 (금액포맷+상세대조+API검증)" ,
"version" : "2.0.0" ,
2026-02-12 09:29:31 +09:00
"auth" : {
"role" : "admin"
} ,
"menuNavigation" : {
"level1" : "회계관리" ,
"level2" : "입금관리"
} ,
"screenshotPolicy" : {
"captureOnFail" : true ,
"captureOnPass" : false
} ,
"steps" : [
{
"id" : 1 ,
"name" : "[회계관리 > 입금관리] 페이지 로드 대기" ,
"action" : "wait" ,
"timeout" : 3000
} ,
{
"id" : 2 ,
"name" : "[회계관리 > 입금관리] 테이블 로드 대기" ,
"action" : "wait_for_table" ,
"timeout" : 5000
} ,
{
"id" : 3 ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"name" : "[회계관리 > 입금관리] [SETUP] 타임스탬프 초기화 + sessionStorage 저장" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(()=>{const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||(()=>{const n=new Date();const p=v=>v.toString().padStart(2,'0');return n.getFullYear()+p(n.getMonth()+1)+p(n.getDate())+'_'+p(n.getHours())+p(n.getMinutes())+p(n.getSeconds());})();window.__E2E_TS__=ts;try{sessionStorage.setItem('__E2E_TS__',ts);}catch(e){}return JSON.stringify({ok:true,ts});})()" ,
"timeout" : 5000 ,
"phase" : "SETUP"
2026-02-12 09:29:31 +09:00
} ,
{
"id" : 4 ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"name" : "[회계관리 > 입금관리] [CREATE] 입금 등록 버튼 클릭" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'CREATE_OPEN'};const btn=Array.from(document.querySelectorAll('button')).find(b=>/입금.*등록|입금등록|등록/.test(b.innerText?.trim())&&b.offsetParent!==null&&!b.disabled);if(!btn){R.error='등록 버튼 없음';R.ok=false;return JSON.stringify(R);}R.btnText=btn.innerText?.trim();btn.click();await w(2500);R.url=location.pathname+location.search;R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "CREATE"
} ,
{
"id" : 5 ,
"name" : "[회계관리 > 입금관리] [CREATE] 등록 폼 로드 대기" ,
"action" : "wait" ,
"timeout" : 2000
} ,
{
"id" : 6 ,
"name" : "[회계관리 > 입금관리] [CREATE] 입금자명 + 입금금액(50,000) + 적요 입력" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const p=el.tagName==='TEXTAREA'?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;const ns=Object.getOwnPropertyDescriptor(p,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'';const R={phase:'FILL_BASIC',ts};const nameIn=document.querySelector('input[placeholder*=\"입금자명\"]')||document.querySelector('input[placeholder*=\"입금자\"]');if(nameIn){sv(nameIn,'E2E_TEST_입금자_'+ts);R.nameFilled=true;await w(200);}const amtIn=document.querySelector('input[placeholder*=\"입금금액\"]')||document.querySelector('input[placeholder*=\"금액\"]')||document.querySelector('input[type=\"number\"]');if(amtIn){sv(amtIn,'50000');R.amtFilled=true;await w(200);}const noteIn=document.querySelector('input[placeholder*=\"적요\"]')||document.querySelector('textarea[placeholder*=\"적요\"]');if(noteIn){sv(noteIn,'E2E_TEST_입금_'+ts);R.noteFilled=true;await w(200);}const inputs=Array.from(document.querySelectorAll('input[type=\"text\"],input:not([type])')).filter(i=>i.offsetParent!==null&&!i.readOnly&&!i.disabled);const acctInput=inputs.find(i=>{const ph=i.placeholder||'';const nm=i.name||'';const lbl=i.closest('[class*=field],[class*=Field],[class*=form-item]')?.querySelector('label')?.innerText||'';return ph.includes('계좌')||nm.includes('account')||lbl.includes('계좌');});if(acctInput){sv(acctInput,'110-123-456789');R.acctFilled=true;await w(200);}R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 20000 ,
"phase" : "CREATE"
} ,
{
"id" : 7 ,
"name" : "[회계관리 > 입금관리] [CREATE] 금액 포맷 검증: 50000 → '50,000' 콤마 표시" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));await w(300);const R={phase:'AMT_FORMAT_CHECK'};const amtIn=document.querySelector('input[placeholder*=\"입금금액\"]')||document.querySelector('input[placeholder*=\"금액\"]')||document.querySelector('input[type=\"number\"]');if(amtIn){R.rawValue=amtIn.value;R.hasComma=amtIn.value?.includes(',');R.isFormatted=amtIn.value==='50,000'||amtIn.value==='50000';R.info=R.hasComma?'✅ 금액 콤마 포맷: '+amtIn.value:'⚠️ 원시값 표시: '+amtIn.value+' (콤마 미적용 - UI 정책에 따름)';}const pageText=document.body.innerText;R.pageHas50000=pageText.includes('50,000')||pageText.includes('50000');R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 5000 ,
"phase" : "VERIFY"
} ,
{
"id" : 8 ,
"name" : "[회계관리 > 입금관리] [CREATE] 입금유형 콤보박스 선택" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'TYPE_COMBO'};const combos=Array.from(document.querySelectorAll('button[role=\"combobox\"]')).filter(b=>b.offsetParent!==null);R.comboCount=combos.length;for(const cb of combos){const lbl=cb.closest('[class*=field],[class*=Field],[class*=form-item]')?.querySelector('label')?.innerText||'';if(lbl.includes('유형')||lbl.includes('입금유형')){document.body.click();await w(100);cb.scrollIntoView({block:'center'});cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(lb){const opt=lb.querySelector('[role=\"option\"]');if(opt){opt.click();await w(400);R.typeSelected=true;R.typeName=opt.innerText?.trim().substring(0,30);}}else{document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);}break;}}R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "CREATE"
} ,
{
"id" : 9 ,
"name" : "[회계관리 > 입금관리] [CREATE] 거래처 콤보박스 선택" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'VENDOR_COMBO'};const combos=Array.from(document.querySelectorAll('button[role=\"combobox\"]')).filter(b=>b.offsetParent!==null);for(const cb of combos){const lbl=cb.closest('[class*=field],[class*=Field],[class*=form-item]')?.querySelector('label')?.innerText||'';if(lbl.includes('거래처')){document.body.click();await w(100);cb.scrollIntoView({block:'center'});cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(lb){const opt=lb.querySelector('[role=\"option\"]');if(opt){opt.click();await w(400);R.vendorSelected=true;R.vendorName=opt.innerText?.trim().substring(0,30);}}else{document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);}break;}}R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "CREATE"
} ,
{
"id" : 10 ,
"name" : "[회계관리 > 입금관리] [CREATE] 입금일 날짜 선택 (오늘)" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'DATE_SELECT'};const formArea=document.querySelector('main')||document.querySelector('[class*=\"content\"]')||document.body;const dateButtons=Array.from(formArea.querySelectorAll('button')).filter(b=>b.innerText?.trim()==='날짜 선택'&&b.offsetParent!==null);for(const db of dateButtons){db.scrollIntoView({block:'center'});await w(100);db.click();await w(500);if(!document.querySelector('table[class*=\"rdp\"],.rdp-month,[role=\"grid\"]')){db.click();await w(600);}const today=document.querySelector('[aria-selected=\"true\"]')||document.querySelector('button[name=\"day\"].bg-primary')||document.querySelector('.rdp-day_today button')||Array.from(document.querySelectorAll('button[name=\"day\"],td[role=\"gridcell\"] button,.rdp-day button')).find(b=>b.getAttribute('aria-selected')==='true'||b.classList.contains('bg-primary')||b.tabIndex===0)||document.querySelector('button[name=\"day\"]')||document.querySelector('td[role=\"gridcell\"] button');if(today){today.click();await w(300);R.dateSelected=true;}else{document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);}break;}R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "CREATE"
} ,
{
"id" : 11 ,
"name" : "[회계관리 > 입금관리] [CREATE] 등록 클릭" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const toastInfo=()=>{const t=document.querySelectorAll('[data-sonner-toast],[role=\"status\"],[class*=\"toast\"],[class*=\"Toast\"],[class*=\"Toaster\"] [data-content]');return{count:t.length,text:t.length>0?Array.from(t).pop()?.innerText?.trim().substring(0,100):''};};const R={phase:'SUBMIT'};const sub=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='등록'&&b.offsetParent!==null&&!b.disabled);if(!sub){R.error='등록 버튼 없음';R.ok=false;return JSON.stringify(R);}sub.click();await w(3000);R.toast=toastInfo();R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 20000 ,
"phase" : "CREATE"
} ,
{
"id" : 12 ,
"name" : "[회계관리 > 입금관리] [CREATE] API POST 검증" ,
"action" : "evaluate" ,
2026-03-04 11:42:23 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));await w(500);const R={phase:'API_POST_CHECK'};const logs=(window.__E2E__?window.__E2E__.getApiLogs().logs:[]);const postLogs=logs.filter(l=>l.method==='POST'&&l.status>=200&&l.status<300);R.postCount=postLogs.length;R.found=postLogs.length>0;if(postLogs.length>0){const last=postLogs[postLogs.length-1];R.url=last.url?.substring(0,80);R.status=last.status;R.duration=last.duration;}R.ok=true;R.info=R.found?'✅ POST '+R.status+' ('+R.duration+'ms)':'⚠️ POST 미감지 (API 모니터 범위 밖일 수 있음)';return JSON.stringify(R);})()" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"timeout" : 5000 ,
"phase" : "VERIFY"
} ,
{
"id" : 13 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [CREATE] 생성 후 대기" ,
"action" : "wait" ,
"timeout" : 3000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 14 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [CREATE] 목록 복귀" ,
"action" : "evaluate" ,
2026-02-13 13:14:10 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const onForm=location.search.includes('mode=new')||location.search.includes('mode=edit')||location.search.includes('mode=view')||new RegExp('/(new|[0-9]+|[0-9a-f]{8,})$').test(location.pathname);if(onForm){const btn=Array.from(document.querySelectorAll('button,a')).find(b=>/목록|취소|뒤로/.test(b.innerText?.trim()));if(btn){btn.click();await w(2000);}else{history.back();await w(2000);}}return JSON.stringify({url:location.pathname+location.search});})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 10000 ,
"phase" : "CREATE"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 15 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [CREATE] 목록 안정화 대기" ,
"action" : "wait" ,
"timeout" : 2000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 16 ,
"name" : "[회계관리 > 입금관리] [VERIFY] 생성 데이터 확인 + 목록 행 캡처" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'E2E_TEST_';const R={phase:'VERIFY_CREATE'};await w(500);const rows=document.querySelectorAll('table tbody tr');R.rowCount=rows.length;let found=Array.from(rows).find(r=>r.innerText?.includes('E2E_TEST_'));if(!found){const ths=document.querySelectorAll('table thead th');const sortTh=Array.from(ths).find(th=>/일자|날짜|No|번호/.test(th.innerText?.trim()));if(sortTh){sortTh.click();await w(1500);sortTh.click();await w(1500);}const rows2=document.querySelectorAll('table tbody tr');found=Array.from(rows2).find(r=>r.innerText?.includes('E2E_TEST_'));R.rowCount=rows2.length;if(found)R.info='found after sort';}R.found=!!found;R.ok=R.found;if(found){R.foundText=found.innerText?.substring(0,100);const cells=found.querySelectorAll('td');window.__E2E_LIST_ROW__={};const colNames=['checkbox','no','depositNo','depositorName','depositDate','depositType','amount','vendor','account','remark'];cells.forEach((cell,i)=>{const key=colNames[i]||('col'+i);window.__E2E_LIST_ROW__[key]=cell.innerText?.trim();});}return JSON.stringify(R);})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 15000 ,
"phase" : "VERIFY"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 17 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [READ] 상세 페이지 진입" ,
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'READ'};let row;for(let i=0;i<3;i++){const rows=Array.from(document.querySelectorAll('table tbody tr'));row=rows.find(r=>r.innerText?.includes('E2E_TEST_'));if(row)break;await w(1000);}if(!row){R.error='E2E_TEST_ 행 없음';R.ok=false;return JSON.stringify(R);}row.click();await w(2500);R.detailUrl=location.pathname+location.search;R.ok=true;return JSON.stringify(R);})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 15000 ,
"phase" : "READ"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 18 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [READ] 상세 페이지 대기" ,
"action" : "wait" ,
"timeout" : 2000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 19 ,
"name" : "[회계관리 > 입금관리] [READ] 목록↔상세 필드 1:1 대조 (detail roundtrip)" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'DETAIL_ROUNDTRIP'};const listRow=window.__E2E_LIST_ROW__||{};R.hasListData=Object.keys(listRow).length>0;const norm=s=>(s||'').replace(/[,\\s]/g,'').trim();const pageText=document.body.innerText;const inputs=Array.from(document.querySelectorAll('input,textarea,select')).filter(i=>i.offsetParent!==null);const allValues=[...inputs.map(i=>i.value)];const matches={};const checks=['depositNo','depositorName','depositDate','depositType','amount','vendor','remark'];checks.forEach(key=>{const val=listRow[key];if(!val||val==='')return;const nv=norm(val);const found=pageText.includes(val)||pageText.includes(nv)||norm(pageText).includes(nv)||allValues.some(v=>v?.includes(val)||norm(v)===nv||norm(v).includes(nv));matches[key]={expected:val,found};});R.matches=matches;const matchCount=Object.values(matches).filter(m=>m.found).length;const totalChecks=Object.keys(matches).length;R.matchCount=matchCount;R.totalChecks=totalChecks;R.matchRate=totalChecks>0?Math.round(matchCount/totalChecks*100)+'%':'N/A';R.ok=matchCount>=Math.max(1,Math.ceil(totalChecks*0.4));R.info='상세 대조: '+R.matchCount+'/'+R.totalChecks+' ('+R.matchRate+')';return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "VERIFY"
} ,
{
"id" : 20 ,
"name" : "[회계관리 > 입금관리] [READ] 상세 데이터 검증 (입금자+금액50000+적요)" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'';const R={phase:'READ_VERIFY'};R.url=location.pathname+location.search;const pageText=document.body.innerText;const inputs=Array.from(document.querySelectorAll('input,textarea')).filter(i=>i.offsetParent!==null);R.fieldCount=inputs.length;R.hasE2E=pageText.includes('E2E_TEST_')||inputs.some(i=>i.value?.includes('E2E_TEST_'));const hasAmount=pageText.includes('50,000')||pageText.includes('50000')||inputs.some(i=>{const v=(i.value||'').replace(/,/g,'');return v==='50000';});R.fieldChecks={hasE2E:R.hasE2E,hasAmount};R.ok=R.hasE2E;R.info='E2E='+R.hasE2E+' amount='+hasAmount;return JSON.stringify(R);})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 15000 ,
"phase" : "READ"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 21 ,
"name" : "[회계관리 > 입금관리] [UPDATE] 수정 모드 진입" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'UPDATE_ENTER'};const editBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='수정'&&b.offsetParent!==null);if(!editBtn){R.error='수정 버튼 없음';R.ok=false;return JSON.stringify(R);}editBtn.click();await w(2000);R.editUrl=location.pathname+location.search;R.isEditMode=location.search.includes('mode=edit');const inputs=Array.from(document.querySelectorAll('input[type=\"text\"],input[type=\"number\"],input:not([type]),textarea')).filter(i=>i.offsetParent!==null&&!i.readOnly&&!i.disabled);R.editableFields=inputs.length;R.ok=R.editableFields>0||R.isEditMode;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
2026-02-12 09:29:31 +09:00
"phase" : "UPDATE"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 22 ,
"name" : "[회계관리 > 입금관리] [UPDATE] 금액 50,000→75,000 변경 + 적요 수정" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const p=el.tagName==='TEXTAREA'?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;const ns=Object.getOwnPropertyDescriptor(p,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'';const R={phase:'UPDATE_FIELDS'};const amtIn=document.querySelector('input[placeholder*=\"입금금액\"]')||document.querySelector('input[placeholder*=\"금액\"]')||document.querySelector('input[type=\"number\"]');if(amtIn){R.oldAmt=amtIn.value;sv(amtIn,'75000');R.newAmt='75000';await w(300);}const noteIn=document.querySelector('input[placeholder*=\"적요\"]')||document.querySelector('textarea[placeholder*=\"적요\"]');if(noteIn){sv(noteIn,'E2E_수정됨_'+ts);R.noteModified=true;await w(200);}else{const inputs=Array.from(document.querySelectorAll('input[type=\"text\"],textarea')).filter(i=>i.offsetParent!==null&&!i.readOnly&&!i.disabled);const note=inputs.find(i=>{const ph=i.placeholder||'';const nm=i.name||'';const lbl=i.closest('[class*=field],[class*=Field],[class*=form-item]')?.querySelector('label')?.innerText||'';return ph.includes('적요')||nm.includes('note')||nm.includes('remark')||lbl.includes('적요');});if(note){sv(note,'E2E_수정됨_'+ts);R.noteModified=true;await w(200);}}await w(500);R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "UPDATE"
} ,
{
"id" : 23 ,
"name" : "[회계관리 > 입금관리] [UPDATE] 금액 변경 포맷 검증: 75,000 표시 확인" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));await w(300);const R={phase:'AMT_UPDATE_FORMAT'};const pageText=document.body.innerText;const inputs=Array.from(document.querySelectorAll('input')).filter(i=>i.offsetParent!==null);R.pageHas75000=pageText.includes('75,000')||pageText.includes('75000');const amtIn=document.querySelector('input[placeholder*=\"입금금액\"]')||document.querySelector('input[placeholder*=\"금액\"]')||document.querySelector('input[type=\"number\"]');if(amtIn){R.amtValue=amtIn.value;R.isFormatted=amtIn.value==='75,000'||amtIn.value==='75000';}R.ok=true;R.info=R.pageHas75000?'✅ 75,000 감지됨':'⚠️ 75,000 미감지 - 저장 후 확인 필요';return JSON.stringify(R);})()" ,
"timeout" : 5000 ,
"phase" : "VERIFY"
} ,
{
"id" : 24 ,
"name" : "[회계관리 > 입금관리] [UPDATE] 저장 클릭" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const toastInfo=()=>{const t=document.querySelectorAll('[data-sonner-toast],[role=\"status\"],[class*=\"toast\"],[class*=\"Toast\"],[class*=\"Toaster\"] [data-content]');return{count:t.length,text:t.length>0?Array.from(t).pop()?.innerText?.trim().substring(0,100):''};};const R={phase:'UPDATE_SAVE'};const editBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='수정');const saveBtn=Array.from(document.querySelectorAll('button')).find(b=>/저장|수정|확인/.test(b.innerText?.trim())&&b!==editBtn&&b.offsetParent!==null&&!b.disabled);if(saveBtn){saveBtn.click();await w(3000);}R.toast=toastInfo();R.ok=true;return JSON.stringify(R);})()" ,
"timeout" : 20000 ,
"phase" : "UPDATE"
} ,
{
"id" : 25 ,
"name" : "[회계관리 > 입금관리] [UPDATE] API PUT/PATCH 검증" ,
"action" : "evaluate" ,
2026-03-04 11:42:23 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));await w(500);const R={phase:'API_PUT_CHECK'};const logs=(window.__E2E__?window.__E2E__.getApiLogs().logs:[]);const putLogs=logs.filter(l=>(l.method==='PUT'||l.method==='PATCH')&&l.status>=200&&l.status<300);R.putCount=putLogs.length;R.found=putLogs.length>0;if(putLogs.length>0){const last=putLogs[putLogs.length-1];R.url=last.url?.substring(0,80);R.status=last.status;R.duration=last.duration;}R.ok=true;R.info=R.found?'✅ PUT/PATCH '+R.status+' ('+R.duration+'ms)':'⚠️ PUT/PATCH 미감지';return JSON.stringify(R);})()" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"timeout" : 5000 ,
"phase" : "VERIFY"
} ,
{
"id" : 26 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [UPDATE] 저장 후 대기" ,
"action" : "wait" ,
"timeout" : 3000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 27 ,
"name" : "[회계관리 > 입금관리] [UPDATE] 수정 내용 검증 (적요 수정됨 + 금액 75,000)" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'VERIFY_UPDATE'};R.url=location.pathname+location.search;const notInEdit=!location.search.includes('mode=edit');const pageText=document.body.innerText;const inputs=Array.from(document.querySelectorAll('input,textarea')).filter(i=>i.offsetParent!==null);const hasModified=pageText.includes('수정됨')||inputs.some(i=>i.value?.includes('수정됨'));const hasNewAmount=pageText.includes('75,000')||pageText.includes('75000')||inputs.some(i=>{const v=(i.value||'').replace(/,/g,'');return v==='75000';});const toasts=document.querySelectorAll('[data-sonner-toast],[role=\"status\"],[class*=\"toast\"],[class*=\"Toast\"]');const toastOk=Array.from(toasts).some(t=>/수정|완료|저장|성공/.test(t.innerText));R.hasModified=hasModified;R.hasNewAmount=hasNewAmount;R.toastOk=toastOk;R.notInEdit=notInEdit;R.ok=notInEdit||hasModified||toastOk;R.info='수정됨='+hasModified+' 75000='+hasNewAmount+' toast='+toastOk;return JSON.stringify(R);})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 15000 ,
"phase" : "UPDATE"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 28 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [UPDATE] 목록 복귀" ,
"action" : "evaluate" ,
2026-02-13 13:14:10 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const onForm=location.search.includes('mode=new')||location.search.includes('mode=edit')||location.search.includes('mode=view')||new RegExp('/(new|[0-9]+|[0-9a-f]{8,})$').test(location.pathname);if(onForm){const btn=Array.from(document.querySelectorAll('button,a')).find(b=>/목록|취소|뒤로/.test(b.innerText?.trim()));if(btn){btn.click();await w(2000);}else{history.back();await w(2000);}}return JSON.stringify({url:location.pathname+location.search});})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 10000 ,
"phase" : "UPDATE"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 29 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [UPDATE] 목록 안정화 대기" ,
"action" : "wait" ,
"timeout" : 2000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 30 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [DELETE] 데이터 삭제" ,
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'E2E_TEST_';const toastInfo=()=>{const t=document.querySelectorAll('[data-sonner-toast],[role=\"status\"],[class*=\"toast\"],[class*=\"Toast\"],[class*=\"Toaster\"] [data-content]');return{count:t.length,text:t.length>0?Array.from(t).pop()?.innerText?.trim().substring(0,100):''};};const R={phase:'DELETE'};if(!location.search.includes('mode=view')&&!location.search.includes('mode=edit')){const rows=Array.from(document.querySelectorAll('table tbody tr'));const row=rows.find(r=>r.innerText?.includes('E2E_TEST_'));if(!row){R.error='E2E_TEST_ 행 없음';R.ok=false;return JSON.stringify(R);}row.click();await w(2500);}const delBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='삭제'&&b.offsetParent!==null);if(!delBtn){R.error='삭제 버튼 없음';R.ok=false;return JSON.stringify(R);}delBtn.click();await w(1000);const cfm=Array.from(document.querySelectorAll('[role=\"alertdialog\"] button,[role=\"dialog\"] button,button')).find(b=>/확인|삭제|예|Yes/.test(b.innerText?.trim())&&b!==delBtn&&b.offsetParent!==null);if(cfm){cfm.click();await w(3000);}R.toast=toastInfo();R.ok=true;return JSON.stringify(R);})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 30000 ,
"phase" : "DELETE" ,
"critical" : true
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 31 ,
"name" : "[회계관리 > 입금관리] [DELETE] API DELETE 검증" ,
"action" : "evaluate" ,
2026-03-04 11:42:23 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));await w(500);const R={phase:'API_DELETE_CHECK'};const logs=(window.__E2E__?window.__E2E__.getApiLogs().logs:[]);const delLogs=logs.filter(l=>l.method==='DELETE'&&l.status>=200&&l.status<300);R.deleteCount=delLogs.length;R.found=delLogs.length>0;if(delLogs.length>0){const last=delLogs[delLogs.length-1];R.url=last.url?.substring(0,80);R.status=last.status;R.duration=last.duration;}R.ok=true;R.info=R.found?'✅ DELETE '+R.status+' ('+R.duration+'ms)':'⚠️ DELETE 미감지';return JSON.stringify(R);})()" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"timeout" : 5000 ,
"phase" : "VERIFY"
} ,
{
"id" : 32 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [DELETE] 삭제 후 대기" ,
"action" : "wait" ,
"timeout" : 3000
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 33 ,
2026-02-12 09:29:31 +09:00
"name" : "[회계관리 > 입금관리] [DELETE] 목록 복귀" ,
"action" : "evaluate" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const onForm=location.search.includes('mode=new')||location.search.includes('mode=edit')||location.search.includes('mode=view')||new RegExp('/(new|[0-9]+|[0-9a-f]{8,})$').test(location.pathname);if(onForm){const btn=Array.from(document.querySelectorAll('button,a')).find(b=>/목록|취소|뒤로/.test(b.innerText?.trim()));if(btn){btn.click();await w(2000);}else{history.back();await w(2000);}}await w(2000);return JSON.stringify({url:location.pathname+location.search});})()" ,
2026-02-12 09:29:31 +09:00
"timeout" : 10000 ,
"phase" : "DELETE"
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 34 ,
"name" : "[회계관리 > 입금관리] [VERIFY] 삭제 확인 (목록에서 E2E_TEST_ 미존재)" ,
"action" : "evaluate" ,
"script" : "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const ts=window.__E2E_TS__||sessionStorage.getItem('__E2E_TS__')||'';const R={phase:'VERIFY_DELETE'};await w(1000);if(location.search.includes('mode=view')){const btn=Array.from(document.querySelectorAll('button,a')).find(b=>/목록/.test(b.innerText?.trim()));if(btn){btn.click();await w(2000);}else{history.back();await w(2000);}}const rows=document.querySelectorAll('table tbody tr');R.rowCount=rows.length;const found=Array.from(rows).find(r=>r.innerText?.includes(ts));R.stillExists=!!found;R.ok=!found;R.ts=ts;R.info=R.ok?'✅ 삭제 완료 - 목록에 테스트 데이터 없음':'❌ 삭제 후에도 데이터 존재';return JSON.stringify(R);})()" ,
"timeout" : 15000 ,
"phase" : "VERIFY"
2026-02-12 09:29:31 +09:00
} ,
{
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"id" : 35 ,
"name" : "[회계관리 > 입금관리] [VERIFY] API 호출 전체 요약" ,
2026-02-12 09:29:31 +09:00
"action" : "evaluate" ,
2026-03-04 11:42:23 +09:00
"script" : "(()=>{const logs=(window.__E2E__?window.__E2E__.getApiLogs().logs:[]);const R={phase:'API_SUMMARY',total:logs.length,success:logs.filter(l=>l.ok||l.status<400).length,failed:logs.filter(l=>!l.ok&&l.status>=400).length,avgResponseTime:logs.length>0?Math.round(logs.reduce((s,l)=>s+(l.duration||0),0)/logs.length):0,slowCalls:logs.filter(l=>l.duration>2000).length,methods:{}};logs.forEach(l=>{R.methods[l.method]=(R.methods[l.method]||0)+1;});R.ok=true;R.info='API: '+R.total+'건 (성공:'+R.success+' 실패:'+R.failed+' 평균:'+R.avgResponseTime+'ms)';return JSON.stringify(R);})()" ,
refactor: TOP 10 시나리오 고도화 - 사람 수준 테스트케이스 (206/206 ALL PASS)
- full-crud-acc-sales: 20→33 스텝 (계산검증, API검증, detail roundtrip)
- full-crud-acc-deposit: 20→35 스텝 (전수필드, 금액포맷, 입금유형 콤보)
- full-crud-acc-bills: 20→32 스텝 (date picker, 금액검증, API요약)
- full-crud-board: 23→33 스텝 (API POST/PUT/DELETE, 삭제취소, 본문검증)
- sales-order: 25→32 스텝 (콤보박스, 품목입력, 자동계산, 상태검증)
- sales-quotation: 25→32 스텝 (콤보박스, 견적계산, PDF버튼, API검증)
- production-work-order: 25→30 스텝 (전수필드, 상태워크플로우, 콘솔에러)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:11:47 +09:00
"timeout" : 5000 ,
2026-02-12 09:29:31 +09:00
"phase" : "VERIFY"
}
]
}