136 lines
5.3 KiB
Dart
136 lines
5.3 KiB
Dart
// 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<FakeGoogleAuth> get authentication async => FakeGoogleAuth();
|
|
// }
|
|
|
|
// class FakeGoogleAuth extends Mock {
|
|
// @override
|
|
// Future<String> get idToken async => 'fake_id_token';
|
|
// }
|