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});
|
Future<void> update({List<Email>? updated, List<Email>? created, List<EmailId>? destroyed});
|
||||||
|
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ class LocalThreadDataSourceImpl extends ThreadDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@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 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) {
|
}).catchError((error) {
|
||||||
throw error;
|
throw error;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class ThreadDataSourceImpl extends ThreadDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@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();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
@@ -21,6 +21,7 @@ class EmailCacheManager {
|
|||||||
Future<List<Email>> getAllEmail({
|
Future<List<Email>> getAllEmail({
|
||||||
MailboxId? inMailboxId,
|
MailboxId? inMailboxId,
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
UnsignedInt? limit,
|
||||||
FilterMessageOption filterOption = FilterMessageOption.all
|
FilterMessageOption filterOption = FilterMessageOption.all
|
||||||
}) async {
|
}) async {
|
||||||
final emailCacheList = inMailboxId != null
|
final emailCacheList = inMailboxId != null
|
||||||
@@ -35,6 +36,10 @@ class EmailCacheManager {
|
|||||||
emailList.sortBy(comparator);
|
emailList.sortBy(comparator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (limit != null && emailList.length > limit.value.toInt()) {
|
||||||
|
return emailList.getRange(0, limit.value.toInt()).toList();
|
||||||
|
}
|
||||||
return emailList;
|
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/state.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.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.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:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.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(
|
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||||
inMailboxId: emailFilter?.mailboxId,
|
inMailboxId: emailFilter?.mailboxId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
|
limit: limit,
|
||||||
filterOption: emailFilter?.filterOption),
|
filterOption: emailFilter?.filterOption),
|
||||||
stateDataSource.getState(StateType.email)
|
stateDataSource.getState(StateType.email)
|
||||||
]).then((List response) {
|
]).then((List response) {
|
||||||
@@ -64,7 +66,14 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
sort: sort,
|
sort: sort,
|
||||||
filter: emailFilter?.filter,
|
filter: emailFilter?.filter,
|
||||||
properties: propertiesCreated);
|
properties: propertiesCreated);
|
||||||
|
if (_isApproveFilterOption(emailFilter?.filterOption, networkEmailResponse.emailList)) {
|
||||||
|
_getFirstPage(
|
||||||
|
accountId,
|
||||||
|
sort: sort,
|
||||||
|
mailboxId: emailFilter?.mailboxId,
|
||||||
|
propertiesCreated: propertiesCreated,
|
||||||
|
);
|
||||||
|
}
|
||||||
yield networkEmailResponse;
|
yield networkEmailResponse;
|
||||||
} else {
|
} else {
|
||||||
yield localEmailResponse;
|
yield localEmailResponse;
|
||||||
@@ -127,6 +136,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||||
inMailboxId: emailFilter?.mailboxId,
|
inMailboxId: emailFilter?.mailboxId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
|
limit: limit,
|
||||||
filterOption: emailFilter?.filterOption),
|
filterOption: emailFilter?.filterOption),
|
||||||
stateDataSource.getState(StateType.email)
|
stateDataSource.getState(StateType.email)
|
||||||
]).then((List response) {
|
]).then((List response) {
|
||||||
@@ -136,6 +146,31 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
yield newEmailResponse;
|
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({
|
Future<List<Email>?> _combineEmailCache({
|
||||||
List<Email>? emailUpdated,
|
List<Email>? emailUpdated,
|
||||||
Properties? updatedProperties,
|
Properties? updatedProperties,
|
||||||
@@ -185,19 +220,17 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
State currentState,
|
State currentState,
|
||||||
{
|
{
|
||||||
UnsignedInt? limit,
|
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
EmailFilter? emailFilter,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
MailboxId? inMailboxId,
|
|
||||||
FilterMessageOption? filterOption,
|
|
||||||
}
|
}
|
||||||
) async* {
|
) async* {
|
||||||
log('ThreadRepositoryImpl::refreshChanges(): $currentState');
|
log('ThreadRepositoryImpl::refreshChanges(): $currentState');
|
||||||
final localEmailList = await mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
final localEmailList = await mapDataSource[DataSourceType.local]!.getAllEmailCache(
|
||||||
inMailboxId: inMailboxId,
|
inMailboxId: emailFilter?.mailboxId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
filterOption: filterOption);
|
filterOption: emailFilter?.filterOption);
|
||||||
|
|
||||||
EmailChangeResponse? emailChangeResponse;
|
EmailChangeResponse? emailChangeResponse;
|
||||||
bool hasMoreChanges = true;
|
bool hasMoreChanges = true;
|
||||||
@@ -237,13 +270,26 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final newEmailResponse = await Future.wait([
|
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)
|
stateDataSource.getState(StateType.email)
|
||||||
]).then((List response) {
|
]).then((List response) {
|
||||||
return EmailsResponse(emailList: response.first, state: response.last);
|
return EmailsResponse(emailList: response.first, state: response.last);
|
||||||
});
|
});
|
||||||
|
|
||||||
yield newEmailResponse;
|
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
|
@override
|
||||||
|
|||||||
@@ -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/core/unsigned_int.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.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 {
|
class GetEmailRequest with EquatableMixin {
|
||||||
final AccountId accountId;
|
final AccountId accountId;
|
||||||
final UnsignedInt? limit;
|
final UnsignedInt? limit;
|
||||||
final Set<Comparator>? sort;
|
final Set<Comparator>? sort;
|
||||||
final Filter? filter;
|
final Filter? filter;
|
||||||
|
final FilterMessageOption? filterOption;
|
||||||
final Properties? properties;
|
final Properties? properties;
|
||||||
final EmailId? lastEmailId;
|
final EmailId? lastEmailId;
|
||||||
|
|
||||||
@@ -18,10 +20,11 @@ class GetEmailRequest with EquatableMixin {
|
|||||||
this.limit,
|
this.limit,
|
||||||
this.sort,
|
this.sort,
|
||||||
this.filter,
|
this.filter,
|
||||||
|
this.filterOption,
|
||||||
this.properties,
|
this.properties,
|
||||||
this.lastEmailId,
|
this.lastEmailId,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@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 '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/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.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: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_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.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:tmail_ui_user/features/thread/domain/model/get_email_request.dart';
|
||||||
import 'package:dartz/dartz.dart' as dartz;
|
|
||||||
|
|
||||||
abstract class ThreadRepository {
|
abstract class ThreadRepository {
|
||||||
Stream<EmailsResponse> getAllEmail(
|
Stream<EmailsResponse> getAllEmail(
|
||||||
@@ -33,10 +29,9 @@ abstract class ThreadRepository {
|
|||||||
jmap.State currentState,
|
jmap.State currentState,
|
||||||
{
|
{
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
EmailFilter? emailFilter,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
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/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.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/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/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:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
@@ -23,8 +22,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
|||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
MailboxId? inMailboxId,
|
EmailFilter? emailFilter,
|
||||||
FilterMessageOption? filterOption,
|
|
||||||
}
|
}
|
||||||
) async* {
|
) async* {
|
||||||
yield Right<Failure, Success>(RefreshingState());
|
yield Right<Failure, Success>(RefreshingState());
|
||||||
@@ -37,8 +35,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
|||||||
sort: sort,
|
sort: sort,
|
||||||
propertiesCreated: propertiesCreated,
|
propertiesCreated: propertiesCreated,
|
||||||
propertiesUpdated: propertiesUpdated,
|
propertiesUpdated: propertiesUpdated,
|
||||||
inMailboxId: inMailboxId,
|
emailFilter: emailFilter)
|
||||||
filterOption: filterOption)
|
|
||||||
.map(_toGetEmailState);
|
.map(_toGetEmailState);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
yield Left(RefreshChangesAllEmailFailure(e));
|
yield Left(RefreshChangesAllEmailFailure(e));
|
||||||
|
|||||||
@@ -431,8 +431,10 @@ class ThreadController extends BaseController {
|
|||||||
sort: _sortOrder,
|
sort: _sortOrder,
|
||||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||||
inMailboxId: _currentMailboxId,
|
emailFilter: EmailFilter(
|
||||||
filterOption: mailboxDashBoardController.filterMessageOption.value
|
filter: _getFilterCondition(),
|
||||||
|
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||||
|
mailboxId: _currentMailboxId),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -446,6 +448,7 @@ class ThreadController extends BaseController {
|
|||||||
_accountId!,
|
_accountId!,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: ThreadConstants.defaultLimit,
|
||||||
sort: _sortOrder,
|
sort: _sortOrder,
|
||||||
|
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||||
filter: _getFilterCondition(isLoadMore: true),
|
filter: _getFilterCondition(isLoadMore: true),
|
||||||
properties: ThreadConstants.propertiesDefault,
|
properties: ThreadConstants.propertiesDefault,
|
||||||
lastEmailId: emailList.last.id)
|
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) {
|
void _loadMoreEmailsSuccess(LoadMoreEmailsSuccess success) {
|
||||||
if (success.emailList.isNotEmpty) {
|
if (success.emailList.isNotEmpty) {
|
||||||
emailList.addAll(success.emailList);
|
if (_ableAppendLoadMore(success.emailList)){
|
||||||
|
emailList.addAll(success.emailList);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
canLoadMore = false;
|
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.
|
// in tmail_ui_user/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart.
|
||||||
// Do not manually edit this file.
|
// Do not manually edit this file.
|
||||||
|
|
||||||
|
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||||
import 'dart:async' as _i3;
|
import 'dart:async' as _i3;
|
||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart' as _i5;
|
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/properties/properties.dart' as _i9;
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
|
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/state.dart' as _i10;
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
|
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/email/email.dart' as _i12;
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i14;
|
||||||
import 'package:mockito/mockito.dart' as _i1;
|
import 'package:mockito/mockito.dart' as _i1;
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
||||||
as _i8;
|
as _i8;
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
||||||
as _i4;
|
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'
|
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'
|
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||||
as _i2;
|
as _i2;
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: avoid_redundant_argument_values
|
// ignore_for_file: avoid_redundant_argument_values
|
||||||
// ignore_for_file: avoid_setters_without_getters
|
// ignore_for_file: avoid_setters_without_getters
|
||||||
// ignore_for_file: comment_references
|
// ignore_for_file: comment_references
|
||||||
@@ -64,34 +64,32 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
|||||||
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
||||||
_i5.AccountId? accountId, _i10.State? currentState,
|
_i5.AccountId? accountId, _i10.State? currentState,
|
||||||
{Set<_i7.Comparator>? sort,
|
{Set<_i7.Comparator>? sort,
|
||||||
|
_i8.EmailFilter? emailFilter,
|
||||||
_i9.Properties? propertiesCreated,
|
_i9.Properties? propertiesCreated,
|
||||||
_i9.Properties? propertiesUpdated,
|
_i9.Properties? propertiesUpdated}) =>
|
||||||
_i11.MailboxId? inMailboxId,
|
|
||||||
_i12.FilterMessageOption? filterOption}) =>
|
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#refreshChanges, [
|
Invocation.method(#refreshChanges, [
|
||||||
accountId,
|
accountId,
|
||||||
currentState
|
currentState
|
||||||
], {
|
], {
|
||||||
#sort: sort,
|
#sort: sort,
|
||||||
|
#emailFilter: emailFilter,
|
||||||
#propertiesCreated: propertiesCreated,
|
#propertiesCreated: propertiesCreated,
|
||||||
#propertiesUpdated: propertiesUpdated,
|
#propertiesUpdated: propertiesUpdated
|
||||||
#inMailboxId: inMailboxId,
|
|
||||||
#filterOption: filterOption
|
|
||||||
}),
|
}),
|
||||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||||
as _i3.Stream<_i4.EmailsResponse>);
|
as _i3.Stream<_i4.EmailsResponse>);
|
||||||
@override
|
@override
|
||||||
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
||||||
_i13.GetEmailRequest? emailRequest) =>
|
_i11.GetEmailRequest? emailRequest) =>
|
||||||
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
||||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||||
as _i3.Stream<_i4.EmailsResponse>);
|
as _i3.Stream<_i4.EmailsResponse>);
|
||||||
@override
|
@override
|
||||||
_i3.Future<List<_i14.Email>> searchEmails(_i5.AccountId? accountId,
|
_i3.Future<List<_i12.Email>> searchEmails(_i5.AccountId? accountId,
|
||||||
{_i6.UnsignedInt? limit,
|
{_i6.UnsignedInt? limit,
|
||||||
Set<_i7.Comparator>? sort,
|
Set<_i7.Comparator>? sort,
|
||||||
_i15.Filter? filter,
|
_i13.Filter? filter,
|
||||||
_i9.Properties? properties}) =>
|
_i9.Properties? properties}) =>
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#searchEmails, [
|
Invocation.method(#searchEmails, [
|
||||||
@@ -102,13 +100,13 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
|||||||
#filter: filter,
|
#filter: filter,
|
||||||
#properties: properties
|
#properties: properties
|
||||||
}),
|
}),
|
||||||
returnValue: Future<List<_i14.Email>>.value(<_i14.Email>[]))
|
returnValue: Future<List<_i12.Email>>.value(<_i12.Email>[]))
|
||||||
as _i3.Future<List<_i14.Email>>);
|
as _i3.Future<List<_i12.Email>>);
|
||||||
@override
|
@override
|
||||||
_i3.Future<List<_i14.EmailId>> emptyTrashFolder(
|
_i3.Future<List<_i12.EmailId>> emptyTrashFolder(
|
||||||
_i5.AccountId? accountId, _i11.MailboxId? trashMailboxId) =>
|
_i5.AccountId? accountId, _i14.MailboxId? trashMailboxId) =>
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
||||||
returnValue: Future<List<_i14.EmailId>>.value(<_i14.EmailId>[]))
|
returnValue: Future<List<_i12.EmailId>>.value(<_i12.EmailId>[]))
|
||||||
as _i3.Future<List<_i14.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:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:mockito/annotations.dart';
|
import 'package:mockito/annotations.dart';
|
||||||
import 'package:mockito/mockito.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/model/email_response.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.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';
|
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)),
|
sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)),
|
||||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||||
inMailboxId: MailboxFixtures.inboxMailbox.id
|
emailFilter: EmailFilter(
|
||||||
|
mailboxId: MailboxFixtures.inboxMailbox.id)
|
||||||
)).thenAnswer((_) => Stream.fromIterable({
|
)).thenAnswer((_) => Stream.fromIterable({
|
||||||
EmailsResponse(
|
EmailsResponse(
|
||||||
emailList: {
|
emailList: {
|
||||||
@@ -59,7 +61,9 @@ void main() {
|
|||||||
sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)),
|
sort: Set()..add(EmailComparator(EmailComparatorProperty.sentAt)..setIsAscending(false)),
|
||||||
propertiesCreated: ThreadConstants.propertiesDefault,
|
propertiesCreated: ThreadConstants.propertiesDefault,
|
||||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||||
inMailboxId: MailboxFixtures.inboxMailbox.id);
|
emailFilter: EmailFilter(
|
||||||
|
mailboxId: MailboxFixtures.inboxMailbox.id),
|
||||||
|
);
|
||||||
|
|
||||||
final states = await streamStates.toList();
|
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.
|
// in tmail_ui_user/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart.
|
||||||
// Do not manually edit this file.
|
// Do not manually edit this file.
|
||||||
|
|
||||||
|
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||||
import 'dart:async' as _i3;
|
import 'dart:async' as _i3;
|
||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart' as _i5;
|
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/properties/properties.dart' as _i9;
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
|
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/state.dart' as _i10;
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
|
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/email/email.dart' as _i12;
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i14;
|
||||||
import 'package:mockito/mockito.dart' as _i1;
|
import 'package:mockito/mockito.dart' as _i1;
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'
|
||||||
as _i8;
|
as _i8;
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart'
|
||||||
as _i4;
|
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'
|
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'
|
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart'
|
||||||
as _i2;
|
as _i2;
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: avoid_redundant_argument_values
|
// ignore_for_file: avoid_redundant_argument_values
|
||||||
// ignore_for_file: avoid_setters_without_getters
|
// ignore_for_file: avoid_setters_without_getters
|
||||||
// ignore_for_file: comment_references
|
// ignore_for_file: comment_references
|
||||||
@@ -64,34 +64,32 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
|||||||
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
_i3.Stream<_i4.EmailsResponse> refreshChanges(
|
||||||
_i5.AccountId? accountId, _i10.State? currentState,
|
_i5.AccountId? accountId, _i10.State? currentState,
|
||||||
{Set<_i7.Comparator>? sort,
|
{Set<_i7.Comparator>? sort,
|
||||||
|
_i8.EmailFilter? emailFilter,
|
||||||
_i9.Properties? propertiesCreated,
|
_i9.Properties? propertiesCreated,
|
||||||
_i9.Properties? propertiesUpdated,
|
_i9.Properties? propertiesUpdated}) =>
|
||||||
_i11.MailboxId? inMailboxId,
|
|
||||||
_i12.FilterMessageOption? filterOption}) =>
|
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#refreshChanges, [
|
Invocation.method(#refreshChanges, [
|
||||||
accountId,
|
accountId,
|
||||||
currentState
|
currentState
|
||||||
], {
|
], {
|
||||||
#sort: sort,
|
#sort: sort,
|
||||||
|
#emailFilter: emailFilter,
|
||||||
#propertiesCreated: propertiesCreated,
|
#propertiesCreated: propertiesCreated,
|
||||||
#propertiesUpdated: propertiesUpdated,
|
#propertiesUpdated: propertiesUpdated
|
||||||
#inMailboxId: inMailboxId,
|
|
||||||
#filterOption: filterOption
|
|
||||||
}),
|
}),
|
||||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||||
as _i3.Stream<_i4.EmailsResponse>);
|
as _i3.Stream<_i4.EmailsResponse>);
|
||||||
@override
|
@override
|
||||||
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
_i3.Stream<_i4.EmailsResponse> loadMoreEmails(
|
||||||
_i13.GetEmailRequest? emailRequest) =>
|
_i11.GetEmailRequest? emailRequest) =>
|
||||||
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
(super.noSuchMethod(Invocation.method(#loadMoreEmails, [emailRequest]),
|
||||||
returnValue: Stream<_i4.EmailsResponse>.empty())
|
returnValue: Stream<_i4.EmailsResponse>.empty())
|
||||||
as _i3.Stream<_i4.EmailsResponse>);
|
as _i3.Stream<_i4.EmailsResponse>);
|
||||||
@override
|
@override
|
||||||
_i3.Future<List<_i14.Email>> searchEmails(_i5.AccountId? accountId,
|
_i3.Future<List<_i12.Email>> searchEmails(_i5.AccountId? accountId,
|
||||||
{_i6.UnsignedInt? limit,
|
{_i6.UnsignedInt? limit,
|
||||||
Set<_i7.Comparator>? sort,
|
Set<_i7.Comparator>? sort,
|
||||||
_i15.Filter? filter,
|
_i13.Filter? filter,
|
||||||
_i9.Properties? properties}) =>
|
_i9.Properties? properties}) =>
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#searchEmails, [
|
Invocation.method(#searchEmails, [
|
||||||
@@ -102,13 +100,13 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
|
|||||||
#filter: filter,
|
#filter: filter,
|
||||||
#properties: properties
|
#properties: properties
|
||||||
}),
|
}),
|
||||||
returnValue: Future<List<_i14.Email>>.value(<_i14.Email>[]))
|
returnValue: Future<List<_i12.Email>>.value(<_i12.Email>[]))
|
||||||
as _i3.Future<List<_i14.Email>>);
|
as _i3.Future<List<_i12.Email>>);
|
||||||
@override
|
@override
|
||||||
_i3.Future<List<_i14.EmailId>> emptyTrashFolder(
|
_i3.Future<List<_i12.EmailId>> emptyTrashFolder(
|
||||||
_i5.AccountId? accountId, _i11.MailboxId? trashMailboxId) =>
|
_i5.AccountId? accountId, _i14.MailboxId? trashMailboxId) =>
|
||||||
(super.noSuchMethod(
|
(super.noSuchMethod(
|
||||||
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
Invocation.method(#emptyTrashFolder, [accountId, trashMailboxId]),
|
||||||
returnValue: Future<List<_i14.EmailId>>.value(<_i14.EmailId>[]))
|
returnValue: Future<List<_i12.EmailId>>.value(<_i12.EmailId>[]))
|
||||||
as _i3.Future<List<_i14.EmailId>>);
|
as _i3.Future<List<_i12.EmailId>>);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user