test: 통합 테스트 오류 및 경고 수정
- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정 - 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
This commit is contained in:
277
test/integration/real_api/equipment_real_api_test.dart
Normal file
277
test/integration/real_api/equipment_real_api_test.dart
Normal file
@@ -0,0 +1,277 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:superport/models/equipment_unified_model.dart';
|
||||
import 'package:superport/services/equipment_service.dart';
|
||||
import 'package:superport/services/company_service.dart';
|
||||
import 'package:superport/services/warehouse_service.dart';
|
||||
import 'test_helper.dart';
|
||||
|
||||
void main() {
|
||||
late EquipmentService equipmentService;
|
||||
late CompanyService companyService;
|
||||
late WarehouseService warehouseService;
|
||||
String? authToken;
|
||||
int? createdEquipmentId;
|
||||
int? testCompanyId;
|
||||
int? testWarehouseId;
|
||||
|
||||
setUpAll(() async {
|
||||
await RealApiTestHelper.setupTestEnvironment();
|
||||
|
||||
// 로그인하여 인증 토큰 획득
|
||||
authToken = await RealApiTestHelper.loginAndGetToken();
|
||||
expect(authToken, isNotNull, reason: '로그인에 실패했습니다');
|
||||
|
||||
// 서비스 가져오기
|
||||
equipmentService = GetIt.instance<EquipmentService>();
|
||||
companyService = GetIt.instance<CompanyService>();
|
||||
warehouseService = GetIt.instance<WarehouseService>();
|
||||
|
||||
// 테스트용 회사 가져오기
|
||||
final companies = await companyService.getCompanies(page: 1, perPage: 1);
|
||||
if (companies.isNotEmpty) {
|
||||
testCompanyId = companies.first.id;
|
||||
|
||||
// 테스트용 창고 가져오기
|
||||
final warehouses = await warehouseService.getWarehouseLocations(
|
||||
page: 1,
|
||||
perPage: 1,
|
||||
);
|
||||
if (warehouses.isNotEmpty) {
|
||||
testWarehouseId = warehouses.first.id;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
tearDownAll(() async {
|
||||
await RealApiTestHelper.teardownTestEnvironment();
|
||||
});
|
||||
|
||||
group('Equipment CRUD API 테스트', skip: 'Real API tests - skipping in CI', () {
|
||||
test('장비 목록 조회', () async {
|
||||
final equipments = await equipmentService.getEquipments(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
);
|
||||
|
||||
expect(equipments, isNotNull);
|
||||
expect(equipments, isA<List<Equipment>>());
|
||||
|
||||
if (equipments.isNotEmpty) {
|
||||
final firstEquipment = equipments.first;
|
||||
expect(firstEquipment.id, isNotNull);
|
||||
expect(firstEquipment.name, isNotEmpty);
|
||||
}
|
||||
});
|
||||
|
||||
test('장비 생성', () async {
|
||||
if (testCompanyId == null || testWarehouseId == null) {
|
||||
// 장비를 생성할 회사 또는 창고가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
final newEquipment = Equipment(
|
||||
manufacturer: 'Integration Test Manufacturer',
|
||||
name: 'Integration Test Equipment \${DateTime.now().millisecondsSinceEpoch}',
|
||||
category: 'IT',
|
||||
subCategory: 'Computer',
|
||||
subSubCategory: 'Laptop',
|
||||
serialNumber: 'SN-\${DateTime.now().millisecondsSinceEpoch}',
|
||||
quantity: 1,
|
||||
inDate: DateTime.now(),
|
||||
remark: '통합 테스트용 장비',
|
||||
);
|
||||
|
||||
final createdEquipment = await equipmentService.createEquipment(newEquipment);
|
||||
|
||||
expect(createdEquipment, isNotNull);
|
||||
expect(createdEquipment.id, isNotNull);
|
||||
expect(createdEquipment.name, equals(newEquipment.name));
|
||||
expect(createdEquipment.serialNumber, equals(newEquipment.serialNumber));
|
||||
|
||||
createdEquipmentId = createdEquipment.id;
|
||||
});
|
||||
|
||||
test('장비 상세 조회', () async {
|
||||
if (createdEquipmentId == null) {
|
||||
// 장비 목록에서 첫 번째 장비 ID 사용
|
||||
final equipments = await equipmentService.getEquipments(page: 1, perPage: 1);
|
||||
if (equipments.isEmpty) {
|
||||
// 조회할 장비가 없습니다
|
||||
return;
|
||||
}
|
||||
createdEquipmentId = equipments.first.id;
|
||||
}
|
||||
|
||||
final equipment = await equipmentService.getEquipment(createdEquipmentId!);
|
||||
|
||||
expect(equipment, isNotNull);
|
||||
expect(equipment.id, equals(createdEquipmentId));
|
||||
expect(equipment.name, isNotEmpty);
|
||||
});
|
||||
|
||||
test('장비 정보 수정', () async {
|
||||
if (createdEquipmentId == null) {
|
||||
// 수정할 장비가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
// 먼저 현재 장비 정보 조회
|
||||
final currentEquipment = await equipmentService.getEquipment(createdEquipmentId!);
|
||||
|
||||
// 수정할 정보
|
||||
final updatedEquipment = Equipment(
|
||||
id: currentEquipment.id,
|
||||
manufacturer: currentEquipment.manufacturer,
|
||||
name: '\${currentEquipment.name} - Updated',
|
||||
category: currentEquipment.category,
|
||||
subCategory: currentEquipment.subCategory,
|
||||
subSubCategory: currentEquipment.subSubCategory,
|
||||
serialNumber: currentEquipment.serialNumber,
|
||||
quantity: currentEquipment.quantity,
|
||||
inDate: currentEquipment.inDate,
|
||||
remark: 'Updated equipment',
|
||||
);
|
||||
|
||||
final result = await equipmentService.updateEquipment(createdEquipmentId!, updatedEquipment);
|
||||
|
||||
expect(result, isNotNull);
|
||||
expect(result.id, equals(createdEquipmentId));
|
||||
expect(result.name, contains('Updated'));
|
||||
});
|
||||
|
||||
test('장비 상태별 필터링', () async {
|
||||
// 입고 상태 장비 조회
|
||||
final inStockEquipments = await equipmentService.getEquipments(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
status: 'I', // 입고
|
||||
);
|
||||
|
||||
expect(inStockEquipments, isNotNull);
|
||||
expect(inStockEquipments, isA<List<Equipment>>());
|
||||
|
||||
// 출고 상태 장비 조회
|
||||
final outStockEquipments = await equipmentService.getEquipments(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
status: 'O', // 출고
|
||||
);
|
||||
|
||||
expect(outStockEquipments, isNotNull);
|
||||
expect(outStockEquipments, isA<List<Equipment>>());
|
||||
});
|
||||
|
||||
test('회사별 장비 조회', () async {
|
||||
if (testCompanyId == null) {
|
||||
// 테스트할 회사가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
final companyEquipments = await equipmentService.getEquipments(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
companyId: testCompanyId,
|
||||
);
|
||||
|
||||
expect(companyEquipments, isNotNull);
|
||||
expect(companyEquipments, isA<List<Equipment>>());
|
||||
});
|
||||
|
||||
test('창고별 장비 조회', () async {
|
||||
if (testWarehouseId == null) {
|
||||
// 테스트할 창고가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
final warehouseEquipments = await equipmentService.getEquipments(
|
||||
page: 1,
|
||||
perPage: 10,
|
||||
warehouseLocationId: testWarehouseId,
|
||||
);
|
||||
|
||||
expect(warehouseEquipments, isNotNull);
|
||||
expect(warehouseEquipments, isA<List<Equipment>>());
|
||||
});
|
||||
|
||||
test('장비 삭제', () async {
|
||||
if (createdEquipmentId == null) {
|
||||
// 삭제할 장비가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
// 삭제 실행
|
||||
await equipmentService.deleteEquipment(createdEquipmentId!);
|
||||
|
||||
// 삭제 확인 (404 에러 예상)
|
||||
try {
|
||||
await equipmentService.getEquipment(createdEquipmentId!);
|
||||
fail('삭제된 장비가 여전히 조회됩니다');
|
||||
} catch (e) {
|
||||
// 삭제 성공 - 404 에러가 발생해야 함
|
||||
expect(e.toString(), isNotEmpty);
|
||||
}
|
||||
});
|
||||
|
||||
test('잘못된 ID로 장비 조회 시 에러', () async {
|
||||
try {
|
||||
await equipmentService.getEquipment(999999);
|
||||
fail('존재하지 않는 장비가 조회되었습니다');
|
||||
} catch (e) {
|
||||
// 에러가 발생해야 정상
|
||||
expect(e.toString(), isNotEmpty);
|
||||
}
|
||||
});
|
||||
|
||||
test('필수 정보 없이 장비 생성 시 에러', () async {
|
||||
try {
|
||||
final invalidEquipment = Equipment(
|
||||
manufacturer: '',
|
||||
name: '', // 빈 이름
|
||||
category: '',
|
||||
subCategory: '',
|
||||
subSubCategory: '',
|
||||
quantity: 0,
|
||||
);
|
||||
|
||||
await equipmentService.createEquipment(invalidEquipment);
|
||||
fail('잘못된 데이터로 장비가 생성되었습니다');
|
||||
} catch (e) {
|
||||
// 에러가 발생해야 정상
|
||||
expect(e.toString(), isNotEmpty);
|
||||
}
|
||||
});
|
||||
|
||||
test('중복 시리얼 번호로 장비 생성 시 에러', () async {
|
||||
if (testCompanyId == null || testWarehouseId == null) {
|
||||
// 테스트할 회사 또는 창고가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
// 기존 장비의 시리얼 번호 가져오기
|
||||
final equipments = await equipmentService.getEquipments(page: 1, perPage: 1);
|
||||
if (equipments.isEmpty || equipments.first.serialNumber == null) {
|
||||
// 중복 테스트할 시리얼 번호가 없습니다
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final duplicateEquipment = Equipment(
|
||||
manufacturer: 'Test Manufacturer',
|
||||
name: 'Duplicate Serial Equipment',
|
||||
category: 'IT',
|
||||
subCategory: 'Computer',
|
||||
subSubCategory: 'Laptop',
|
||||
quantity: 1,
|
||||
serialNumber: equipments.first.serialNumber, // 중복 시리얼 번호
|
||||
);
|
||||
|
||||
await equipmentService.createEquipment(duplicateEquipment);
|
||||
fail('중복 시리얼 번호로 장비가 생성되었습니다');
|
||||
} catch (e) {
|
||||
// 에러가 발생해야 정상
|
||||
expect(e.toString(), isNotEmpty);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user