TF-3834 Implement remember user sort order after search

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-29 16:06:59 +07:00
committed by Dat H. Pham
parent ec4b618a32
commit 1293c1a997
25 changed files with 312 additions and 23 deletions
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_i
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
@@ -67,6 +68,7 @@ const fallbackGenerators = {
MockSpec<QuickSearchEmailInteractor>(),
MockSpec<SaveRecentSearchInteractor>(),
MockSpec<GetAllRecentSearchLatestInteractor>(),
MockSpec<StoreEmailSortOrderInteractor>(),
])
void main() {
// Declaration advanced filter controller
@@ -80,6 +82,7 @@ void main() {
late MockQuickSearchEmailInteractor mockQuickSearchEmailInteractor;
late MockSaveRecentSearchInteractor mockSaveRecentSearchInteractor;
late MockGetAllRecentSearchLatestInteractor mockGetAllRecentSearchLatestInteractor;
late MockStoreEmailSortOrderInteractor mockStoreEmailSortOrderInteractor;
// Declaration base controller
late MockCachingManager mockCachingManager;
@@ -138,6 +141,7 @@ void main() {
mockQuickSearchEmailInteractor = MockQuickSearchEmailInteractor();
mockSaveRecentSearchInteractor = MockSaveRecentSearchInteractor();
mockGetAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
mockStoreEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
searchController = SearchController(
mockQuickSearchEmailInteractor,
@@ -152,6 +156,7 @@ void main() {
Get.put<MailboxDashBoardController>(mockMailboxDashBoardController);
Get.put<GetAutoCompleteInteractor>(mockGetAutoCompleteInteractor);
Get.put<StoreEmailSortOrderInteractor>(mockStoreEmailSortOrderInteractor);
advancedFilterController = AdvancedFilterController();
});
@@ -160,6 +165,7 @@ void main() {
group('applyAdvancedSearchFilter::test', () {
test('SHOULD make sure memory search filter and search filter should be the same after applying', () async {
// Arrange
advancedFilterController.setMemorySearchFilter(SearchEmailFilter.initial());
advancedFilterController.hasKeyWordFilterInputController.text = 'Hello';
advancedFilterController.notKeyWordFilterInputController.text = 'dab';
advancedFilterController.listFromEmailAddress = [EmailAddress(null, 'user1@example.com')];
@@ -60,11 +60,13 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_b
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
@@ -149,6 +151,8 @@ const fallbackGenerators = {
MockSpec<QuickSearchEmailInteractor>(),
MockSpec<SaveRecentSearchInteractor>(),
MockSpec<GetAllRecentSearchLatestInteractor>(),
MockSpec<StoreEmailSortOrderInteractor>(),
MockSpec<GetStoredEmailSortOrderInteractor>(),
MockSpec<GetSessionInteractor>(),
MockSpec<GetAuthenticatedAccountInteractor>(),
MockSpec<UpdateAccountCacheInteractor>(),
@@ -241,6 +245,8 @@ void main() {
final quickSearchEmailInteractor = MockQuickSearchEmailInteractor();
final saveRecentSearchInteractor = MockSaveRecentSearchInteractor();
final getAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
final storeEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
final getStoredEmailSortOrderInteractor = MockGetStoredEmailSortOrderInteractor();
late SearchController searchController;
// mock base controller Get dependencies
@@ -380,6 +386,8 @@ void main() {
removeComposerCacheByIdOnWebInteractor,
getAllIdentitiesInteractor,
clearMailboxInteractor,
storeEmailSortOrderInteractor,
getStoredEmailSortOrderInteractor,
);
});
@@ -460,7 +468,7 @@ void main() {
getLatestChanges: anyNamed('getLatestChanges'),
propertiesCreated: anyNamed('propertiesCreated'),
propertiesUpdated: anyNamed('propertiesUpdated')));
expect(searchController.sortOrderFiltered, EmailSortOrderType.mostRecent);
expect(searchController.sortOrderFiltered, SearchEmailFilter.defaultSortOrder);
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
verify(getEmailsInMailboxInteractor.execute(
testSession, testAccountId,
@@ -490,6 +498,7 @@ void main() {
when(context.mounted).thenReturn(true);
// expect query in advanced filter controller update as expected
advancedFilterController.setMemorySearchFilter(SearchEmailFilter.initial());
advancedFilterController.updateListEmailAddress(FilterField.from, [fromEmailAddress]);
advancedFilterController.updateListEmailAddress(FilterField.to, [toEmailAddress]);
advancedFilterController.subjectFilterInputController.text = emailSubject;
@@ -520,7 +529,7 @@ void main() {
getLatestChanges: anyNamed('getLatestChanges'),
propertiesCreated: anyNamed('propertiesCreated'),
propertiesUpdated: anyNamed('propertiesUpdated')));
expect(searchController.sortOrderFiltered, EmailSortOrderType.mostRecent);
expect(searchController.sortOrderFiltered, SearchEmailFilter.defaultSortOrder);
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
verify(getEmailsInMailboxInteractor.execute(
testSession, testAccountId,
@@ -565,6 +574,7 @@ void main() {
text: SearchQuery(queryString),
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
hasAttachment: true,
position: 0,
)
);
});