import 'package:bloc_test/bloc_test.dart'; import 'package:{{ name }}/core/errors/failures.dart'; import 'package:{{ name }}/core/network/handler_error.dart'; import 'package:{{ name }}/core/utils/delegate.dart'; import 'package:{{ name }}/features/login/domain/entities/token.dart'; import 'package:{{ name }}/features/login/domain/usecases/login_user.dart'; import 'package:{{ name }}/features/login/presentation/bloc/user_login_bloc.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_translate/flutter_translate.dart'; import 'package:mockito/mockito.dart'; class MockLoginUser extends Mock implements LoginUser {} Future main() async { late UserLoginBloc userLoginBloc; late MockLoginUser mockLoginUser; Widget myApp = const MaterialApp(); LocalizedApp(await getDelegate(), myApp); setUp(() { mockLoginUser = MockLoginUser(); userLoginBloc = UserLoginBloc(loginUser: mockLoginUser); }); const String tEmail = 'test@test.com'; const String tPassword = 'test'; Failure fail = ServerFailure(DioError( type: DioErrorType.connectTimeout, requestOptions: RequestOptions(path: ''))); test('should initial state equals to NotLoggedIn', () async { //assert expect(userLoginBloc.state, equals(NotLoggedState())); }); group('login user', () { blocTest( 'should return an error if login is not successfull', build: () { when(mockLoginUser( const LoginParams(email: tEmail, password: tPassword))) .thenAnswer((_) async => Left(fail)); return userLoginBloc; }, act: ((bloc) => bloc.add(LoginEvent(email: tEmail, password: tPassword))), expect: () => [ LoadingState(), ErrorState(message: HandleError.getMessage(fail)) ]); blocTest( 'should return LoggedState if login is successfull', build: () { when(mockLoginUser( const LoginParams(email: tEmail, password: tPassword))) .thenAnswer((_) async => const Right(Token(accessToken: "1234"))); return userLoginBloc; }, act: ((bloc) => bloc.add(LoginEvent(email: tEmail, password: tPassword))), expect: () => [ LoadingState(), const LoggedState(token: Token(accessToken: "1234")) ]); }); tearDown(() { userLoginBloc.close(); }); }