import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:superport/services/auth_service.dart'; import 'package:superport/services/company_service.dart'; import 'package:superport/services/equipment_service.dart'; import 'package:superport/services/mock_data_service.dart'; import 'package:superport/services/user_service.dart'; import 'package:superport/data/models/auth/auth_user.dart'; import 'package:superport/models/user_model.dart'; import 'mock_data_helpers.dart'; import 'simple_mock_services.mocks.dart'; // Mockito 어노테이션으로 Mock 클래스 생성 @GenerateMocks([ AuthService, CompanyService, MockDataService, EquipmentService, UserService, ]) void main() {} /// 간단한 Mock 서비스 설정 헬퍼 class SimpleMockServiceHelpers { /// AuthService Mock 설정 static void setupAuthServiceMock( MockAuthService mockAuthService, { bool isLoggedIn = false, }) { // isLoggedIn when(mockAuthService.isLoggedIn()) .thenAnswer((_) async => isLoggedIn); // getCurrentUser when(mockAuthService.getCurrentUser()) .thenAnswer((_) async => isLoggedIn ? AuthUser( id: 1, username: 'test_user', name: '테스트 사용자', email: 'test@example.com', role: 'admin', ) : null); } /// CompanyService Mock 설정 static void setupCompanyServiceMock( MockCompanyService mockCompanyService, { bool getCompaniesSuccess = true, bool deleteCompanySuccess = true, int companyCount = 10, }) { // getCompanies if (getCompaniesSuccess) { when(mockCompanyService.getCompanies( page: anyNamed('page'), perPage: anyNamed('perPage'), search: anyNamed('search'), isActive: anyNamed('isActive'), )).thenAnswer((_) async => MockDataHelpers.createMockCompanyList(count: companyCount), ); } else { when(mockCompanyService.getCompanies( page: anyNamed('page'), perPage: anyNamed('perPage'), search: anyNamed('search'), isActive: anyNamed('isActive'), )).thenThrow( Exception('회사 목록을 불러오는 중 오류가 발생했습니다.'), ); } // deleteCompany if (deleteCompanySuccess) { when(mockCompanyService.deleteCompany(any)) .thenAnswer((_) async {}); } else { when(mockCompanyService.deleteCompany(any)) .thenThrow( Exception('회사 삭제 중 오류가 발생했습니다.'), ); } } /// MockDataService Mock 설정 static void setupMockDataServiceMock( MockMockDataService mockDataService, { int companyCount = 10, int userCount = 10, }) { when(mockDataService.getAllCompanies()).thenReturn( MockDataHelpers.createMockCompanyList(count: companyCount) ); when(mockDataService.deleteCompany(any)).thenReturn(null); when(mockDataService.getAllUsers()).thenReturn( MockDataHelpers.createMockUserModelList(count: userCount) ); when(mockDataService.deleteUser(any)).thenReturn(null); when(mockDataService.getCompanyById(any)).thenAnswer((invocation) { final id = invocation.positionalArguments[0] as int; final companies = MockDataHelpers.createMockCompanyList(count: companyCount); return companies.firstWhere( (c) => c.id == id, orElse: () => MockDataHelpers.createMockCompany(id: id), ); }); } /// UserService Mock 설정 static void setupUserServiceMock( MockUserService mockUserService, { bool getUsersSuccess = true, bool deleteUserSuccess = true, bool changeUserStatusSuccess = true, int userCount = 10, }) { // getUsers if (getUsersSuccess) { when(mockUserService.getUsers( page: anyNamed('page'), perPage: anyNamed('perPage'), isActive: anyNamed('isActive'), companyId: anyNamed('companyId'), role: anyNamed('role'), )).thenAnswer((_) async => MockDataHelpers.createMockUserModelList(count: userCount), ); } else { when(mockUserService.getUsers( page: anyNamed('page'), perPage: anyNamed('perPage'), isActive: anyNamed('isActive'), companyId: anyNamed('companyId'), role: anyNamed('role'), )).thenThrow( Exception('사용자 목록을 불러오는 중 오류가 발생했습니다.'), ); } // deleteUser if (deleteUserSuccess) { when(mockUserService.deleteUser(any)) .thenAnswer((_) async {}); } else { when(mockUserService.deleteUser(any)) .thenThrow( Exception('사용자 삭제 중 오류가 발생했습니다.'), ); } // changeUserStatus if (changeUserStatusSuccess) { when(mockUserService.changeUserStatus(any, any)) .thenAnswer((invocation) async { final id = invocation.positionalArguments[0] as int; final isActive = invocation.positionalArguments[1] as bool; return MockDataHelpers.createMockUserModel( id: id, isActive: isActive, ); }); } else { when(mockUserService.changeUserStatus(any, any)) .thenThrow( Exception('사용자 상태 변경 중 오류가 발생했습니다.'), ); } } }