// import 'package:flutter/material.dart'; // import 'package:flutter_test/flutter_test.dart'; // import 'package:get/get.dart'; // import 'package:mockito/mockito.dart'; // import 'package:quiz_app/app/routes/app_pages.dart'; // import 'package:quiz_app/component/global_button.dart'; // import 'package:quiz_app/data/controllers/user_controller.dart'; // import 'package:quiz_app/data/entity/user/user_entity.dart'; // import 'package:quiz_app/data/models/login/login_request_model.dart'; // import 'package:quiz_app/data/models/login/login_response_model.dart'; // import 'package:quiz_app/data/services/auth_service.dart'; // import 'package:quiz_app/data/services/google_auth_service.dart'; // import 'package:quiz_app/data/services/user_storage_service.dart'; // import 'package:quiz_app/feature/login/controllers/login_controller.dart'; // class MockAuthService extends Mock implements AuthService {} // class MockUserStorageService extends Mock implements UserStorageService {} // class MockUserController extends Mock implements UserController {} // class MockGoogleAuthService extends Mock implements GoogleAuthService {} // void main() { // late LoginController loginController; // late MockAuthService mockAuthService; // late MockUserStorageService mockUserStorageService; // late MockUserController mockUserController; // late MockGoogleAuthService mockGoogleAuthService; // setUp(() { // mockAuthService = MockAuthService(); // mockUserStorageService = MockUserStorageService(); // mockUserController = MockUserController(); // mockGoogleAuthService = MockGoogleAuthService(); // loginController = LoginController( // mockAuthService, // mockUserStorageService, // mockUserController, // mockGoogleAuthService, // ); // }); // test('Initial state should have button disabled and password hidden', () { // expect(loginController.isButtonEnabled.value, ButtonType.disabled); // expect(loginController.isPasswordHidden.value, true); // }); // test('Button should enable when both fields are not empty', () { // loginController.emailController.text = 'test@example.com'; // loginController.passwordController.text = 'password123'; // loginController.validateFields(); // expect(loginController.isButtonEnabled.value, ButtonType.primary); // }); // test('Button should disable if email or password is empty', () { // loginController.emailController.text = ''; // loginController.passwordController.text = 'password123'; // loginController.validateFields(); // expect(loginController.isButtonEnabled.value, ButtonType.disabled); // }); // test('Toggle password visibility works', () { // final initial = loginController.isPasswordHidden.value; // loginController.togglePasswordVisibility(); // expect(loginController.isPasswordHidden.value, !initial); // }); // test('Successful email login navigates to main page', () async { // final response = LoginResponseModel(id: '1', name: 'John', email: 'john@example.com'); // when(mockAuthService.loginWithEmail(any)).thenAnswer((_) async => response); // when(mockUserStorageService.saveUser(any)).thenAnswer((_) async => {}); // when(mockUserStorageService.isLogged = true).thenReturn(true); // loginController.emailController.text = 'john@example.com'; // loginController.passwordController.text = 'password123'; // await loginController.loginWithEmail(); // verify(mockAuthService.loginWithEmail(any)).called(1); // verify(mockUserStorageService.saveUser(any)).called(1); // verify(mockUserController.setUserFromEntity(any)).called(1); // }); // test('Login with empty fields should show error', () async { // loginController.emailController.text = ''; // loginController.passwordController.text = ''; // await loginController.loginWithEmail(); // expect(loginController.isLoading.value, false); // }); // test('Google login canceled should show error', () async { // when(mockGoogleAuthService.signIn()).thenAnswer((_) async => null); // await loginController.loginWithGoogle(); // verifyNever(mockAuthService.loginWithGoogle(any)); // }); // test('Successful Google login navigates to main page', () async { // final fakeGoogleUser = FakeGoogleUser(); // final response = LoginResponseModel(id: '1', name: 'John', email: 'john@example.com'); // when(mockGoogleAuthService.signIn()).thenAnswer((_) async => fakeGoogleUser); // when(fakeGoogleUser.authentication).thenAnswer((_) async => FakeGoogleAuth()); // when(mockAuthService.loginWithGoogle(any)).thenAnswer((_) async => response); // when(mockUserStorageService.saveUser(any)).thenAnswer((_) async => {}); // when(mockUserStorageService.isLogged = true).thenReturn(true); // await loginController.loginWithGoogle(); // verify(mockAuthService.loginWithGoogle(any)).called(1); // verify(mockUserStorageService.saveUser(any)).called(1); // verify(mockUserController.setUserFromEntity(any)).called(1); // }); // } // /// Fakes for Google Sign-In // class FakeGoogleUser extends Mock { // @override // Future get authentication async => FakeGoogleAuth(); // } // class FakeGoogleAuth extends Mock { // @override // Future get idToken async => 'fake_id_token'; // }