TF-868: Unread/new emails are not loaded when opening folder
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# 16. Fix some wrong cases email list presents
|
||||
|
||||
Date: 2022-09-13
|
||||
|
||||
## Status
|
||||
|
||||
- Issue: Mailbox A has cache with more than 20 filtered emails.
|
||||
Then come back this mailbox in the next time, read-emails are not showed correctly.
|
||||
|
||||
## Context
|
||||
|
||||
- Root cause: list email cached not enough.
|
||||
|
||||
|
||||
## Decision
|
||||
|
||||
- Fill the cache with the first page of this mailbox at the first time open this mailbox.
|
||||
- Get only the first page in the cache when open mailbox
|
||||
|
||||
## Consequences
|
||||
|
||||
- Email list presents correctly
|
||||
@@ -32,7 +32,7 @@ abstract class ThreadDataSource {
|
||||
}
|
||||
);
|
||||
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption});
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption, UnsignedInt? limit});
|
||||
|
||||
Future<void> update({List<Email>? updated, List<Email>? created, List<EmailId>? destroyed});
|
||||
|
||||
|
||||
@@ -46,9 +46,9 @@ class LocalThreadDataSourceImpl extends ThreadDataSource {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption}) {
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption, UnsignedInt? limit}) {
|
||||
return Future.sync(() async {
|
||||
return await _emailCacheManager.getAllEmail(inMailboxId: inMailboxId, sort: sort, filterOption: filterOption ?? FilterMessageOption.all);
|
||||
return await _emailCacheManager.getAllEmail(inMailboxId: inMailboxId, sort: sort, filterOption: filterOption ?? FilterMessageOption.all, limit: limit);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
|
||||
@@ -65,7 +65,7 @@ class ThreadDataSourceImpl extends ThreadDataSource {
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption}) {
|
||||
Future<List<Email>> getAllEmailCache({MailboxId? inMailboxId, Set<Comparator>? sort, FilterMessageOption? filterOption, UnsignedInt? limit}) {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
@@ -21,6 +21,7 @@ class EmailCacheManager {
|
||||
Future<List<Email>> getAllEmail({
|
||||
MailboxId? inMailboxId,
|
||||
Set<Comparator>? sort,
|
||||
UnsignedInt? limit,
|
||||
FilterMessageOption filterOption = FilterMessageOption.all
|
||||
}) async {
|
||||
final emailCacheList = inMailboxId != null
|
||||
@@ -35,6 +36,10 @@ class EmailCacheManager {
|
||||
emailList.sortBy(comparator);
|
||||
}
|
||||
}
|
||||
|
||||
if (limit != null && emailList.length > limit.value.toInt()) {
|
||||
return emailList.getRange(0, limit.value.toInt()).toList();
|
||||
}
|
||||
return emailList;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
|
||||
@@ -47,6 +48,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||
inMailboxId: emailFilter?.mailboxId,
|
||||
sort: sort,
|
||||
limit: limit,
|
||||
filterOption: emailFilter?.filterOption),
|
||||
stateDataSource.getState(StateType.email)
|
||||
]).then((List response) {
|
||||
@@ -64,7 +66,14 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
sort: sort,
|
||||
filter: emailFilter?.filter,
|
||||
properties: propertiesCreated);
|
||||
|
||||
if (_isApproveFilterOption(emailFilter?.filterOption, networkEmailResponse.emailList)) {
|
||||
_getFirstPage(
|
||||
accountId,
|
||||
sort: sort,
|
||||
mailboxId: emailFilter?.mailboxId,
|
||||
propertiesCreated: propertiesCreated,
|
||||
);
|
||||
}
|
||||
yield networkEmailResponse;
|
||||
} else {
|
||||
yield localEmailResponse;
|
||||
@@ -127,6 +136,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||
inMailboxId: emailFilter?.mailboxId,
|
||||
sort: sort,
|
||||
limit: limit,
|
||||
filterOption: emailFilter?.filterOption),
|
||||
stateDataSource.getState(StateType.email)
|
||||
]).then((List response) {
|
||||
@@ -136,6 +146,31 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
yield newEmailResponse;
|
||||
}
|
||||
|
||||
bool _isApproveFilterOption(FilterMessageOption? filterOption, List<Email>? listEmailResponse) {
|
||||
return filterOption != FilterMessageOption.all && listEmailResponse!.isNotEmpty;
|
||||
}
|
||||
|
||||
Future<EmailsResponse> _getFirstPage(
|
||||
AccountId accountId,
|
||||
{
|
||||
Set<Comparator>? sort,
|
||||
MailboxId? mailboxId,
|
||||
Properties? propertiesCreated,
|
||||
Filter? filter,
|
||||
}
|
||||
) async {
|
||||
final networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
||||
accountId,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: sort,
|
||||
filter: filter ?? EmailFilterCondition(inMailbox: mailboxId),
|
||||
properties: propertiesCreated,
|
||||
);
|
||||
await _updateEmailCache(newCreated: networkEmailResponse.emailList);
|
||||
|
||||
return networkEmailResponse;
|
||||
}
|
||||
|
||||
Future<List<Email>?> _combineEmailCache({
|
||||
List<Email>? emailUpdated,
|
||||
Properties? updatedProperties,
|
||||
@@ -185,19 +220,17 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
AccountId accountId,
|
||||
State currentState,
|
||||
{
|
||||
UnsignedInt? limit,
|
||||
Set<Comparator>? sort,
|
||||
EmailFilter? emailFilter,
|
||||
Properties? propertiesCreated,
|
||||
Properties? propertiesUpdated,
|
||||
MailboxId? inMailboxId,
|
||||
FilterMessageOption? filterOption,
|
||||
}
|
||||
) async* {
|
||||
log('ThreadRepositoryImpl::refreshChanges(): $currentState');
|
||||
final localEmailList = await mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||
inMailboxId: inMailboxId,
|
||||
inMailboxId: emailFilter?.mailboxId,
|
||||
sort: sort,
|
||||
filterOption: filterOption);
|
||||
filterOption: emailFilter?.filterOption);
|
||||
|
||||
EmailChangeResponse? emailChangeResponse;
|
||||
bool hasMoreChanges = true;
|
||||
@@ -237,14 +270,27 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
||||
}
|
||||
|
||||
final newEmailResponse = await Future.wait([
|
||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: inMailboxId, sort: sort, filterOption: filterOption),
|
||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(inMailboxId: emailFilter?.mailboxId, sort: sort, filterOption: emailFilter?.filterOption),
|
||||
stateDataSource.getState(StateType.email)
|
||||
]).then((List response) {
|
||||
return EmailsResponse(emailList: response.first, state: response.last);
|
||||
});
|
||||
|
||||
if (!newEmailResponse.hasEmails()
|
||||
|| (newEmailResponse.emailList?.length ?? 0) < ThreadConstants.defaultLimit.value) {
|
||||
final networkEmailResponse = await _getFirstPage(
|
||||
accountId,
|
||||
sort: sort,
|
||||
filter: emailFilter?.filter,
|
||||
mailboxId: emailFilter?.mailboxId,
|
||||
propertiesCreated: propertiesCreated,
|
||||
);
|
||||
|
||||
yield networkEmailResponse;
|
||||
} else {
|
||||
yield newEmailResponse;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<EmailsResponse> loadMoreEmails(GetEmailRequest emailRequest) async* {
|
||||
|
||||
@@ -5,12 +5,14 @@ import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
|
||||
class GetEmailRequest with EquatableMixin {
|
||||
final AccountId accountId;
|
||||
final UnsignedInt? limit;
|
||||
final Set<Comparator>? sort;
|
||||
final Filter? filter;
|
||||
final FilterMessageOption? filterOption;
|
||||
final Properties? properties;
|
||||
final EmailId? lastEmailId;
|
||||
|
||||
@@ -18,10 +20,11 @@ class GetEmailRequest with EquatableMixin {
|
||||
this.limit,
|
||||
this.sort,
|
||||
this.filter,
|
||||
this.filterOption,
|
||||
this.properties,
|
||||
this.lastEmailId,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [limit, sort, filter, properties, lastEmailId];
|
||||
List<Object?> get props => [limit, sort, filter, properties, lastEmailId, filterOption];
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
@@ -12,9 +10,7 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dart';
|
||||
import 'package:dartz/dartz.dart' as dartz;
|
||||
|
||||
abstract class ThreadRepository {
|
||||
Stream<EmailsResponse> getAllEmail(
|
||||
@@ -33,10 +29,9 @@ abstract class ThreadRepository {
|
||||
jmap.State currentState,
|
||||
{
|
||||
Set<Comparator>? sort,
|
||||
EmailFilter? emailFilter,
|
||||
Properties? propertiesCreated,
|
||||
Properties? propertiesUpdated,
|
||||
MailboxId? inMailboxId,
|
||||
FilterMessageOption? filterOption,
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
+3
-6
@@ -3,9 +3,8 @@ import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
@@ -23,8 +22,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
||||
Set<Comparator>? sort,
|
||||
Properties? propertiesCreated,
|
||||
Properties? propertiesUpdated,
|
||||
MailboxId? inMailboxId,
|
||||
FilterMessageOption? filterOption,
|
||||
EmailFilter? emailFilter,
|
||||
}
|
||||
) async* {
|
||||
yield Right<Failure, Success>(RefreshingState());
|
||||
@@ -37,8 +35,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
||||
sort: sort,
|
||||
propertiesCreated: propertiesCreated,
|
||||
propertiesUpdated: propertiesUpdated,
|
||||
inMailboxId: inMailboxId,
|
||||
filterOption: filterOption)
|
||||
emailFilter: emailFilter)
|
||||
.map(_toGetEmailState);
|
||||
} catch (e) {
|
||||
yield Left(RefreshChangesAllEmailFailure(e));
|
||||
|
||||
@@ -431,8 +431,10 @@ class ThreadController extends BaseController {
|
||||
sort: _sortOrder,
|
||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||
inMailboxId: _currentMailboxId,
|
||||
filterOption: mailboxDashBoardController.filterMessageOption.value
|
||||
emailFilter: EmailFilter(
|
||||
filter: _getFilterCondition(),
|
||||
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||
mailboxId: _currentMailboxId),
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -446,6 +448,7 @@ class ThreadController extends BaseController {
|
||||
_accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: _sortOrder,
|
||||
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||
filter: _getFilterCondition(isLoadMore: true),
|
||||
properties: ThreadConstants.propertiesDefault,
|
||||
lastEmailId: emailList.last.id)
|
||||
@@ -453,9 +456,15 @@ class ThreadController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
bool _ableAppendLoadMore(List<PresentationEmail> listEmail) {
|
||||
return !(emailList.where((email) => (email.mailboxIds != null && !email.mailboxIds!.keys.contains(currentMailbox?.id)) || emailList.contains(email)).isNotEmpty);
|
||||
}
|
||||
|
||||
void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) {
|
||||
if (success.emailList.isNotEmpty) {
|
||||
if (_ableAppendLoadMore(success.emailList)){
|
||||
emailList.addAll(success.emailList);
|
||||
}
|
||||
} else {
|
||||
canLoadMore = false;
|
||||
}
|
||||
|
||||
+20
-22
@@ -1,29 +1,29 @@
|
||||
// Mocks generated by Mockito 5.0.17 from annotations
|
||||
// Mocks generated by Mockito 5.2.0 from annotations
|
||||
// in tmail_ui_user/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i3;
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart' as _i5;
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart' as _i15;
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart' as _i13;
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart' as _i9;
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as _i10;
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i14;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i12;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i14;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
||||
as _i8;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
||||
as _i4;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'
|
||||
as _i12;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dart'
|
||||
as _i13;
|
||||
as _i11;
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||
as _i2;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
@@ -64,34 +64,32 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
||||
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
||||
_i5.AccountId? accountId, _i10.State? currentState,
|
||||
{Set<_i7.Comparator>? sort,
|
||||
_i8.EmailFilter? emailFilter,
|
||||
_i9.Properties? propertiesCreated,
|
||||
_i9.Properties? propertiesUpdated,
|
||||
_i11.MailboxId? inMailboxId,
|
||||
_i12.FilterMessageOption? filterOption}) =>
|
||||
_i9.Properties? propertiesUpdated}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#refreshChanges, [
|
||||
accountId,
|
||||
currentState
|
||||
], {
|
||||
#sort: sort,
|
||||
#emailFilter: emailFilter,
|
||||
#propertiesCreated: propertiesCreated,
|
||||
#propertiesUpdated: propertiesUpdated,
|
||||
#inMailboxId: inMailboxId,
|
||||
#filterOption: filterOption
|
||||
#propertiesUpdated: propertiesUpdated
|
||||
}),
|
||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||
as _i3.Stream<_i4.EmailsResponse>);
|
||||
@override
|
||||
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
||||
_i13.GetEmailRequest? emailRequest) =>
|
||||
_i11.GetEmailRequest? emailRequest) =>
|
||||
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||
as _i3.Stream<_i4.EmailsResponse>);
|
||||
@override
|
||||
_i3.Future<List<_i14.Email>> searchEmails(_i5.AccountId? accountId,
|
||||
_i3.Future<List<_i12.Email>> searchEmails(_i5.AccountId? accountId,
|
||||
{_i6.UnsignedInt? limit,
|
||||
Set<_i7.Comparator>? sort,
|
||||
_i15.Filter? filter,
|
||||
_i13.Filter? filter,
|
||||
_i9.Properties? properties}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#searchEmails, [
|
||||
@@ -102,13 +100,13 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
||||
#filter: filter,
|
||||
#properties: properties
|
||||
}),
|
||||
returnValue: Future<List<_i14.Email>>.value(<_i14.Email>[]))
|
||||
as _i3.Future<List<_i14.Email>>);
|
||||
returnValue: Future<List<_i12.Email>>.value(<_i12.Email>[]))
|
||||
as _i3.Future<List<_i12.Email>>);
|
||||
@override
|
||||
_i3.Future<List<_i14.EmailId>> emptyTrashFolder(
|
||||
_i5.AccountId? accountId, _i11.MailboxId? trashMailboxId) =>
|
||||
_i3.Future<List<_i12.EmailId>> emptyTrashFolder(
|
||||
_i5.AccountId? accountId, _i14.MailboxId? trashMailboxId) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
||||
returnValue: Future<List<_i14.EmailId>>.value(<_i14.EmailId>[]))
|
||||
as _i3.Future<List<_i14.EmailId>>);
|
||||
returnValue: Future<List<_i12.EmailId>>.value(<_i12.EmailId>[]))
|
||||
as _i3.Future<List<_i12.EmailId>>);
|
||||
}
|
||||
|
||||
+6
-2
@@ -9,6 +9,7 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
@@ -40,7 +41,8 @@ void main() {
|
||||
sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)),
|
||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||
inMailboxId: MailboxFixtures.inboxMailbox.id
|
||||
emailFilter: EmailFilter(
|
||||
mailboxId: MailboxFixtures.inboxMailbox.id)
|
||||
)).thenAnswer((_) => Stream.fromIterable({
|
||||
EmailsResponse(
|
||||
emailList: {
|
||||
@@ -59,7 +61,9 @@ void main() {
|
||||
sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)),
|
||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||
inMailboxId: MailboxFixtures.inboxMailbox.id);
|
||||
emailFilter: EmailFilter(
|
||||
mailboxId: MailboxFixtures.inboxMailbox.id),
|
||||
);
|
||||
|
||||
final states = await streamStates.toList();
|
||||
|
||||
|
||||
+20
-22
@@ -1,29 +1,29 @@
|
||||
// Mocks generated by Mockito 5.0.17 from annotations
|
||||
// Mocks generated by Mockito 5.2.0 from annotations
|
||||
// in tmail_ui_user/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart.
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i3;
|
||||
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart' as _i5;
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart' as _i15;
|
||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart' as _i13;
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart' as _i9;
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as _i10;
|
||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i14;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i12;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i14;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
||||
as _i8;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
||||
as _i4;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'
|
||||
as _i12;
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dart'
|
||||
as _i13;
|
||||
as _i11;
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||
as _i2;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
// ignore_for_file: avoid_setters_without_getters
|
||||
// ignore_for_file: comment_references
|
||||
@@ -64,34 +64,32 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
||||
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
||||
_i5.AccountId? accountId, _i10.State? currentState,
|
||||
{Set<_i7.Comparator>? sort,
|
||||
_i8.EmailFilter? emailFilter,
|
||||
_i9.Properties? propertiesCreated,
|
||||
_i9.Properties? propertiesUpdated,
|
||||
_i11.MailboxId? inMailboxId,
|
||||
_i12.FilterMessageOption? filterOption}) =>
|
||||
_i9.Properties? propertiesUpdated}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#refreshChanges, [
|
||||
accountId,
|
||||
currentState
|
||||
], {
|
||||
#sort: sort,
|
||||
#emailFilter: emailFilter,
|
||||
#propertiesCreated: propertiesCreated,
|
||||
#propertiesUpdated: propertiesUpdated,
|
||||
#inMailboxId: inMailboxId,
|
||||
#filterOption: filterOption
|
||||
#propertiesUpdated: propertiesUpdated
|
||||
}),
|
||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||
as _i3.Stream<_i4.EmailsResponse>);
|
||||
@override
|
||||
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
||||
_i13.GetEmailRequest? emailRequest) =>
|
||||
_i11.GetEmailRequest? emailRequest) =>
|
||||
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||
as _i3.Stream<_i4.EmailsResponse>);
|
||||
@override
|
||||
_i3.Future<List<_i14.Email>> searchEmails(_i5.AccountId? accountId,
|
||||
_i3.Future<List<_i12.Email>> searchEmails(_i5.AccountId? accountId,
|
||||
{_i6.UnsignedInt? limit,
|
||||
Set<_i7.Comparator>? sort,
|
||||
_i15.Filter? filter,
|
||||
_i13.Filter? filter,
|
||||
_i9.Properties? properties}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#searchEmails, [
|
||||
@@ -102,13 +100,13 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
||||
#filter: filter,
|
||||
#properties: properties
|
||||
}),
|
||||
returnValue: Future<List<_i14.Email>>.value(<_i14.Email>[]))
|
||||
as _i3.Future<List<_i14.Email>>);
|
||||
returnValue: Future<List<_i12.Email>>.value(<_i12.Email>[]))
|
||||
as _i3.Future<List<_i12.Email>>);
|
||||
@override
|
||||
_i3.Future<List<_i14.EmailId>> emptyTrashFolder(
|
||||
_i5.AccountId? accountId, _i11.MailboxId? trashMailboxId) =>
|
||||
_i3.Future<List<_i12.EmailId>> emptyTrashFolder(
|
||||
_i5.AccountId? accountId, _i14.MailboxId? trashMailboxId) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
||||
returnValue: Future<List<_i14.EmailId>>.value(<_i14.EmailId>[]))
|
||||
as _i3.Future<List<_i14.EmailId>>);
|
||||
returnValue: Future<List<_i12.EmailId>>.value(<_i12.EmailId>[]))
|
||||
as _i3.Future<List<_i12.EmailId>>);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user