Skip to content

Commit

Permalink
Merge pull request #118 from fga-eps-mds/test/edit_delete_user
Browse files Browse the repository at this point in the history
test(#59):adiciona teste view e viewmodel para edit delete user
  • Loading branch information
GabrielCostaDeOliveira authored Feb 9, 2025
2 parents 64414b9 + 4f99c0b commit d237da1
Show file tree
Hide file tree
Showing 4 changed files with 451 additions and 0 deletions.
77 changes: 77 additions & 0 deletions test/ui/edit_delete_user/view/edit_delete_user_view_test.dart
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 test/ui/edit_delete_user/view/edit_delete_user_view_test.mocks.dart
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,
);
}
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);
});
}
Loading

0 comments on commit d237da1

Please sign in to comment.