-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #118 from fga-eps-mds/test/edit_delete_user
test(#59):adiciona teste view e viewmodel para edit delete user
- Loading branch information
Showing
4 changed files
with
451 additions
and
0 deletions.
There are no files selected for viewing
77 changes: 77 additions & 0 deletions
77
test/ui/edit_delete_user/view/edit_delete_user_view_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import 'package:aranduapp/core/network/token_manager/model/user_model.dart'; | ||
import 'package:aranduapp/core/state/command.dart'; | ||
import 'package:aranduapp/ui/edit_delete_user/view/edit_delete_user_view.dart'; | ||
import 'package:aranduapp/ui/edit_delete_user/viewmode/edit_delte_user_viewmodel.dart'; | ||
import 'package:aranduapp/ui/login/view/login_view.dart'; | ||
import 'package:aranduapp/ui/login/viewmodel/login_viewmodel.dart'; | ||
import 'package:aranduapp/ui/shared/command_button.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
import 'package:get_it/get_it.dart'; | ||
import 'package:mockito/annotations.dart'; | ||
import 'package:mockito/mockito.dart'; | ||
|
||
import 'edit_delete_user_view_test.mocks.dart'; | ||
|
||
@GenerateNiceMocks([MockSpec<EditDelteUserViewmodel>(), MockSpec<Command0>()]) | ||
|
||
void main(){ | ||
late MockEditDelteUserViewmodel mockEditDelteUserViewmodel; | ||
late MockCommand0 mockdeleteUserCommand0; | ||
|
||
//final user = UserModel(id: '123456789', name: 'usertest', userName: 'usertest2', email: 'usertest@gmail.com', role: 'estudante'); | ||
|
||
setUp(() async { | ||
mockEditDelteUserViewmodel = MockEditDelteUserViewmodel(); | ||
mockdeleteUserCommand0 = MockCommand0(); | ||
|
||
when(mockEditDelteUserViewmodel.deleteUserCommand).thenReturn(mockdeleteUserCommand0); | ||
|
||
|
||
when(mockdeleteUserCommand0.running).thenReturn(false); | ||
when(mockdeleteUserCommand0.isError).thenReturn(false); | ||
when(mockdeleteUserCommand0.isOk).thenReturn(false); | ||
|
||
await GetIt.instance.reset(); | ||
GetIt.I.registerLazySingleton<EditDelteUserViewmodel>( | ||
() => mockEditDelteUserViewmodel); | ||
GetIt.I.registerLazySingleton<LoginViewModel>(() => LoginViewModel()); | ||
}); | ||
|
||
Widget createScreen() { | ||
return const MaterialApp( | ||
home: EditDeleteUser(), | ||
); | ||
} | ||
|
||
testWidgets('Edit delete user screen display', (WidgetTester tester) async{ | ||
await tester.pumpWidget(createScreen()); | ||
await tester.pumpAndSettle(); | ||
|
||
expect(find.text('Tem certeza de que deseja excluir sua conta? Essa ação não pode ser desfeita.'), findsOneWidget); | ||
expect(find.byType(CommandButton), findsOneWidget); | ||
}); | ||
|
||
testWidgets('checks if when pressing the button is success', (WidgetTester tester) async{ | ||
//when(mockEditDelteUserViewmodel.deleteUserCommand.isOk).thenReturn(true); | ||
|
||
await tester.pumpWidget(createScreen()); | ||
await tester.pumpAndSettle(); | ||
|
||
await tester.tap(find.text('Deletar')); | ||
await tester.pump(); | ||
|
||
verify(mockdeleteUserCommand0.execute()).called(1); | ||
|
||
}); | ||
|
||
testWidgets('navigates to Login after successful delete', (WidgetTester tester) async { | ||
when(mockdeleteUserCommand0.isOk).thenReturn(true); | ||
|
||
await tester.pumpWidget(createScreen()); | ||
await tester.pumpAndSettle(); | ||
|
||
expect(find.byType(Login), findsOneWidget); | ||
}); | ||
|
||
} |
224 changes: 224 additions & 0 deletions
224
test/ui/edit_delete_user/view/edit_delete_user_view_test.mocks.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,224 @@ | ||
// Mocks generated by Mockito 5.4.4 from annotations | ||
// in aranduapp/test/ui/edit_delete_user/view/edit_delete_user_view_test.dart. | ||
// Do not manually edit this file. | ||
|
||
// ignore_for_file: no_leading_underscores_for_library_prefixes | ||
import 'dart:async' as _i6; | ||
import 'dart:ui' as _i5; | ||
|
||
import 'package:aranduapp/core/state/command.dart' as _i2; | ||
import 'package:aranduapp/ui/edit_delete_user/viewmode/edit_delte_user_viewmodel.dart' | ||
as _i4; | ||
import 'package:async/async.dart' as _i3; | ||
import 'package:mockito/mockito.dart' as _i1; | ||
|
||
// ignore_for_file: type=lint | ||
// ignore_for_file: avoid_redundant_argument_values | ||
// ignore_for_file: avoid_setters_without_getters | ||
// ignore_for_file: comment_references | ||
// ignore_for_file: deprecated_member_use | ||
// ignore_for_file: deprecated_member_use_from_same_package | ||
// ignore_for_file: implementation_imports | ||
// ignore_for_file: invalid_use_of_visible_for_testing_member | ||
// ignore_for_file: prefer_const_constructors | ||
// ignore_for_file: unnecessary_parenthesis | ||
// ignore_for_file: camel_case_types | ||
// ignore_for_file: subtype_of_sealed_class | ||
|
||
class _FakeCommand0_0<T> extends _i1.SmartFake implements _i2.Command0<T> { | ||
_FakeCommand0_0( | ||
Object parent, | ||
Invocation parentInvocation, | ||
) : super( | ||
parent, | ||
parentInvocation, | ||
); | ||
} | ||
|
||
class _FakeResult_1<T1> extends _i1.SmartFake implements _i3.Result<T1> { | ||
_FakeResult_1( | ||
Object parent, | ||
Invocation parentInvocation, | ||
) : super( | ||
parent, | ||
parentInvocation, | ||
); | ||
} | ||
|
||
/// A class which mocks [EditDelteUserViewmodel]. | ||
/// | ||
/// See the documentation for Mockito's code generation for more information. | ||
class MockEditDelteUserViewmodel extends _i1.Mock | ||
implements _i4.EditDelteUserViewmodel { | ||
@override | ||
_i2.Command0<void> get deleteUserCommand => (super.noSuchMethod( | ||
Invocation.getter(#deleteUserCommand), | ||
returnValue: _FakeCommand0_0<void>( | ||
this, | ||
Invocation.getter(#deleteUserCommand), | ||
), | ||
returnValueForMissingStub: _FakeCommand0_0<void>( | ||
this, | ||
Invocation.getter(#deleteUserCommand), | ||
), | ||
) as _i2.Command0<void>); | ||
|
||
@override | ||
set deleteUserCommand(_i2.Command0<void>? _deleteUserCommand) => | ||
super.noSuchMethod( | ||
Invocation.setter( | ||
#deleteUserCommand, | ||
_deleteUserCommand, | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
bool get hasListeners => (super.noSuchMethod( | ||
Invocation.getter(#hasListeners), | ||
returnValue: false, | ||
returnValueForMissingStub: false, | ||
) as bool); | ||
|
||
@override | ||
void addListener(_i5.VoidCallback? listener) => super.noSuchMethod( | ||
Invocation.method( | ||
#addListener, | ||
[listener], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void removeListener(_i5.VoidCallback? listener) => super.noSuchMethod( | ||
Invocation.method( | ||
#removeListener, | ||
[listener], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void dispose() => super.noSuchMethod( | ||
Invocation.method( | ||
#dispose, | ||
[], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void notifyListeners() => super.noSuchMethod( | ||
Invocation.method( | ||
#notifyListeners, | ||
[], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
} | ||
|
||
/// A class which mocks [Command0]. | ||
/// | ||
/// See the documentation for Mockito's code generation for more information. | ||
class MockCommand0<T> extends _i1.Mock implements _i2.Command0<T> { | ||
@override | ||
_i6.Future<_i3.Result<T>> Function() get action => (super.noSuchMethod( | ||
Invocation.getter(#action), | ||
returnValue: () => _i6.Future<_i3.Result<T>>.value(_FakeResult_1<T>( | ||
this, | ||
Invocation.getter(#action), | ||
)), | ||
returnValueForMissingStub: () => | ||
_i6.Future<_i3.Result<T>>.value(_FakeResult_1<T>( | ||
this, | ||
Invocation.getter(#action), | ||
)), | ||
) as _i6.Future<_i3.Result<T>> Function()); | ||
|
||
@override | ||
bool get isError => (super.noSuchMethod( | ||
Invocation.getter(#isError), | ||
returnValue: false, | ||
returnValueForMissingStub: false, | ||
) as bool); | ||
|
||
@override | ||
bool get isOk => (super.noSuchMethod( | ||
Invocation.getter(#isOk), | ||
returnValue: false, | ||
returnValueForMissingStub: false, | ||
) as bool); | ||
|
||
@override | ||
bool get running => (super.noSuchMethod( | ||
Invocation.getter(#running), | ||
returnValue: false, | ||
returnValueForMissingStub: false, | ||
) as bool); | ||
|
||
@override | ||
bool get hasListeners => (super.noSuchMethod( | ||
Invocation.getter(#hasListeners), | ||
returnValue: false, | ||
returnValueForMissingStub: false, | ||
) as bool); | ||
|
||
@override | ||
_i6.Future<_i3.Result<T>> execute() => (super.noSuchMethod( | ||
Invocation.method( | ||
#execute, | ||
[], | ||
), | ||
returnValue: _i6.Future<_i3.Result<T>>.value(_FakeResult_1<T>( | ||
this, | ||
Invocation.method( | ||
#execute, | ||
[], | ||
), | ||
)), | ||
returnValueForMissingStub: | ||
_i6.Future<_i3.Result<T>>.value(_FakeResult_1<T>( | ||
this, | ||
Invocation.method( | ||
#execute, | ||
[], | ||
), | ||
)), | ||
) as _i6.Future<_i3.Result<T>>); | ||
|
||
@override | ||
void addListener(_i5.VoidCallback? listener) => super.noSuchMethod( | ||
Invocation.method( | ||
#addListener, | ||
[listener], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void removeListener(_i5.VoidCallback? listener) => super.noSuchMethod( | ||
Invocation.method( | ||
#removeListener, | ||
[listener], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void dispose() => super.noSuchMethod( | ||
Invocation.method( | ||
#dispose, | ||
[], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
|
||
@override | ||
void notifyListeners() => super.noSuchMethod( | ||
Invocation.method( | ||
#notifyListeners, | ||
[], | ||
), | ||
returnValueForMissingStub: null, | ||
); | ||
} |
59 changes: 59 additions & 0 deletions
59
test/ui/edit_delete_user/viewmodel/edit_delete_user_viewmodel_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
import 'package:aranduapp/core/network/token_manager/model/user_model.dart'; | ||
import 'package:aranduapp/core/network/token_manager/repository/auth_repository.dart'; | ||
import 'package:aranduapp/core/network/token_manager/service/auth_service.dart'; | ||
import 'package:aranduapp/ui/edit_delete_user/service/edit_delete_user_service.dart'; | ||
import 'package:aranduapp/ui/edit_delete_user/viewmode/edit_delte_user_viewmodel.dart'; | ||
import 'package:async/async.dart'; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
import 'package:get_it/get_it.dart'; | ||
import 'package:mockito/annotations.dart'; | ||
import 'package:mockito/mockito.dart'; | ||
|
||
import 'edit_delete_user_viewmodel_test.mocks.dart'; | ||
|
||
@GenerateNiceMocks([MockSpec<AuthRepository>(), MockSpec<EditDeleteUserService>()]) | ||
|
||
void main(){ | ||
TestWidgetsFlutterBinding.ensureInitialized(); | ||
late MockEditDeleteUserService mockEditDeleteUserService; | ||
late MockAuthRepository mockAuthRepository; | ||
late EditDelteUserViewmodel editDelteUserViewmodel; | ||
|
||
final user = UserModel(id: '123456789', name: 'usertest', userName: 'usertest2', email: 'usertest@gmail.com', role: 'estudante'); | ||
|
||
setUp(() async { | ||
editDelteUserViewmodel = EditDelteUserViewmodel(); | ||
mockEditDeleteUserService = MockEditDeleteUserService(); | ||
mockAuthRepository = MockAuthRepository(); // Criando mock | ||
|
||
await GetIt.instance.reset(); | ||
GetIt.I.registerLazySingleton<AuthRepository>(() => mockAuthRepository); | ||
GetIt.I.registerLazySingleton<EditDeleteUserService>(() => mockEditDeleteUserService); | ||
|
||
}); | ||
|
||
test('delete user should return isOk if service return success', () async { | ||
|
||
when(mockAuthRepository.getUser()).thenAnswer((_) async => user); | ||
|
||
when(mockEditDeleteUserService.deleteUser(user.id)) | ||
.thenAnswer((_) async => Result.value(null)); | ||
|
||
await editDelteUserViewmodel.deleteUserCommand.execute(); | ||
|
||
expect(editDelteUserViewmodel.deleteUserCommand.isOk, isTrue); | ||
verify(mockEditDeleteUserService.deleteUser(user.id)).called(1); | ||
}); | ||
|
||
test('delete user should return error if service fails', () async{ | ||
when(mockAuthRepository.getUser()).thenAnswer((_) async => user); | ||
|
||
when(mockEditDeleteUserService.deleteUser(user.id)) | ||
.thenThrow(Exception('Failed to delete user')); | ||
|
||
await editDelteUserViewmodel.deleteUserCommand.execute(); | ||
|
||
expect(editDelteUserViewmodel.deleteUserCommand.isError, isTrue); | ||
verify(mockEditDeleteUserService.deleteUser(user.id)).called(1); | ||
}); | ||
} |
Oops, something went wrong.