TF-3487 Handle search email failure
This commit is contained in:
@@ -483,6 +483,7 @@ class SearchEmailController extends BaseController
|
|||||||
void _searchEmailsFailure(SearchEmailFailure failure) {
|
void _searchEmailsFailure(SearchEmailFailure failure) {
|
||||||
listResultSearch.clear();
|
listResultSearch.clear();
|
||||||
resultSearchViewState.value = Left(failure);
|
resultSearchViewState.value = Left(failure);
|
||||||
|
showRetryToast(failure);
|
||||||
}
|
}
|
||||||
|
|
||||||
void searchMoreEmailsAction() {
|
void searchMoreEmailsAction() {
|
||||||
|
|||||||
@@ -17,5 +17,5 @@ class SearchEmailSuccess extends UIState {
|
|||||||
|
|
||||||
class SearchEmailFailure extends FeatureFailure {
|
class SearchEmailFailure extends FeatureFailure {
|
||||||
|
|
||||||
SearchEmailFailure(dynamic exception) : super(exception: exception);
|
SearchEmailFailure(dynamic exception, {super.onRetry}) : super(exception: exception);
|
||||||
}
|
}
|
||||||
@@ -55,7 +55,19 @@ class SearchEmailInteractor {
|
|||||||
|
|
||||||
yield Right(SearchEmailSuccess(presentationEmailList));
|
yield Right(SearchEmailSuccess(presentationEmailList));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
yield Left(SearchEmailFailure(e));
|
yield Left(SearchEmailFailure(
|
||||||
|
e,
|
||||||
|
onRetry: execute(
|
||||||
|
session,
|
||||||
|
accountId,
|
||||||
|
filter: filter,
|
||||||
|
limit: limit,
|
||||||
|
position: position,
|
||||||
|
sort: sort,
|
||||||
|
properties: properties,
|
||||||
|
needRefreshSearchState: true,
|
||||||
|
),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,6 +201,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
mailboxDashBoardController.updateRefreshAllEmailState(Left(RefreshAllEmailFailure()));
|
mailboxDashBoardController.updateRefreshAllEmailState(Left(RefreshAllEmailFailure()));
|
||||||
canSearchMore = false;
|
canSearchMore = false;
|
||||||
mailboxDashBoardController.emailsInCurrentMailbox.clear();
|
mailboxDashBoardController.emailsInCurrentMailbox.clear();
|
||||||
|
showRetryToast(failure);
|
||||||
} else if (failure is SearchMoreEmailFailure) {
|
} else if (failure is SearchMoreEmailFailure) {
|
||||||
loadingMoreStatus.value = LoadingMoreStatus.completed;
|
loadingMoreStatus.value = LoadingMoreStatus.completed;
|
||||||
canSearchMore = true;
|
canSearchMore = true;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||||
@@ -100,7 +102,7 @@ void main() {
|
|||||||
|
|
||||||
test(
|
test(
|
||||||
'should return Failure when threadRepository.searchEmails returns Failure',
|
'should return Failure when threadRepository.searchEmails returns Failure',
|
||||||
() {
|
() async {
|
||||||
// arrange
|
// arrange
|
||||||
final exception = Exception();
|
final exception = Exception();
|
||||||
when(
|
when(
|
||||||
@@ -119,15 +121,19 @@ void main() {
|
|||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
filter: EmailFilterCondition(text: 'test'),
|
filter: EmailFilterCondition(text: 'test'),
|
||||||
);
|
).asBroadcastStream();
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
|
final firstState = await result.first;
|
||||||
|
final lastState = await result.last;
|
||||||
|
expect(firstState, Right(SearchingState()));
|
||||||
expect(
|
expect(
|
||||||
result,
|
lastState.fold((failure) {
|
||||||
emitsInOrder([
|
return failure is SearchEmailFailure
|
||||||
Right(SearchingState()),
|
&& failure.exception == exception
|
||||||
Left(SearchEmailFailure(exception)),
|
&& failure.onRetry is Stream<Either<Failure, Success>>;
|
||||||
]),
|
}, (success) => false),
|
||||||
|
true,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user