TF-2694 Unit Test User use advanced filter and sort then reset with open mailbox
This commit is contained in:
+74
-6
@@ -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);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user