# 장비 입고 자동화 테스트 ## 개요 이 테스트는 장비 입고 전체 프로세스를 자동으로 실행하고, 에러 발생 시 자동으로 진단하고 수정합니다. ## 주요 기능 ### 1. 자동 데이터 생성 - 필요한 회사, 창고를 자동으로 생성 - 장비 정보를 자동으로 입력 (제조사, 모델명, 시리얼번호 등) - 카테고리 자동 선택 ### 2. 입고 프로세스 실행 - 장비 생성 API 호출 (`/equipment` POST) - 장비 입고 이력 추가 (`/equipment/{id}/history` POST) - 상태 확인 및 검증 ### 3. 에러 자동 처리 - API 에러 발생시 자동 진단 - 누락된 필드 자동 추가 - 타입 불일치 자동 수정 - 참조 데이터 누락시 자동 생성 - 재시도 로직 ### 4. 테스트 시나리오 1. **정상 입고**: 모든 데이터가 올바른 경우 2. **필수 필드 누락**: 제조사, 카테고리 등 필수 필드가 없는 경우 3. **잘못된 참조 ID**: 존재하지 않는 회사/창고 ID 사용 4. **중복 시리얼 번호**: 이미 존재하는 시리얼 번호로 장비 생성 5. **권한 오류**: 접근 권한이 없는 창고에 입고 시도 ## 실행 방법 ### 1. 전체 테스트 실행 ```bash flutter test test/integration/automated/run_equipment_in_test.dart ``` ### 2. 특정 시나리오만 실행 ```bash flutter test test/integration/automated/run_equipment_in_test.dart --name "정상 입고" ``` ### 3. 상세 로그 출력 ```bash flutter test test/integration/automated/run_equipment_in_test.dart --verbose ``` ## 테스트 결과 테스트 실행 시 다음 정보가 출력됩니다: 1. **각 단계별 진행 상황** - 회사/창고 생성 - 장비 데이터 생성 - API 호출 및 응답 - 에러 발생 및 수정 과정 2. **에러 진단 정보** - 에러 타입 (필드 누락, 타입 불일치, 참조 오류 등) - 자동 수정 방법 - 재시도 결과 3. **최종 결과** - 성공/실패 테스트 수 - 자동 수정된 항목 목록 - 실행 시간 ## 주요 구현 내용 ### EquipmentInAutomatedTest 클래스 - `performNormalEquipmentIn()`: 정상 입고 프로세스 실행 - `performEquipmentInWithMissingFields()`: 필수 필드 누락 시나리오 - `performEquipmentInWithInvalidReferences()`: 잘못된 참조 시나리오 - `performEquipmentInWithDuplicateSerial()`: 중복 시리얼 시나리오 - `performEquipmentInWithPermissionError()`: 권한 오류 시나리오 ### 자동 수정 프로세스 1. 에러 발생 감지 2. `ApiErrorDiagnostics`를 통한 에러 진단 3. `AutoFixer`를 통한 데이터 자동 수정 4. `TestDataGenerator`를 통한 필요 데이터 생성 5. 수정된 데이터로 재시도 ## 사용 예시 ```dart // 정상 입고 프로세스 final equipment = Equipment( manufacturer: '삼성전자', name: 'EQ-AUTO-12345', category: '노트북', serialNumber: 'SN-2024-123456', quantity: 1, ); final createdEquipment = await equipmentService.createEquipment(equipment); // 입고 처리 await equipmentService.equipmentIn( equipmentId: createdEquipment.id, quantity: 1, warehouseLocationId: warehouseId, notes: '자동 테스트 입고', ); ``` ## 에러 처리 예시 ```dart // 필수 필드 누락 시 try { await equipmentService.createEquipment(incompleteEquipment); } catch (e) { // 에러 진단 final diagnosis = await errorDiagnostics.diagnoseError(apiError); // 자동 수정 final fixedData = await autoFixer.fixData(data, diagnosis); // 재시도 await equipmentService.createEquipment(fixedData); } ``` ## 주의사항 1. 테스트 실행 전 API 서버가 실행 중이어야 합니다. 2. 테스트 계정 정보가 올바르게 설정되어 있어야 합니다. 3. 테스트 데이터는 자동으로 생성되고 정리됩니다. 4. 실제 운영 환경에서는 실행하지 마세요.