- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정 - TestDataGenerator 제거하고 직접 객체 생성으로 변경 - 모델 필드명 및 타입 불일치 수정 - 불필요한 Either 패턴 사용 제거 - null safety 관련 이슈 해결 수정된 파일: - test/integration/screens/company_integration_test.dart - test/integration/screens/equipment_integration_test.dart - test/integration/screens/user_integration_test.dart - test/integration/screens/login_integration_test.dart
193 lines
6.8 KiB
Dart
193 lines
6.8 KiB
Dart
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<WarehouseService>();
|
||
authService = GetIt.instance<AuthService>();
|
||
|
||
// 로그인
|
||
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)));
|
||
} |