TF-2694 Unit Test User use advanced filter and sort then reset with open mailbox

This commit is contained in:
DatDang
2024-03-26 14:28:17 +07:00
committed by Dat H. Pham
parent 7ab03f6f80
commit 133691e082
@@ -10,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart'; 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/core/state.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.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';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:mockito/annotations.dart'; import 'package:mockito/annotations.dart';
@@ -52,11 +53,13 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_com
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/quick_search_email_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/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/save_recent_search_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/app_grid_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_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/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
@@ -233,7 +236,7 @@ void main() {
late MailboxController mailboxController; late MailboxController mailboxController;
// mock thread controller direct dependencies // mock thread controller direct dependencies
final getEmailsInMailboxInteractor = MockGetEmailsInMailboxInteractor(); late MockGetEmailsInMailboxInteractor getEmailsInMailboxInteractor;
final refreshChangesEmailsInMailboxInteractor = final refreshChangesEmailsInMailboxInteractor =
MockRefreshChangesEmailsInMailboxInteractor(); MockRefreshChangesEmailsInMailboxInteractor();
final loadMoreEmailsInMailboxInteractor = MockLoadMoreEmailsInMailboxInteractor(); final loadMoreEmailsInMailboxInteractor = MockLoadMoreEmailsInMailboxInteractor();
@@ -241,14 +244,20 @@ void main() {
final searchMoreEmailInteractor = MockSearchMoreEmailInteractor(); final searchMoreEmailInteractor = MockSearchMoreEmailInteractor();
late ThreadController threadController; late ThreadController threadController;
late AdvancedFilterController advancedFilterController;
final context = MockBuildContext(); final context = MockBuildContext();
const queryString = 'test text'; const queryString = 'test text';
final google = Uri.parse('https://www.google.com'); final google = Uri.parse('https://www.google.com');
final testSession = final testSession =
Session({}, {}, {}, UserName('data'), google, google, google, google, State('1')); Session({}, {}, {}, UserName('data'), google, google, google, google, State('1'));
final testMailboxId = MailboxId(Id('1')); final testMailboxId = MailboxId(Id('1'));
final testAccountId = AccountId(Id('123'));
group('search/sort/filter feature:', () {
setUp(() { setUp(() {
getEmailsInMailboxInteractor = MockGetEmailsInMailboxInteractor();
Get.put<RemoveEmailDraftsInteractor>(removeEmailDraftsInteractor); Get.put<RemoveEmailDraftsInteractor>(removeEmailDraftsInteractor);
Get.put<EmailReceiveManager>(emailReceiveManager); Get.put<EmailReceiveManager>(emailReceiveManager);
Get.put<DownloadController>(downloadController); Get.put<DownloadController>(downloadController);
@@ -343,13 +352,14 @@ void main() {
getEmailByIdInteractor); getEmailByIdInteractor);
Get.put(threadController); Get.put(threadController);
advancedFilterController = AdvancedFilterController();
mailboxDashboardController.sessionCurrent = testSession; mailboxDashboardController.sessionCurrent = testSession;
mailboxDashboardController.filterMessageOption.value = FilterMessageOption.all; mailboxDashboardController.filterMessageOption.value = FilterMessageOption.all;
mailboxDashboardController.userProfile.value = UserProfile('test@gmail.com'); mailboxDashboardController.userProfile.value = UserProfile('test@gmail.com');
mailboxDashboardController.accountId.value = testAccountId;
}); });
tearDown(Get.deleteAll);
test('WHEN user search email by keyword, ' test('WHEN user search email by keyword, '
'THEN user filter search result, ' 'THEN user filter search result, '
'THEN user tap on mail box, ' 'THEN user tap on mail box, '
@@ -358,8 +368,6 @@ void main() {
() async { () async {
// arrange // arrange
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager())); when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
final testAccountId = AccountId(Id('123'));
mailboxDashboardController.accountId.value = testAccountId;
// expect query in search controller update as expected // expect query in search controller update as expected
mailboxDashboardController.searchEmail(context, queryString: queryString); mailboxDashboardController.searchEmail(context, queryString: queryString);
@@ -382,7 +390,7 @@ void main() {
// when [selectedMailbox] is changed and triggered obx listener in thread controller // when [selectedMailbox] is changed and triggered obx listener in thread controller
mailboxController.openMailbox(context, PresentationMailbox(testMailboxId)); mailboxController.openMailbox(context, PresentationMailbox(testMailboxId));
await untilCalled(getEmailsInMailboxInteractor.execute( await untilCalled(getEmailsInMailboxInteractor.execute(
any, testAccountId, any, any,
limit: anyNamed('limit'), limit: anyNamed('limit'),
sort: anyNamed('sort'), sort: anyNamed('sort'),
emailFilter: anyNamed('emailFilter'), emailFilter: anyNamed('emailFilter'),
@@ -401,4 +409,64 @@ void main() {
propertiesCreated: ThreadConstants.propertiesDefault, propertiesCreated: ThreadConstants.propertiesDefault,
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault)); propertiesUpdated: ThreadConstants.propertiesUpdatedDefault));
}); });
test('WHEN user use advanced search/sort/filter feature, '
'THEN user tap on mail box, '
'SHOULD reset all advanced search and filter options, '
'THEN query get all email with default options',
() async {
final fromEmailAddress = EmailAddress('test from', 'test-from@gmail.com');
final toEmailAddress = EmailAddress('test to', 'test-to@gmail.com');
const emailSubject = 'test subject';
const emailContainsWord = 'test word';
const emailNotContainsWord = 'test not word';
// arrange
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
// expect query in advanced filter controller update as expected
advancedFilterController.updateListEmailAddress(AdvancedSearchFilterField.from, [fromEmailAddress]);
advancedFilterController.updateListEmailAddress(AdvancedSearchFilterField.to, [toEmailAddress]);
advancedFilterController.subjectFilterInputController.text = emailSubject;
advancedFilterController.hasKeyWordFilterInputController.text = emailContainsWord;
advancedFilterController.notKeyWordFilterInputController.text = emailNotContainsWord;
// mailbox: impossible? due to private field
advancedFilterController.updateReceiveDateSearchFilter(context, EmailReceiveTimeType.last30Days);
advancedFilterController.updateSortOrder(EmailSortOrderType.relevance);
advancedFilterController.applyAdvancedSearchFilter(context);
expect(searchController.searchEmailFilter.value, SearchEmailFilter(
from: {fromEmailAddress.email!},
to: {toEmailAddress.email!},
subject: emailSubject,
text: SearchQuery(emailContainsWord),
notKeyword: {emailNotContainsWord},
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
sortOrder: EmailSortOrderType.relevance.getSortOrder().toNullable(),
position: 0));
// expect mailbox dashboard controller calls GetEmailsInMailboxInteractor
// when [selectedMailbox] is changed and triggered obx listener in thread controller
mailboxController.openMailbox(context, PresentationMailbox(testMailboxId));
await untilCalled(getEmailsInMailboxInteractor.execute(
any, any,
limit: anyNamed('limit'),
sort: anyNamed('sort'),
emailFilter: anyNamed('emailFilter'),
propertiesCreated: anyNamed('propertiesCreated'),
propertiesUpdated: anyNamed('propertiesUpdated')));
expect(searchController.sortOrderFiltered.value, EmailSortOrderType.mostRecent);
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
verify(getEmailsInMailboxInteractor.execute(
testSession, testAccountId,
limit: ThreadConstants.defaultLimit,
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
emailFilter: EmailFilter(
filter: EmailFilterCondition(inMailbox: testMailboxId),
filterOption: FilterMessageOption.all,
mailboxId: testMailboxId),
propertiesCreated: ThreadConstants.propertiesDefault,
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault));
});
tearDown(Get.deleteAll);
});
} }