Last active
December 16, 2023 13:11
-
-
Save mbaka-bilal/169549d003532e7d98dc3c46ee502ad1 to your computer and use it in GitHub Desktop.
bloc test failing
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
///The error | |
Expected: [ | |
AuthenticationState:AuthenticationState(RequestStatus.initial, RequestStatus.loading, RequestStatus.initial, null, null, null, null), | |
AuthenticationState:AuthenticationState(RequestStatus.initial, RequestStatus.failed, RequestStatus.initial, null, An unknown error has occurred, null, null) | |
] | |
Actual: [ | |
AuthenticationState:AuthenticationState(RequestStatus.loading, RequestStatus.initial, RequestStatus.initial, null, null, null, null), | |
AuthenticationState:AuthenticationState(RequestStatus.failed, RequestStatus.initial, RequestStatus.initial, null, An unknown error has occurred, null, null) | |
] | |
Which: at location [0] is AuthenticationState:<AuthenticationState(RequestStatus.loading, RequestStatus.initial, RequestStatus.initial, null, null, null, null)> instead of AuthenticationState:<AuthenticationState(RequestStatus.initial, RequestStatus.loading, RequestStatus.initial, null, null, null, null)> | |
///The test | |
class MockAuthenticationRepository extends Mock | |
implements AuthenticationRepository {} | |
void main() { | |
late AuthenticationBloc authenticationBloc; | |
late MockAuthenticationRepository mockAuthenticationRepository; | |
setUp(() { | |
mockAuthenticationRepository = MockAuthenticationRepository(); | |
authenticationBloc = AuthenticationBloc( | |
authenticationRepository: mockAuthenticationRepository); | |
}); | |
tearDown(() => authenticationBloc.close()); | |
group("login/signup with phone number", () { | |
blocTest("failed login/signup", | |
wait: const Duration(seconds: 1), | |
build: () => authenticationBloc, | |
act: (bloc) { | |
when(() => mockAuthenticationRepository | |
.signInWithPhoneNumber("123456789")) | |
.thenAnswer((invocation) async => const NetworkResponse( | |
status: RequestStatus.failed, | |
data: Constants.unknownErrorMessage)); | |
bloc.add(const RequestOtp(phoneNumber: '123456789')); | |
}, | |
expect: () => [ | |
const AuthenticationState( | |
signInWithPhoneNumberStatus: RequestStatus.loading), | |
const AuthenticationState( | |
errorText: Constants.unknownErrorMessage, | |
signInWithPhoneNumberStatus: RequestStatus.failed) | |
]); | |
}); | |
} | |
///The state class | |
class AuthenticationState extends Equatable { | |
final RequestStatus requestOtpStatus; | |
final RequestStatus signInWithPhoneNumberStatus; | |
final RequestStatus verifySignInWithPhoneNumberStatus; | |
final String? verificationId; | |
final String? errorText; | |
final int? resendToken; | |
final UserCredential? userCredential; | |
const AuthenticationState({ | |
this.requestOtpStatus = RequestStatus.initial, | |
this.verifySignInWithPhoneNumberStatus = RequestStatus.initial, | |
this.signInWithPhoneNumberStatus = RequestStatus.initial, | |
this.verificationId, | |
this.errorText, | |
this.resendToken, | |
this.userCredential, | |
}); | |
AuthenticationState copyWith({ | |
RequestStatus? signInWithPhoneNumberStatus, | |
RequestStatus? verifySignInWithPhoneNumberStatus, | |
String? verificationId, | |
String? errorText, | |
int? resendToken, | |
UserCredential? userCredential, | |
}) { | |
return AuthenticationState( | |
requestOtpStatus: | |
signInWithPhoneNumberStatus ?? this.signInWithPhoneNumberStatus, | |
verifySignInWithPhoneNumberStatus: verifySignInWithPhoneNumberStatus ?? | |
this.verifySignInWithPhoneNumberStatus, | |
verificationId: verificationId ?? this.verificationId, | |
errorText: errorText ?? this.errorText, | |
resendToken: resendToken ?? this.resendToken, | |
userCredential: userCredential ?? this.userCredential, | |
); | |
} | |
@override | |
List<Object?> get props => [ | |
requestOtpStatus, | |
signInWithPhoneNumberStatus, | |
verifySignInWithPhoneNumberStatus, | |
verificationId, | |
errorText, | |
resendToken, | |
userCredential, | |
]; | |
} | |
///The bloc | |
class AuthenticationBloc extends Bloc<OnboardingEvent, AuthenticationState> { | |
AuthenticationBloc({required this.authenticationRepository}) | |
: super(const AuthenticationState()) { | |
on<RequestOtp>(_mapRequestOtpEventToState); | |
on<VerifyOtp>(_mapVerifyOtpEventToState); | |
on<ResendOtp>(_mapResendOtpEventToState); | |
} | |
final AuthenticationRepository authenticationRepository; | |
void _mapRequestOtpEventToState( | |
RequestOtp event, Emitter<AuthenticationState> emit) async { | |
emit(state.copyWith(signInWithPhoneNumberStatus: RequestStatus.loading)); | |
final response = | |
await authenticationRepository.signInWithPhoneNumber(event.phoneNumber); | |
if (response.status != RequestStatus.success) { | |
final data = response.data; | |
emit(state.copyWith( | |
signInWithPhoneNumberStatus: response.status, errorText: data)); | |
} else { | |
//success | |
final data = response.data as List<dynamic>; | |
emit(state.copyWith( | |
signInWithPhoneNumberStatus: response.status, | |
verificationId: data[0], | |
resendToken: data[1])); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment