changes
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:tm_app/core/utils/result.dart';
|
||||
import 'package:tm_app/view_models/auth_view_model.dart';
|
||||
|
||||
import '../fixtures/test_fixtures.dart';
|
||||
import '../mocks/mock_auth_repository.dart';
|
||||
|
||||
void main() {
|
||||
group('AuthViewModel Utility Methods', () {
|
||||
late MockAuthRepository mockRepository;
|
||||
late AuthViewModel authViewModel;
|
||||
|
||||
setUp(() {
|
||||
mockRepository = MockAuthRepository();
|
||||
authViewModel = AuthViewModel(authRepository: mockRepository);
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
authViewModel.dispose();
|
||||
});
|
||||
|
||||
group('Password Visibility Toggle', () {
|
||||
test('should toggle password visibility', () {
|
||||
expect(authViewModel.obscurePassword, true);
|
||||
|
||||
authViewModel.togglePasswordVisibility();
|
||||
expect(authViewModel.obscurePassword, false);
|
||||
|
||||
authViewModel.togglePasswordVisibility();
|
||||
expect(authViewModel.obscurePassword, true);
|
||||
});
|
||||
|
||||
test('should toggle forgot password visibility', () {
|
||||
expect(authViewModel.obscureForgotPassword, true);
|
||||
|
||||
authViewModel.toggleForgotPasswordVisibility();
|
||||
expect(authViewModel.obscureForgotPassword, false);
|
||||
|
||||
authViewModel.toggleForgotPasswordVisibility();
|
||||
expect(authViewModel.obscureForgotPassword, true);
|
||||
});
|
||||
});
|
||||
|
||||
group('Message Clearing', () {
|
||||
test('should clear messages', () {
|
||||
// Set some messages first through login error
|
||||
mockRepository.setLoginResult(Result.error(Exception('Login failed')));
|
||||
authViewModel.usernameController.text = 'testuser';
|
||||
authViewModel.passwordController.text = 'wrongpass';
|
||||
|
||||
authViewModel.clearMessages();
|
||||
|
||||
expect(authViewModel.successMessage, null);
|
||||
expect(authViewModel.errorMessage, null);
|
||||
});
|
||||
});
|
||||
|
||||
group('Check Login Status', () {
|
||||
test('should check if user is logged in - true', () async {
|
||||
mockRepository.setCheckIsLoggedInResult(const Result.ok(true));
|
||||
|
||||
await authViewModel.checkIsLoggedIn();
|
||||
|
||||
expect(authViewModel.isLoggedIn, true);
|
||||
});
|
||||
|
||||
test('should check if user is logged in - false', () async {
|
||||
mockRepository.setCheckIsLoggedInResult(const Result.ok(false));
|
||||
|
||||
await authViewModel.checkIsLoggedIn();
|
||||
|
||||
expect(authViewModel.isLoggedIn, false);
|
||||
});
|
||||
|
||||
test('should handle check login error', () async {
|
||||
mockRepository.setCheckIsLoggedInResult(
|
||||
Result.error(Exception('Check failed')),
|
||||
);
|
||||
|
||||
await authViewModel.checkIsLoggedIn();
|
||||
|
||||
expect(authViewModel.isLoggedIn, false);
|
||||
});
|
||||
});
|
||||
|
||||
group('Local Logout', () {
|
||||
test('should perform local logout', () async {
|
||||
// Set a logged in user first
|
||||
authViewModel.usernameController.text = 'testuser';
|
||||
authViewModel.passwordController.text = 'testpass';
|
||||
mockRepository.setLoginResult(
|
||||
const Result.ok(TestFixtures.loginResponse),
|
||||
);
|
||||
await authViewModel.login();
|
||||
|
||||
await authViewModel.localLogout();
|
||||
|
||||
expect(authViewModel.loggedInUser, null);
|
||||
});
|
||||
|
||||
test('should handle local logout exception', () async {
|
||||
mockRepository.setLocalLogoutException(
|
||||
Exception('Local logout failed'),
|
||||
);
|
||||
|
||||
// Should not throw exception
|
||||
await authViewModel.localLogout();
|
||||
|
||||
expect(authViewModel.loggedInUser, null);
|
||||
});
|
||||
});
|
||||
|
||||
group('Text Change Notification', () {
|
||||
test('should notify listeners on text change', () {
|
||||
int notificationCount = 0;
|
||||
|
||||
authViewModel.addListener(() {
|
||||
notificationCount++;
|
||||
});
|
||||
|
||||
// Trigger text change
|
||||
authViewModel.usernameController.text = 'test';
|
||||
|
||||
expect(notificationCount, greaterThan(0));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user