refactor: UI 화면 통합 및 불필요한 파일 정리
- 모든 *_redesign.dart 파일을 기본 화면 파일로 통합 - 백업용 컨트롤러 파일들 제거 (*_controller.backup.dart) - 사용하지 않는 예제 및 테스트 파일 제거 - Clean Architecture 적용 후 남은 정리 작업 완료 - 테스트 코드 정리 및 구조 개선 준비 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -216,10 +216,12 @@ class WarehouseAutomatedTest extends BaseScreenTest {
|
||||
|
||||
@override
|
||||
Future<dynamic> performReadOperation(TestData data) async {
|
||||
return await warehouseService.getWarehouseLocations(
|
||||
final result = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 20,
|
||||
);
|
||||
// PaginatedResponse의 items를 반환하여 List처럼 사용할 수 있도록 함
|
||||
return result.items;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -310,9 +312,9 @@ class WarehouseTestData {
|
||||
final purposes = ['물류', '보관', '배송', '집하', '분류', '냉동', '냉장', '특수', '일반', '대형'];
|
||||
final suffixes = ['창고', '센터', '물류센터', '보관소', '집하장'];
|
||||
|
||||
final type = types[random.nextInt(types.length)];
|
||||
final purpose = purposes[random.nextInt(purposes.length)];
|
||||
final suffix = suffixes[random.nextInt(suffixes.length)];
|
||||
final type = types[random.nextInt(types.items.length)];
|
||||
final purpose = purposes[random.nextInt(purposes.items.length)];
|
||||
final suffix = suffixes[random.nextInt(suffixes.items.length)];
|
||||
final timestamp = DateTime.now().millisecondsSinceEpoch;
|
||||
|
||||
return '$type $purpose$suffix - TEST$timestamp';
|
||||
@@ -329,9 +331,9 @@ class WarehouseTestData {
|
||||
'산업단지', '물류단지', '유통단지', '첨단산업단지', '일반산업단지', '국가산업단지'
|
||||
];
|
||||
|
||||
final city = cities[random.nextInt(cities.length)];
|
||||
final district = districts[random.nextInt(districts.length)];
|
||||
final industrial = industrialAreas[random.nextInt(industrialAreas.length)];
|
||||
final city = cities[random.nextInt(cities.items.length)];
|
||||
final district = districts[random.nextInt(districts.items.length)];
|
||||
final industrial = industrialAreas[random.nextInt(industrialAreas.items.length)];
|
||||
final number = random.nextInt(500) + 1;
|
||||
final detail = '$industrial $number블록 ${random.nextInt(10) + 1}호';
|
||||
|
||||
@@ -360,7 +362,7 @@ class WarehouseTestData {
|
||||
final featureCount = random.nextInt(3) + 1; // 1-3개 특징
|
||||
|
||||
for (int i = 0; i < featureCount; i++) {
|
||||
final feature = features[random.nextInt(features.length)];
|
||||
final feature = features[random.nextInt(features.items.length)];
|
||||
if (!selectedFeatures.contains(feature)) {
|
||||
selectedFeatures.add(feature);
|
||||
}
|
||||
@@ -374,8 +376,8 @@ class WarehouseTestData {
|
||||
final lastNames = ['김', '이', '박', '최', '정', '강', '조', '윤', '장', '임'];
|
||||
final firstNames = ['창고장', '소장', '센터장', '팀장', '과장', '부장', '이사', '실장'];
|
||||
|
||||
final lastName = lastNames[random.nextInt(lastNames.length)];
|
||||
final firstName = firstNames[random.nextInt(firstNames.length)];
|
||||
final lastName = lastNames[random.nextInt(lastNames.items.length)];
|
||||
final firstName = firstNames[random.nextInt(firstNames.items.length)];
|
||||
|
||||
return '$lastName$firstName';
|
||||
}
|
||||
@@ -383,7 +385,7 @@ class WarehouseTestData {
|
||||
// 연락처 생성기
|
||||
static String generateContact() {
|
||||
final areaCodes = ['02', '031', '032', '033', '041', '042', '043', '051', '052', '053'];
|
||||
final areaCode = areaCodes[random.nextInt(areaCodes.length)];
|
||||
final areaCode = areaCodes[random.nextInt(areaCodes.items.length)];
|
||||
final middle = random.nextInt(9000) + 1000;
|
||||
final last = random.nextInt(9000) + 1000;
|
||||
return '$areaCode-$middle-$last';
|
||||
@@ -392,7 +394,7 @@ class WarehouseTestData {
|
||||
// 창고 용량 생성기 (평방미터)
|
||||
static int generateCapacity() {
|
||||
final capacities = [500, 1000, 1500, 2000, 3000, 5000, 10000, 15000, 20000];
|
||||
return capacities[random.nextInt(capacities.length)];
|
||||
return capacities[random.nextInt(capacities.items.length)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,7 +421,7 @@ extension on WarehouseAutomatedTest {
|
||||
await _testWarehouseUpdate(createdWarehouse.id);
|
||||
|
||||
// 6. 창고 검색 테스트
|
||||
await _testWarehouseSearch(createdWarehouse.name.split(' ').first);
|
||||
await _testWarehouseSearch(createdWarehouse.name.split(' ').items.first);
|
||||
|
||||
// 7. 활성/비활성 필터링 테스트
|
||||
await _testActiveFiltering();
|
||||
@@ -458,10 +460,11 @@ extension on WarehouseAutomatedTest {
|
||||
_log('창고 목록 조회 테스트 시작');
|
||||
|
||||
try {
|
||||
final warehouses = await warehouseService.getWarehouseLocations(
|
||||
final warehouseResult = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
);
|
||||
final warehouses = warehouseResult.items;
|
||||
|
||||
_log('창고 목록 조회 성공: ${warehouses.length}개 창고');
|
||||
if (warehouses.isNotEmpty) {
|
||||
@@ -600,12 +603,12 @@ extension on WarehouseAutomatedTest {
|
||||
try {
|
||||
// search 파라미터가 지원되는지 확인
|
||||
final searchResults = await warehouseService.searchWarehouseLocations(
|
||||
keyword: searchKeyword.split(' ').first, // 첫 단어만 사용
|
||||
keyword: searchKeyword.split(' ').items.first, // 첫 단어만 사용
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
);
|
||||
|
||||
_log('검색 결과: ${searchResults.length}개 창고');
|
||||
_log('검색 결과: ${searchResults.items.length}개 창고');
|
||||
testContext.setData('searchResults', searchResults);
|
||||
testContext.setData('searchSuccess', true);
|
||||
} catch (e) {
|
||||
@@ -613,16 +616,17 @@ extension on WarehouseAutomatedTest {
|
||||
|
||||
// 검색 기능이 없으면 전체 목록에서 필터링
|
||||
try {
|
||||
final allWarehouses = await warehouseService.getWarehouseLocations(
|
||||
final allWarehousesResult = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 50,
|
||||
);
|
||||
final allWarehouses = allWarehousesResult.items;
|
||||
|
||||
final filtered = allWarehouses.where((w) =>
|
||||
final filtered = allWarehouses.items.where((w) =>
|
||||
w.name.toLowerCase().contains(searchKeyword.toLowerCase())
|
||||
).toList();
|
||||
|
||||
_log('필터링 결과: ${filtered.length}개 창고');
|
||||
_log('필터링 결과: ${filtered.items.length}개 창고');
|
||||
testContext.setData('searchResults', filtered);
|
||||
testContext.setData('searchSuccess', true);
|
||||
} catch (e2) {
|
||||
@@ -638,21 +642,23 @@ extension on WarehouseAutomatedTest {
|
||||
try {
|
||||
// 활성 창고만 조회
|
||||
_log('활성 창고 조회 중...');
|
||||
final activeWarehouses = await warehouseService.getWarehouseLocations(
|
||||
final activeWarehousesResult = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
isActive: true,
|
||||
);
|
||||
_log('활성 창고: ${activeWarehouses.length}개');
|
||||
final activeWarehouses = activeWarehousesResult.items;
|
||||
_log('활성 창고: ${activeWarehouses.items.length}개');
|
||||
|
||||
// 비활성 창고만 조회
|
||||
_log('비활성 창고 조회 중...');
|
||||
final inactiveWarehouses = await warehouseService.getWarehouseLocations(
|
||||
final inactiveWarehousesResult = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
isActive: false,
|
||||
);
|
||||
_log('비활성 창고: ${inactiveWarehouses.length}개');
|
||||
final inactiveWarehouses = inactiveWarehousesResult.items;
|
||||
_log('비활성 창고: ${inactiveWarehouses.items.length}개');
|
||||
|
||||
testContext.setData('activeWarehouses', activeWarehouses);
|
||||
testContext.setData('inactiveWarehouses', inactiveWarehouses);
|
||||
@@ -850,7 +856,7 @@ extension on WarehouseAutomatedTest {
|
||||
);
|
||||
|
||||
// expect(diagnosis.errorType, equals(ErrorType.missingRequiredField));
|
||||
_log('진단 결과: ${diagnosis.missingFields?.length ?? 0}개 필드 누락');
|
||||
_log('진단 결과: ${diagnosis.missingFields?.items.length ?? 0}개 필드 누락');
|
||||
|
||||
// 자동 수정
|
||||
final fixResult = await autoFixer.attemptAutoFix(diagnosis);
|
||||
@@ -897,7 +903,7 @@ extension on WarehouseAutomatedTest {
|
||||
// 1. 창고별 장비 목록 조회 (초기 상태)
|
||||
_log('창고별 장비 목록 조회 중...');
|
||||
final initialEquipment = await warehouseService.getWarehouseEquipment(warehouse.id);
|
||||
_log('초기 장비 수: ${initialEquipment.length}개');
|
||||
_log('초기 장비 수: ${initialEquipment.items.length}개');
|
||||
|
||||
// 2. 장비 입고 시뮬레이션 (실제로는 Equipment 서비스를 통해 수행)
|
||||
_log('장비 입고 프로세스는 Equipment 서비스에서 처리됩니다');
|
||||
@@ -905,17 +911,17 @@ extension on WarehouseAutomatedTest {
|
||||
// 3. 사용 중인 창고 목록 조회
|
||||
_log('사용 중인 창고 목록 조회 중...');
|
||||
final inUseWarehouses = await warehouseService.getInUseWarehouseLocations();
|
||||
_log('사용 중인 창고 수: ${inUseWarehouses.length}개');
|
||||
_log('사용 중인 창고 수: ${inUseWarehouses.items.length}개');
|
||||
|
||||
// 장비가 있는 창고는 사용 중으로 표시되어야 함
|
||||
if (initialEquipment.isNotEmpty) {
|
||||
final isInUse = inUseWarehouses.any((w) => w.id == warehouse.id);
|
||||
if (initialEquipment.items.isNotEmpty) {
|
||||
final isInUse = inUseWarehouses.items.any((w) => w.id == warehouse.id);
|
||||
// expect(isInUse, isTrue, reason: '장비가 있는 창고가 사용 중으로 표시되지 않았습니다');
|
||||
}
|
||||
|
||||
testContext.setData('equipmentIntegrationSuccess', true);
|
||||
testContext.setData('initialEquipmentCount', initialEquipment.length);
|
||||
testContext.setData('inUseWarehouseCount', inUseWarehouses.length);
|
||||
testContext.setData('initialEquipmentCount', initialEquipment.items.length);
|
||||
testContext.setData('inUseWarehouseCount', inUseWarehouses.items.length);
|
||||
|
||||
} catch (e) {
|
||||
_log('장비 연동 중 오류 발생: $e');
|
||||
@@ -946,7 +952,7 @@ extension on WarehouseAutomatedTest {
|
||||
page: 1,
|
||||
perPage: 100,
|
||||
);
|
||||
_log('전체 창고 수: ${allWarehouses.length}개');
|
||||
_log('전체 창고 수: ${allWarehouses.items.length}개');
|
||||
|
||||
// 2. 활성 창고만 필터링
|
||||
_log('활성 창고만 필터링...');
|
||||
@@ -955,7 +961,7 @@ extension on WarehouseAutomatedTest {
|
||||
perPage: 100,
|
||||
isActive: true,
|
||||
);
|
||||
_log('활성 창고 수: ${activeWarehouses.length}개');
|
||||
_log('활성 창고 수: ${activeWarehouses.items.length}개');
|
||||
|
||||
// 3. 비활성 창고 필터링
|
||||
_log('비활성 창고 필터링...');
|
||||
@@ -964,21 +970,21 @@ extension on WarehouseAutomatedTest {
|
||||
perPage: 100,
|
||||
isActive: false,
|
||||
);
|
||||
_log('비활성 창고 수: ${inactiveWarehouses.length}개');
|
||||
_log('비활성 창고 수: ${inactiveWarehouses.items.length}개');
|
||||
|
||||
// 4. 사용 중인 창고 목록
|
||||
_log('사용 중인 창고 목록 조회...');
|
||||
final inUseWarehouses = await warehouseService.getInUseWarehouseLocations();
|
||||
_log('사용 중인 창고 수: ${inUseWarehouses.length}개');
|
||||
_log('사용 중인 창고 수: ${inUseWarehouses.items.length}개');
|
||||
|
||||
// 검증: 활성 + 비활성 = 전체 (대략적으로)
|
||||
// 페이지네이션 때문에 정확히 일치하지 않을 수 있음
|
||||
|
||||
testContext.setData('inUseManagementSuccess', true);
|
||||
testContext.setData('totalWarehouses', allWarehouses.length);
|
||||
testContext.setData('activeWarehouses', activeWarehouses.length);
|
||||
testContext.setData('inactiveWarehouses', inactiveWarehouses.length);
|
||||
testContext.setData('inUseWarehouses', inUseWarehouses.length);
|
||||
testContext.setData('totalWarehouses', allWarehouses.items.length);
|
||||
testContext.setData('activeWarehouses', activeWarehouses.items.length);
|
||||
testContext.setData('inactiveWarehouses', inactiveWarehouses.items.length);
|
||||
testContext.setData('inUseWarehouses', inUseWarehouses.items.length);
|
||||
|
||||
} catch (e) {
|
||||
_log('사용 중인 창고 관리 중 오류 발생: $e');
|
||||
@@ -1017,7 +1023,8 @@ extension WarehouseServiceExtension on WarehouseService {
|
||||
}) async {
|
||||
// 실제 검색 API가 있다면 사용
|
||||
// 없다면 전체 목록을 가져와서 필터링
|
||||
final all = await getWarehouseLocations(page: page, perPage: perPage * 5);
|
||||
final allResult = await getWarehouseLocations(page: page, perPage: perPage * 5);
|
||||
final all = allResult.items;
|
||||
return all.where((w) =>
|
||||
w.name.toLowerCase().contains(keyword.toLowerCase()) ||
|
||||
(w.address.toString().toLowerCase().contains(keyword.toLowerCase()))
|
||||
|
||||
Reference in New Issue
Block a user