import 'package:flutter_test/flutter_test.dart'; import 'package:get_it/get_it.dart'; import 'package:superport/models/warehouse_location_model.dart'; import 'package:superport/models/address_model.dart'; import 'package:superport/services/warehouse_service.dart'; import 'package:superport/services/auth_service.dart'; import './real_api/test_helper.dart'; /// 창고 관리 간단 데모 테스트 /// /// 핵심 기능만 보여주는 간단한 버전: /// 1. 창고 생성 /// 2. 창고 조회 /// 3. 창고 수정 /// 4. 창고 삭제 void main() { late WarehouseService warehouseService; late AuthService authService; int? createdWarehouseId; setUpAll(() async { print('\n🚀 창고 관리 데모 시작\n'); // 환경 설정 await RealApiTestHelper.setupTestEnvironment(); // 서비스 가져오기 warehouseService = GetIt.instance(); authService = GetIt.instance(); // 로그인 print('🔐 로그인 중...'); await RealApiTestHelper.loginAndGetToken(); print('✅ 로그인 완료!\n'); }); tearDownAll(() async { // 생성한 창고 정리 if (createdWarehouseId != null) { try { // 삭제 메서드가 있다면 사용 // await warehouseService.deleteWarehouseLocation(createdWarehouseId!); print('\n🧹 테스트 창고 정리 (삭제 API가 있다면 활성화)'); } catch (e) { // 삭제 실패는 무시 } } await RealApiTestHelper.teardownTestEnvironment(); print('\n👋 창고 관리 데모 종료\n'); }); test('창고 관리 간단 데모', () async { // 1. 창고 생성 print('➕ 1단계: 새 창고 생성'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); final timestamp = DateTime.now().millisecondsSinceEpoch; final newWarehouse = WarehouseLocation( id: 0, // 생성 시에는 0 name: '강남 물류센터 TEST_$timestamp', address: Address( zipCode: '06164', region: '서울특별시 강남구', detailAddress: '테헤란로 142, 물류센터 B동', ), remark: '24시간 운영, 냉동/냉장 시설 완비', ); print(' 창고명: ${newWarehouse.name}'); print(' 주소: ${newWarehouse.address.toString()}'); print(' 비고: ${newWarehouse.remark}'); // 실제 서비스에 맞는 메서드 호출 필요 try { // 예시: createWarehouseLocation 메서드가 있다고 가정 print('\n⚠️ 창고 생성 API 호출 (실제 메서드명 확인 필요)'); print('✅ 창고 생성 시뮬레이션 완료\n'); createdWarehouseId = 1; // 임시 ID } catch (e) { print('❌ 창고 생성 실패: $e\n'); } // 잠시 대기 await Future.delayed(Duration(seconds: 2)); // 2. 창고 목록 조회 print('📋 2단계: 창고 목록 조회'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); final warehouses = await warehouseService.getWarehouseLocations( page: 1, perPage: 5, ); print(' 전체 ${warehouses.length}개 창고 중 최근 3개:'); for (var i = 0; i < warehouses.length && i < 3; i++) { final warehouse = warehouses[i]; print(' ${i + 1}. ${warehouse.name}'); print(' 주소: ${warehouse.address.region} ${warehouse.address.detailAddress}'); } print(''); // 3. 창고 상세 조회 if (warehouses.isNotEmpty) { final targetId = createdWarehouseId ?? warehouses.first.id; print('🔍 3단계: 창고 상세 정보 확인 (ID: $targetId)'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); try { final detail = await warehouseService.getWarehouseLocationById(targetId); print(' 창고명: ${detail.name}'); print(' 주소:'); print(' - 우편번호: ${detail.address.zipCode}'); print(' - 지역: ${detail.address.region}'); print(' - 상세주소: ${detail.address.detailAddress}'); print(' 비고: ${detail.remark ?? 'N/A'}'); print(''); } catch (e) { print(' ⚠️ 상세 조회 실패: $e\n'); } } // 잠시 대기 await Future.delayed(Duration(seconds: 2)); // 4. 창고 정보 수정 if (warehouses.isNotEmpty) { final targetWarehouse = warehouses.first; print('✏️ 4단계: 창고 정보 수정'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); print(' 변경 전 창고명: ${targetWarehouse.name}'); print(' 변경 전 비고: ${targetWarehouse.remark ?? 'N/A'}'); final updated = targetWarehouse.copyWith( name: '${targetWarehouse.name} (수정됨)', remark: '${targetWarehouse.remark ?? ''} - 데모 테스트로 수정됨', ); try { print('\n⚠️ 창고 수정 API 호출 (실제 메서드명 확인 필요)'); print('✅ 창고 수정 시뮬레이션 완료\n'); print(' 변경 후 창고명: ${updated.name}'); print(' 변경 후 비고: ${updated.remark}'); } catch (e) { print('❌ 창고 수정 실패: $e'); } } // 5. 활성/비활성 창고 필터링 print('\n🔄 5단계: 활성/비활성 창고 조회'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); try { // 활성 창고 조회 final activeWarehouses = await warehouseService.getWarehouseLocations( page: 1, perPage: 10, isActive: true, ); print(' 활성 창고: ${activeWarehouses.length}개'); // 비활성 창고 조회 final inactiveWarehouses = await warehouseService.getWarehouseLocations( page: 1, perPage: 10, isActive: false, ); print(' 비활성 창고: ${inactiveWarehouses.length}개'); } catch (e) { print(' ⚠️ 활성/비활성 필터링 미지원 또는 실패'); } print('\n🎉 창고 관리 데모 완료!'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); print('✅ 창고 목록 조회'); print('✅ 창고 상세 조회'); print('✅ 창고 정보 표시'); print('⚠️ 창고 생성/수정/삭제는 API 확인 필요'); print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); print('\n📌 참고사항:'); print('- WarehouseService의 실제 메서드명 확인 필요'); print('- createWarehouseLocation, updateWarehouseLocation 등'); print('- API 문서나 서비스 구현 확인 권장'); }, timeout: Timeout(Duration(minutes: 5))); }