Files
tm_app/test/view_models/auth_view_model_logout_test.dart
T
amirrezaghabeli 0653cdb6d7 changes
2025-10-06 08:58:36 +03:30

85 lines
2.5 KiB
Dart

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 Logout', () {
late MockAuthRepository mockRepository;
late AuthViewModel authViewModel;
setUp(() {
mockRepository = MockAuthRepository();
authViewModel = AuthViewModel(authRepository: mockRepository);
});
tearDown(() {
authViewModel.dispose();
});
test('should logout successfully', () async {
mockRepository.setLogoutResult(
const Result.ok(TestFixtures.logoutResponse),
);
// 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.logout();
expect(authViewModel.loggedInUser, null);
expect(authViewModel.errorMessage, null); // Cleared after notify
});
test('should handle logout error', () async {
const errorMessage = 'Logout failed';
mockRepository.setLogoutResult(Result.error(Exception(errorMessage)));
await authViewModel.logout();
expect(authViewModel.errorMessage, null); // Cleared after notify
});
test('should perform local logout', () async {
mockRepository.setLogoutResult(
const Result.ok(TestFixtures.logoutResponse),
);
// 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.logout();
expect(authViewModel.loggedInUser, null);
});
test('should clear error message before logout', () async {
mockRepository.setLogoutResult(
const Result.ok(TestFixtures.logoutResponse),
);
// Set an error first
authViewModel.usernameController.text = 'testuser';
authViewModel.passwordController.text = 'wrongpass';
mockRepository.setLoginResult(Result.error(Exception('Login failed')));
await authViewModel.login();
await authViewModel.logout();
expect(authViewModel.errorMessage, null);
});
});
}