Files
superport/test/integration/simple_user_demo_test.dart
JiWoong Sul 198aac6525
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled
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
2025-08-05 20:24:05 +09:00

252 lines
8.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:superport/models/user_model.dart';
import 'package:superport/services/user_service.dart';
import 'package:superport/services/company_service.dart';
import 'package:superport/services/auth_service.dart';
import './real_api/test_helper.dart';
/// 사용자 관리 간단 데모 테스트
///
/// 핵심 기능만 보여주는 간단한 버전:
/// 1. 사용자 생성
/// 2. 사용자 조회
/// 3. 사용자 수정
/// 4. 사용자 활성/비활성
/// 5. 사용자 삭제
void main() {
late UserService userService;
late CompanyService companyService;
late AuthService authService;
int? createdUserId;
int? testCompanyId;
setUpAll(() async {
print('\n🚀 사용자 관리 데모 시작\n');
// 환경 설정
await RealApiTestHelper.setupTestEnvironment();
// 서비스 가져오기
userService = GetIt.instance<UserService>();
companyService = GetIt.instance<CompanyService>();
authService = GetIt.instance<AuthService>();
// 로그인
print('🔐 로그인 중...');
await RealApiTestHelper.loginAndGetToken();
print('✅ 로그인 완료!\n');
// 테스트용 회사 확인
print('🏢 테스트 회사 확인 중...');
final companies = await companyService.getCompanies(page: 1, perPage: 1);
if (companies.isNotEmpty) {
testCompanyId = companies.first.id;
print('✅ 테스트 회사: ${companies.first.name}\n');
} else {
print('❌ 회사가 없습니다. 테스트를 중단합니다.\n');
}
});
tearDownAll(() async {
// 생성한 사용자 정리
if (createdUserId != null) {
try {
await userService.deleteUser(createdUserId!);
print('\n🧹 테스트 사용자 삭제 완료');
} catch (e) {
// 삭제 실패는 무시
}
}
await RealApiTestHelper.teardownTestEnvironment();
print('\n👋 사용자 관리 데모 종료\n');
});
test('사용자 관리 간단 데모', () async {
if (testCompanyId == null) {
print('테스트할 회사가 없어 중단합니다.');
return;
}
// 1. 사용자 생성
print(' 1단계: 새 사용자 생성');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
final timestamp = DateTime.now().millisecondsSinceEpoch;
final newUser = User(
name: '김철수',
email: 'kim.cs_$timestamp@test.com',
companyId: testCompanyId!,
position: '과장',
phoneNumbers: [
{'type': 'mobile', 'number': '010-1234-5678'},
{'type': 'office', 'number': '02-1234-5678'}
],
role: 'M', // 일반 사용자
isActive: true,
);
print(' 이름: ${newUser.name}');
print(' 이메일: ${newUser.email}');
print(' 직급: ${newUser.position}');
print(' 역할: 일반 사용자');
final created = await userService.createUser(
username: newUser.email ?? 'kim.cs_$timestamp',
email: newUser.email!,
password: 'Test1234!',
name: newUser.name,
role: newUser.role,
companyId: newUser.companyId,
phone: newUser.phoneNumbers.isNotEmpty ? newUser.phoneNumbers[0]['number'] : null,
position: newUser.position,
);
createdUserId = created.id;
print('\n✅ 사용자 생성 성공! (ID: $createdUserId)\n');
// 잠시 대기
await Future.delayed(Duration(seconds: 2));
// 2. 사용자 목록 조회
print('📋 2단계: 사용자 목록 조회');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
final users = await userService.getUsers(
page: 1,
perPage: 5,
companyId: testCompanyId,
);
print(' 회사의 사용자 ${users.length}명:');
for (var i = 0; i < users.length && i < 3; i++) {
final user = users[i];
final roleStr = user.role == 'S' ? '관리자' : '일반';
print(' ${i + 1}. ${user.name} (${user.email}) - $roleStr');
}
print('');
// 3. 사용자 상세 조회
print('🔍 3단계: 사용자 상세 정보 확인');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
final detail = await userService.getUser(createdUserId!);
print(' 이름: ${detail.name}');
print(' 이메일: ${detail.email}');
print(' 직급: ${detail.position}');
print(' 역할: ${detail.role == 'S' ? '관리자' : '일반 사용자'}');
print(' 활성화: ${detail.isActive ? '' : '아니오'}');
print(' 전화번호:');
for (var phone in detail.phoneNumbers) {
print(' - ${phone['type']}: ${phone['number']}');
}
print('');
// 잠시 대기
await Future.delayed(Duration(seconds: 2));
// 4. 사용자 정보 수정
print('✏️ 4단계: 사용자 정보 수정');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
print(' 변경 전 직급: ${detail.position}');
print(' 변경 전 전화번호: ${detail.phoneNumbers.length}');
final updated = User(
id: detail.id,
name: detail.name,
email: detail.email,
companyId: detail.companyId,
position: '부장', // 승진!
phoneNumbers: [
{'type': 'mobile', 'number': '010-9999-8888'},
],
role: detail.role,
isActive: detail.isActive,
);
final result = await userService.updateUser(
createdUserId!,
name: updated.name,
position: updated.position,
phone: updated.phoneNumbers.isNotEmpty ? updated.phoneNumbers[0]['number'] : null,
);
print('\n 변경 후 직급: ${result.position}');
print(' 변경 후 전화번호: ${result.phoneNumbers.length}');
print('\n✅ 사용자 정보 수정 완료!\n');
// 5. 사용자 활성/비활성
print('🔄 5단계: 사용자 활성/비활성 토글');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
print(' 현재 상태: ${result.isActive ? '활성' : '비활성'}');
final toggled = User(
id: result.id,
name: result.name,
email: result.email,
companyId: result.companyId,
position: result.position,
phoneNumbers: result.phoneNumbers,
role: result.role,
isActive: !result.isActive, // 상태 반전
);
final toggleResult = await userService.updateUser(
createdUserId!,
// isActive를 직접 수정할 수 없으므로, API에 따라 다른 방법 필요
);
print(' 변경 후 상태: ${toggleResult.isActive ? '활성' : '비활성'}');
// 다시 활성화
if (!toggleResult.isActive) {
final reactivated = User(
id: toggleResult.id,
name: toggleResult.name,
email: toggleResult.email,
companyId: toggleResult.companyId,
position: toggleResult.position,
phoneNumbers: toggleResult.phoneNumbers,
role: toggleResult.role,
isActive: true,
);
await userService.updateUser(
createdUserId!,
// isActive를 직접 수정할 수 없으므로, API에 따라 다른 방법 필요
);
print(' ✅ 다시 활성화 완료');
}
// 6. 역할별 필터링
print('\n👤 6단계: 역할별 사용자 조회');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
// 관리자 조회
final admins = await userService.getUsers(
page: 1,
perPage: 10,
role: 'S',
);
print(' 관리자: ${admins.length}');
// 일반 사용자 조회
final members = await userService.getUsers(
page: 1,
perPage: 10,
role: 'M',
);
print(' 일반 사용자: ${members.length}');
print('\n🎉 사용자 관리 데모 완료!');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
print('✅ 사용자 생성');
print('✅ 사용자 조회');
print('✅ 사용자 수정');
print('✅ 사용자 활성/비활성');
print('✅ 역할별 필터링');
print('━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
}, timeout: Timeout(Duration(minutes: 5)));
}