TF-322 Sort default mailbox in TreeBuilder

This commit is contained in:
Dat PHAM HOANG
2022-03-18 17:06:13 +07:00
committed by Dat H. Pham
parent c2dc3b43fb
commit 71fc8a595e
6 changed files with 61 additions and 10 deletions
@@ -4,7 +4,6 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/state.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/extensions/mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_change_response.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
@@ -40,7 +39,6 @@ class MailboxCacheDataSourceImpl extends MailboxDataSource {
Future<List<Mailbox>> getAllMailboxCache() {
return Future.sync(() async {
final listMailboxes = await _mailboxCacheManager.getAllMailbox();
listMailboxes.sort((mailboxA, mailboxB) => mailboxA.compareTo(mailboxB));
return listMailboxes;
}).catchError((error) {
throw error;
@@ -1,6 +1,6 @@
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_cache.dart';
import 'package:tmail_ui_user/features/mailbox/data/extensions/mailbox_rights_extension.dart';
import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_cache.dart';
extension MailboxExtension on Mailbox {
@@ -19,8 +19,4 @@ extension MailboxExtension on Mailbox {
isSubscribed: isSubscribed?.value
);
}
int compareTo(Mailbox other) {
return this.sortOrder!.value.value.compareTo(other.sortOrder!.value.value);
}
}
@@ -135,4 +135,16 @@ extension MailboxNodeExtension on MailboxNode {
selectMode: selectMode,
);
}
int compareTo(MailboxNode other) {
if (item.sortOrder == null) {
return -1;
}
if (other.item.sortOrder == null) {
return 1;
}
return item.sortOrder!.value.value.compareTo(other.item.sortOrder!.value.value);
}
}
@@ -72,6 +72,7 @@ class TreeBuilder {
}
});
defaultTree.root.childrenItems?.sort((thisMailbox, thatMailbox) => thisMailbox.compareTo(thatMailbox));
return Tuple2(defaultTree, folderTree);
}
}
@@ -1,4 +1,3 @@
import 'package:core/core.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart';
@@ -8,7 +7,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_inte
class CredentialBindings extends Bindings {
void dependencies() {
log('CredentialBindings::dependencies(): dmm credential goi vao day di');
bindingsRepositoryImpl();
bindingsRepository();
bindingsInteractor();
@@ -19,7 +17,6 @@ class CredentialBindings extends Bindings {
}
void bindingsRepository() {
log('CredentialBindings::bindingsRepository(): dmm Put CredentialRepo ');
Get.put<CredentialRepository>(Get.find<CredentialRepositoryImpl>());
}
@@ -209,4 +209,51 @@ void main() {
contains(MailboxNode(PresentationMailbox(MailboxId(Id("e3_2_1")), parentId: MailboxId(Id('id42'))))));
});
});
group('generate default mailbox tree base on sortOrder: ', () {
final expectedTree = MailboxTree(
MailboxNode(
PresentationMailbox(MailboxId(Id('root'))),
childrenItems: [
MailboxNode(
PresentationMailbox(MailboxId(Id("1")), parentId: null, name: MailboxName('Inbox'), sortOrder: SortOrder(sortValue: 10), role: Role('inbox')),
),
MailboxNode(
PresentationMailbox(MailboxId(Id("2")), parentId: null, name: MailboxName('Draft'), sortOrder: SortOrder(sortValue: 30), role: Role('draft')),
),
MailboxNode(
PresentationMailbox(MailboxId(Id("3")), parentId: null, name: MailboxName('Outbox'), sortOrder: SortOrder(sortValue: 40), role: Role('outbox')),
),
MailboxNode(
PresentationMailbox(MailboxId(Id("4")), parentId: null, name: MailboxName('Sent'), sortOrder: SortOrder(sortValue: 50), role: Role('sent')),
),
MailboxNode(
PresentationMailbox(MailboxId(Id("5")), parentId: null, name: MailboxName('Trash'), sortOrder: SortOrder(sortValue: 60), role: Role('trash')),
),
MailboxNode(
PresentationMailbox(MailboxId(Id("6")), parentId: null, name: MailboxName('Spam'), sortOrder: SortOrder(sortValue: 70), role: Role('spam')),
),
]
)
);
test('defaultMailboxTree should be in order after buildTree', () async {
final testCase = [
PresentationMailbox(MailboxId(Id("4")), parentId: null, name: MailboxName('Sent'), sortOrder: SortOrder(sortValue: 50), role: Role('sent')),
PresentationMailbox(MailboxId(Id("6")), parentId: null, name: MailboxName('Spam'), sortOrder: SortOrder(sortValue: 70), role: Role('spam')),
PresentationMailbox(MailboxId(Id("5")), parentId: null, name: MailboxName('Trash'), sortOrder: SortOrder(sortValue: 60), role: Role('trash')),
PresentationMailbox(MailboxId(Id("2")), parentId: null, name: MailboxName('Draft'), sortOrder: SortOrder(sortValue: 30), role: Role('draft')),
PresentationMailbox(MailboxId(Id("3")), parentId: null, name: MailboxName('Outbox'), sortOrder: SortOrder(sortValue: 40), role: Role('outbox')),
PresentationMailbox(MailboxId(Id("1")), parentId: null, name: MailboxName('Inbox'), sortOrder: SortOrder(sortValue: 10), role: Role('inbox')),
];
final generatedTree = await TreeBuilder().generateMailboxTreeInUI(testCase);
expect(
generatedTree.head.root.childrenItems,
equals(expectedTree.root.childrenItems)
);
});
});
}