- announcement-board.json 삭제 (공지사항 메뉴 미존재) - bank-account-management.json URL 수정: /settings/bank-account → /settings/accounts - company-info.json URL 수정: /settings/company → /company-info Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
665 lines
21 KiB
JSON
665 lines
21 KiB
JSON
{
|
|
"scenarioId": "work-order-management",
|
|
"scenarioName": "작업지시 관리 (Work Order Management)",
|
|
"screenshotPolicy": {
|
|
"onErrorOnly": true,
|
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
|
},
|
|
"description": "생산관리 - 작업지시 관리 메뉴의 전체 기능 테스트: 목록 조회, 통계 카드, 검색/필터, 등록 (수주 연동 / 수동 등록), 상세 조회, 수정, 작업일지",
|
|
"baseUrl": "https://dev.codebridge-x.com",
|
|
"url": "/ko/production/work-orders",
|
|
"menuNavigation": {
|
|
"level1": "생산관리",
|
|
"level2": "작업지시 관리",
|
|
"expectedUrl": "/ko/production/work-orders"
|
|
},
|
|
"menuNavigationEnhanced": {
|
|
"strategy": "scroll-and-search",
|
|
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
|
|
"level1": "생산관리",
|
|
"level2": "작업지시 관리",
|
|
"alternativeLevel1Names": ["생산관리", "생산 관리", "Production", "제조관리"],
|
|
"alternativeLevel2Names": ["작업지시 목록", "작업지시목록", "Work Orders", "작업지시", "지시서 목록"],
|
|
"scrollConfig": {
|
|
"sidebarSelector": "nav, aside, [role='navigation'], .sidebar, #sidebar",
|
|
"menuItemSelector": "a, button, [role='menuitem'], [role='treeitem']",
|
|
"scrollStep": 200,
|
|
"maxScrollAttempts": 10,
|
|
"scrollDelay": 300
|
|
}
|
|
},
|
|
"testData": {
|
|
"existingWorkOrder": {
|
|
"작업지시번호": "WO202601150001",
|
|
"로트번호": "ORD202601150001",
|
|
"작업상태": "승인대기",
|
|
"발주처": "코브라브릿지",
|
|
"현장명": "테스트현장2",
|
|
"납기일": "2026-01-14",
|
|
"우선순위": "5 (일반)"
|
|
},
|
|
"searchKeyword": "WO2026",
|
|
"manualRegistration": {
|
|
"발주처": "테스트발주처",
|
|
"현장명": "테스트현장",
|
|
"수주번호": "ORD202601170001",
|
|
"품목수": "5"
|
|
}
|
|
},
|
|
"steps": [
|
|
{
|
|
"step": 0,
|
|
"name": "사이드바 메뉴 전체 펼치기",
|
|
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
|
"actions": [
|
|
{
|
|
"type": "evaluate",
|
|
"script": "document.querySelector('.sidebar-scroll')?.scrollTo({top:0,behavior:'instant'})"
|
|
},
|
|
{ "type": "wait", "duration": 300 },
|
|
{
|
|
"type": "evaluate",
|
|
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()"
|
|
},
|
|
{ "type": "wait", "duration": 2000 }
|
|
]
|
|
},
|
|
{
|
|
"step": 1,
|
|
"name": "2단계 메뉴 진입: 생산관리 > 작업지시 목록",
|
|
"description": "사이드바를 스크롤하며 생산관리 > 작업지시 목록 메뉴를 찾아 클릭",
|
|
"actions": [
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "생산관리",
|
|
"alternativeTexts": ["생산관리", "생산 관리", "Production", "제조관리"],
|
|
"scrollContainer": "sidebar",
|
|
"maxAttempts": 10,
|
|
"description": "스크롤하며 생산관리 메뉴 찾기"
|
|
},
|
|
{ "type": "click", "target": "생산관리", "description": "생산관리 메뉴 클릭" },
|
|
{ "type": "wait", "duration": 500, "description": "서브메뉴 펼쳐지기 대기" },
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "작업지시 목록",
|
|
"alternativeTexts": ["작업지시 목록", "작업지시목록", "Work Orders", "작업지시"],
|
|
"scrollContainer": "submenu",
|
|
"maxAttempts": 5,
|
|
"description": "서브메뉴에서 작업지시 목록 찾기"
|
|
},
|
|
{ "type": "click", "target": "작업지시 목록", "description": "작업지시 목록 메뉴 클릭" },
|
|
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 10000 }
|
|
],
|
|
"expected": {
|
|
"url": "/ko/production/work-orders",
|
|
"title": "작업지시 목록",
|
|
"authenticated": true
|
|
},
|
|
"verification": [
|
|
"생산관리 메뉴가 펼쳐졌는지 확인",
|
|
"작업지시 목록 서브메뉴 클릭 성공",
|
|
"404 에러 없이 페이지 로드 완료"
|
|
]
|
|
},
|
|
{
|
|
"step": 2,
|
|
"name": "페이지 제목 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 목록\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 3,
|
|
"name": "페이지 설명 확인",
|
|
"action": "verifyText",
|
|
"selector": "p",
|
|
"expected": "\"생산 작업지시 관리\" 설명 표시"
|
|
},
|
|
{
|
|
"step": 4,
|
|
"name": "등록 버튼 확인",
|
|
"action": "verifyElement",
|
|
"selector": "button[name='등록']",
|
|
"expected": "등록 버튼 표시됨"
|
|
},
|
|
{
|
|
"step": 5,
|
|
"name": "통계 카드 4개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "전체, 작업대기, 작업중, 작업완료 통계 카드 표시"
|
|
},
|
|
{
|
|
"step": 6,
|
|
"name": "통계 카드 데이터 확인",
|
|
"action": "verifyText",
|
|
"expected": "전체(1), 작업대기(1), 작업중(0), 작업완료(0)"
|
|
},
|
|
{
|
|
"step": 7,
|
|
"name": "검색 입력 필드 확인",
|
|
"action": "verifyElement",
|
|
"selector": "textbox[placeholder='작업지시번호, 발주처, 현장명 검색...']",
|
|
"expected": "검색 입력 필드 표시됨"
|
|
},
|
|
{
|
|
"step": 8,
|
|
"name": "상태 필터 탭 6개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "전체, 미배정, 승인대기, 작업대기, 작업중, 작업완료 탭 표시"
|
|
},
|
|
{
|
|
"step": 9,
|
|
"name": "상태 필터 탭 데이터 확인",
|
|
"action": "verifyText",
|
|
"expected": "전체(1), 미배정(0), 승인대기(1), 작업대기(0), 작업중(0), 작업완료(0)"
|
|
},
|
|
{
|
|
"step": 10,
|
|
"name": "테이블 헤더 13개 컬럼 확인",
|
|
"action": "verifyElement",
|
|
"expected": "체크박스, 번호, 작업지시번호, 공정, 로트번호, 지시일, 배정, 작업, 시작, 작업상태, 현장순위, 작업자, 현장명, 출고예정일"
|
|
},
|
|
{
|
|
"step": 11,
|
|
"name": "테이블 데이터 행 확인",
|
|
"action": "verifyElement",
|
|
"expected": "1건의 작업지시 (WO202601150001) 표시"
|
|
},
|
|
{
|
|
"step": 12,
|
|
"name": "작업지시 데이터 내용 확인",
|
|
"action": "verifyText",
|
|
"expected": "작업지시번호: WO202601150001, 로트번호: ORD202601150001, 작업상태: 승인대기, 현장명: 테스트현장2"
|
|
},
|
|
{
|
|
"step": 13,
|
|
"name": "페이지네이션 정보 확인",
|
|
"action": "verifyText",
|
|
"expected": "전체 1개 중 1-1개 표시"
|
|
},
|
|
{
|
|
"step": 14,
|
|
"name": "검색 기능 테스트 - 검색어 입력 (필수 검증 #3)",
|
|
"action": "type",
|
|
"selector": "textbox[placeholder='작업지시번호, 발주처, 현장명 검색...']",
|
|
"value": "WO2026",
|
|
"expected": "검색어 입력됨"
|
|
},
|
|
{
|
|
"step": 15,
|
|
"name": "검색 결과 확인 (필수 검증 #3)",
|
|
"action": "verifyElement",
|
|
"expected": "검색어와 일치하는 데이터 (WO202601150001) 표시"
|
|
},
|
|
{
|
|
"step": 16,
|
|
"name": "검색어 초기화",
|
|
"action": "clear",
|
|
"selector": "textbox[placeholder='작업지시번호, 발주처, 현장명 검색...']",
|
|
"expected": "검색어 초기화됨"
|
|
},
|
|
{
|
|
"step": 17,
|
|
"name": "승인대기 탭 클릭 (필수 검증 #3)",
|
|
"action": "click",
|
|
"selector": "button[name='승인대기 1']",
|
|
"expected": "승인대기 탭 활성화"
|
|
},
|
|
{
|
|
"step": 18,
|
|
"name": "승인대기 필터 결과 확인 (필수 검증 #3)",
|
|
"action": "verifyElement",
|
|
"expected": "승인대기 상태 작업지시 1건 표시"
|
|
},
|
|
{
|
|
"step": 19,
|
|
"name": "전체 탭 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='전체 1']",
|
|
"expected": "전체 탭 활성화"
|
|
},
|
|
{
|
|
"step": 20,
|
|
"name": "전체 필터 결과 확인",
|
|
"action": "verifyElement",
|
|
"expected": "전체 작업지시 1건 표시"
|
|
},
|
|
{
|
|
"step": 21,
|
|
"name": "등록 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='등록']",
|
|
"expected": "등록 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 22,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders/create로 변경 (404 에러 페이지 아님)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 23,
|
|
"name": "작업지시 등록 페이지 제목 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 등록\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 24,
|
|
"name": "취소/등록 버튼 확인",
|
|
"action": "verifyElement",
|
|
"expected": "취소, 등록 버튼 표시됨"
|
|
},
|
|
{
|
|
"step": 25,
|
|
"name": "등록 방식 라디오 버튼 2개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수주 연동 등록, 수동 등록 라디오 버튼 표시"
|
|
},
|
|
{
|
|
"step": 26,
|
|
"name": "기본 선택 상태 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수주 연동 등록이 기본 선택됨"
|
|
},
|
|
{
|
|
"step": 27,
|
|
"name": "수주 정보 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수주 정보 섹션 표시, \"수주 선택\" 버튼 존재"
|
|
},
|
|
{
|
|
"step": 28,
|
|
"name": "수주 연동 모드 - 기본 정보 필드 4개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "발주처, 현장명, 수주번호, 품목수 필드 표시 (모두 disabled)"
|
|
},
|
|
{
|
|
"step": 29,
|
|
"name": "작업지시 정보 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "공정구분, 출고예정일, 우선순위, 담당자 필드 표시"
|
|
},
|
|
{
|
|
"step": 30,
|
|
"name": "비고 필드 확인",
|
|
"action": "verifyElement",
|
|
"expected": "비고 입력 필드 표시"
|
|
},
|
|
{
|
|
"step": 31,
|
|
"name": "수주 선택 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='수주 선택']",
|
|
"expected": "수주 선택 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 32,
|
|
"name": "수주 선택 모달 열림 확인",
|
|
"action": "verifyElement",
|
|
"selector": "dialog[aria-label='수주 선택']",
|
|
"expected": "수주 선택 모달 표시됨"
|
|
},
|
|
{
|
|
"step": 33,
|
|
"name": "모달 제목 확인",
|
|
"action": "verifyText",
|
|
"selector": "h2",
|
|
"expected": "\"수주 선택\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 34,
|
|
"name": "모달 검색 필드 확인",
|
|
"action": "verifyElement",
|
|
"selector": "textbox[placeholder='수주번호, 거래처, 현장명 검색...']",
|
|
"expected": "검색 입력 필드 표시됨"
|
|
},
|
|
{
|
|
"step": 35,
|
|
"name": "모달 상태 메시지 확인",
|
|
"action": "verifyText",
|
|
"expected": "작업지시 가능한 수주 0건 메시지 표시"
|
|
},
|
|
{
|
|
"step": 36,
|
|
"name": "모달 닫기 버튼 확인",
|
|
"action": "verifyElement",
|
|
"selector": "button[name='Close']",
|
|
"expected": "닫기 버튼 표시됨"
|
|
},
|
|
{
|
|
"step": 37,
|
|
"name": "모달 닫기",
|
|
"action": "click",
|
|
"selector": "button[name='Close']",
|
|
"expected": "모달 닫힘"
|
|
},
|
|
{
|
|
"step": 38,
|
|
"name": "모달 닫힘 확인",
|
|
"action": "verifyElement",
|
|
"expected": "모달이 화면에서 사라짐"
|
|
},
|
|
{
|
|
"step": 39,
|
|
"name": "수동 등록 라디오 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "radio[name='수동 등록 (재고생산)']",
|
|
"expected": "수동 등록 라디오 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 40,
|
|
"name": "수동 등록 모드 활성화 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수동 등록이 선택됨"
|
|
},
|
|
{
|
|
"step": 41,
|
|
"name": "수주 정보 섹션 숨김 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수주 정보 섹션이 화면에서 사라짐"
|
|
},
|
|
{
|
|
"step": 42,
|
|
"name": "수동 등록 모드 - 기본 정보 필드 활성화 확인",
|
|
"action": "verifyElement",
|
|
"expected": "발주처, 현장명, 수주번호, 품목수 필드가 입력 가능 (enabled)"
|
|
},
|
|
{
|
|
"step": 43,
|
|
"name": "발주처 필드 placeholder 확인",
|
|
"action": "verifyText",
|
|
"selector": "textbox[placeholder='발주처 입력']",
|
|
"expected": "\"발주처 입력\" placeholder 표시"
|
|
},
|
|
{
|
|
"step": 44,
|
|
"name": "현장명 필드 placeholder 확인",
|
|
"action": "verifyText",
|
|
"selector": "textbox[placeholder='현장명 입력']",
|
|
"expected": "\"현장명 입력\" placeholder 표시"
|
|
},
|
|
{
|
|
"step": 45,
|
|
"name": "공정구분 콤보박스 확인",
|
|
"action": "verifyElement",
|
|
"selector": "combobox[name='공정구분']",
|
|
"expected": "공정구분 드롭다운 표시, 기본값 \"스크린\""
|
|
},
|
|
{
|
|
"step": 46,
|
|
"name": "우선순위 콤보박스 확인",
|
|
"action": "verifyElement",
|
|
"selector": "combobox[name='우선순위']",
|
|
"expected": "우선순위 드롭다운 표시, 기본값 \"5 (일반)\""
|
|
},
|
|
{
|
|
"step": 47,
|
|
"name": "담당자 선택 필드 확인",
|
|
"action": "verifyElement",
|
|
"expected": "담당자 선택 필드 표시, placeholder \"담당자를 선택하세요 (팀/개인)\""
|
|
},
|
|
{
|
|
"step": 48,
|
|
"name": "취소 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='취소']",
|
|
"expected": "취소 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 49,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders로 변경 (목록 페이지로 복귀)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 50,
|
|
"name": "목록 페이지 복귀 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 목록\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 51,
|
|
"name": "작업지시 행 클릭 - 상세 페이지 이동",
|
|
"action": "click",
|
|
"selector": "row[name='WO202601150001']",
|
|
"expected": "작업지시 행 클릭됨"
|
|
},
|
|
{
|
|
"step": 52,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders/1로 변경 (404 에러 페이지 아님)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 53,
|
|
"name": "작업지시 상세 페이지 제목 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 상세\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 54,
|
|
"name": "상세 페이지 버튼 3개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "수정, 작업일지, 목록 버튼 표시"
|
|
},
|
|
{
|
|
"step": 55,
|
|
"name": "기본 정보 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "기본 정보 섹션 표시 (9개 필드)"
|
|
},
|
|
{
|
|
"step": 56,
|
|
"name": "기본 정보 데이터 확인",
|
|
"action": "verifyText",
|
|
"expected": "작업지시번호: WO202601150001, 로트번호: ORD202601150001, 작업상태: 승인대기, 발주처: 코브라브릿지, 현장명: 테스트현장2, 납기일: 2026-01-14, 우선순위: 5 (일반)"
|
|
},
|
|
{
|
|
"step": 57,
|
|
"name": "공정 진행 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "공정 진행 (5단계) 섹션 표시"
|
|
},
|
|
{
|
|
"step": 58,
|
|
"name": "공정 5단계 확인",
|
|
"action": "verifyText",
|
|
"expected": "1. 원단절단, 2. 미싱, 3. 앤드락작업, 4. 중간검사, 5. 포장"
|
|
},
|
|
{
|
|
"step": 59,
|
|
"name": "작업 품목 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "작업 품목 (0건) 섹션 표시"
|
|
},
|
|
{
|
|
"step": 60,
|
|
"name": "작업 품목 빈 상태 메시지 확인",
|
|
"action": "verifyText",
|
|
"expected": "\"등록된 품목이 없습니다.\" 메시지 표시"
|
|
},
|
|
{
|
|
"step": 61,
|
|
"name": "수정 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='수정']",
|
|
"expected": "수정 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 62,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders/1?mode=edit로 변경 (404 에러 페이지 아님)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 63,
|
|
"name": "작업지시 수정 페이지 제목 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 수정\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 64,
|
|
"name": "수정 페이지 작업지시번호 확인",
|
|
"action": "verifyText",
|
|
"expected": "\"(WO202601150001)\" 표시"
|
|
},
|
|
{
|
|
"step": 65,
|
|
"name": "수정 페이지 버튼 2개 확인",
|
|
"action": "verifyElement",
|
|
"expected": "취소, 저장 버튼 표시"
|
|
},
|
|
{
|
|
"step": 66,
|
|
"name": "수정 페이지 기본 정보 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "기본 정보 섹션 표시 (4개 필드)"
|
|
},
|
|
{
|
|
"step": 67,
|
|
"name": "수정 페이지 필드 상태 확인",
|
|
"action": "verifyElement",
|
|
"expected": "발주처(disabled), 현장명(enabled), 수주번호(disabled), 품목수(disabled)"
|
|
},
|
|
{
|
|
"step": 68,
|
|
"name": "수정 페이지 작업지시 정보 섹션 확인",
|
|
"action": "verifyElement",
|
|
"expected": "작업지시 정보 섹션 표시 (4개 필드)"
|
|
},
|
|
{
|
|
"step": 69,
|
|
"name": "수정 페이지 공정구분 확인",
|
|
"action": "verifyElement",
|
|
"selector": "combobox[name='공정구분']",
|
|
"expected": "공정구분 드롭다운 표시"
|
|
},
|
|
{
|
|
"step": 70,
|
|
"name": "수정 페이지 출고예정일 확인",
|
|
"action": "verifyElement",
|
|
"selector": "textbox[name='출고예정일']",
|
|
"expected": "출고예정일 필드 표시, 값: 2026-01-14"
|
|
},
|
|
{
|
|
"step": 71,
|
|
"name": "수정 페이지 우선순위 확인",
|
|
"action": "verifyElement",
|
|
"selector": "combobox[name='우선순위']",
|
|
"expected": "우선순위 드롭다운 표시, 값: 5 (일반)"
|
|
},
|
|
{
|
|
"step": 72,
|
|
"name": "수정 페이지 담당자 필드 확인",
|
|
"action": "verifyElement",
|
|
"expected": "담당자 선택 필드 표시"
|
|
},
|
|
{
|
|
"step": 73,
|
|
"name": "수정 페이지 비고 필드 확인",
|
|
"action": "verifyElement",
|
|
"expected": "비고 입력 필드 표시"
|
|
},
|
|
{
|
|
"step": 74,
|
|
"name": "취소 버튼 클릭 (수정 페이지)",
|
|
"action": "click",
|
|
"selector": "button[name='취소']",
|
|
"expected": "취소 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 75,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders/1로 변경 (상세 페이지로 복귀)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 76,
|
|
"name": "상세 페이지 복귀 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 상세\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 77,
|
|
"name": "목록 버튼 클릭",
|
|
"action": "click",
|
|
"selector": "button[name='목록']",
|
|
"expected": "목록 버튼 클릭됨"
|
|
},
|
|
{
|
|
"step": 78,
|
|
"name": "URL 변경 확인 (필수 검증 #2)",
|
|
"action": "verifyUrl",
|
|
"expected": "URL이 /production/work-orders로 변경 (목록 페이지로 복귀)",
|
|
"validation": {
|
|
"notContains": ["404", "not-found", "error"]
|
|
}
|
|
},
|
|
{
|
|
"step": 79,
|
|
"name": "목록 페이지 복귀 확인",
|
|
"action": "verifyText",
|
|
"selector": "h1",
|
|
"expected": "\"작업지시 목록\" 제목 표시"
|
|
},
|
|
{
|
|
"step": 80,
|
|
"name": "최종 데이터 확인",
|
|
"action": "verifyElement",
|
|
"expected": "1건의 작업지시 (WO202601150001) 표시"
|
|
}
|
|
],
|
|
"expectedAPIs": [
|
|
{
|
|
"description": "작업지시 목록 조회",
|
|
"method": "GET",
|
|
"endpoint": "/api/production/work-orders",
|
|
"expectedStatus": 200
|
|
},
|
|
{
|
|
"description": "작업지시 상세 조회",
|
|
"method": "GET",
|
|
"endpoint": "/api/production/work-orders/1",
|
|
"expectedStatus": 200
|
|
},
|
|
{
|
|
"description": "수주 목록 조회 (작업지시 가능)",
|
|
"method": "GET",
|
|
"endpoint": "/api/sales/orders?status=registered",
|
|
"expectedStatus": 200
|
|
},
|
|
{
|
|
"description": "작업지시 등록",
|
|
"method": "POST",
|
|
"endpoint": "/api/production/work-orders",
|
|
"expectedStatus": 201
|
|
},
|
|
{
|
|
"description": "작업지시 수정",
|
|
"method": "PUT",
|
|
"endpoint": "/api/production/work-orders/1",
|
|
"expectedStatus": 200
|
|
}
|
|
]
|
|
}
|