Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions core/lib/presentation/extensions/string_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,6 @@ extension StringExtension on String {
return 0;
}
}

String get trimmed => trim();
}
10 changes: 10 additions & 0 deletions integration_test/robots/search_robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,14 @@ class SearchRobot extends CoreRobot {
Future<void> tapBackButton() async {
await $(#search_email_back_button).tap();
}

Future<void> selectAttachmentFilter() async {
await $.scrollUntilVisible(
finder: $(#mobile_hasAttachment_search_filter_button),
view: $(#search_filter_list_view),
scrollDirection: AxisDirection.right,
delta: 50,
);
await $(#mobile_hasAttachment_search_filter_button).tap();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/search_filters/search_filter_button.dart';

import '../../base/base_test_scenario.dart';
import '../../models/provisioning_email.dart';
import '../../robots/search_robot.dart';
import '../../robots/thread_robot.dart';

class PersistFilterWhenChangeSearchInputTextScenario
extends BaseTestScenario {
const PersistFilterWhenChangeSearchInputTextScenario(super.$);

@override
Future<void> runTestLogic() async {
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
const subject = 'Persist search filter';
const queryStringFirst = 'Persist';
const queryStringSecond = 'Persist search';

final threadRobot = ThreadRobot($);
final searchRobot = SearchRobot($);

final file = await preparingTxtFile('attachment');
await provisionEmail(
[
ProvisioningEmail(
toEmail: email,
subject: subject,
content: subject,
attachmentPaths: [file.path],
),
],
requestReadReceipt: false,
);
await $.pumpAndSettle();

await threadRobot.tapOnSearchField();
await searchRobot.enterKeyword(queryStringFirst);
await searchRobot.tapOnShowAllResultsText();
await _expectEmailWithSubjectVisible(subject);

await searchRobot.selectAttachmentFilter();
await _expectEmailWithSubjectVisible(subject);
_expectAttachmentFilterSelected();

await searchRobot.enterKeyword(queryStringSecond);
await _expectEmailWithSubjectVisible(subject);
_expectAttachmentFilterSelected();
}

Future<void> _expectEmailWithSubjectVisible(String subject) async {
await expectViewVisible($(find.text(subject)));
}

void _expectAttachmentFilterSelected() {
expect(
$(#mobile_hasAttachment_search_filter_button)
.which<SearchFilterButton>((widget) => widget.isSelected)
.visible,
true,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/search/persist_filter_when_change_search_input_text_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should see the same email when selecting filter and changing search input text',
scenarioBuilder: ($) => PersistFilterWhenChangeSearchInputTextScenario($),
);
}
6 changes: 0 additions & 6 deletions lib/features/mailbox/presentation/mailbox_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -262,12 +262,6 @@ class MailboxController extends BaseMailboxController
_handleNavigationRouteParameters
);

ever(mailboxDashBoardController.dashBoardAction, (action) {
if (action is ClearSearchEmailAction) {
_switchBackToMailboxDefault();
}
});

ever(mailboxDashBoardController.mailboxUIAction, (action) {
if (action is SelectMailboxDefaultAction) {
_switchBackToMailboxDefault();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ class StartSearchEmailAction extends DashBoardAction {}

class EmptyTrashAction extends DashBoardAction {}

class ClearSearchEmailAction extends DashBoardAction {}

class ClearAllFieldOfAdvancedSearchAction extends DashBoardAction {}

class OpenEmailInsideMailboxFromLocationBar extends DashBoardAction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -968,7 +968,6 @@ class MailboxDashBoardController extends ReloadableController
void searchEmailByQueryString(String queryString) {
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
log('MailboxDashBoardController::searchEmailByQueryString():QueryString = $queryString | isMailAddress = $isMailAddress');
clearFilterMessageOption();
if (_searchInsideThreadDetailViewIsActive()) {
_closeEmailDetailedView();
}
Expand Down Expand Up @@ -999,11 +998,6 @@ class MailboxDashBoardController extends ReloadableController
&& dashboardRoute.value == DashboardRoutes.threadDetailed;
}

void clearSearchEmail() {
dispatchAction(ClearSearchEmailAction());
searchController.disableSimpleSearch();
}

void _unSelectedMailbox() {
selectedMailbox.value = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,28 +143,27 @@ class SearchController extends BaseController with DateRangePickerMixin {
void applyFilterSuggestionToSearchFilter(String currentUserEmail) {
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
? EmailReceiveTimeType.last7Days
: EmailReceiveTimeType.allTime;
: null;

final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment)
? true
: null;

var listFromAddress = searchEmailFilter.value.from;
if (currentUserEmail.isNotEmpty) {
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
listFromAddress.add(currentUserEmail);
} else {
listFromAddress.remove(currentUserEmail);
}
if (currentUserEmail.isNotEmpty &&
listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
listFromAddress.add(currentUserEmail);
}

final listHasKeyword = listFilterOnSuggestionForm.contains(QuickSearchFilter.starred)
? {KeyWordIdentifier.emailFlagged.value}
: null;

updateFilterEmail(
emailReceiveTimeTypeOption: Some(receiveTime),
hasAttachmentOption: Some(hasAttachment),
emailReceiveTimeTypeOption: receiveTime != null ? Some(receiveTime) : null,
hasAttachmentOption: hasAttachment != null ? Some(hasAttachment) : null,
fromOption: Some(listFromAddress),
hasKeywordOption: optionOf(listHasKeyword),
hasKeywordOption: listHasKeyword != null ? Some(listHasKeyword) : null,
);

clearFilterSuggestion();
Expand Down Expand Up @@ -232,13 +231,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
searchState.value = searchState.value.enableSearchState();
}

void disableSimpleSearch() {
updateFilterEmail(textOption: Some(SearchQuery.initial()));
_clearAllTextInputSimpleSearch();
deactivateSimpleSearch();
hideSimpleSearchFormView();
}

void clearTextSearch() {
searchInputController.clear();
searchFocus.requestFocus();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/extensions/string_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart';
Expand Down Expand Up @@ -160,24 +161,22 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {

void _invokeSearchEmailAction(String queryString) {
log('SearchInputFormWidget::_invokeSearchEmailAction:QueryString = $queryString');
final trimmedQueryString = queryString.trimmed;

_searchController.searchFocus.unfocus();
_searchController.enableSearch();

if (queryString.isNotEmpty) {
_saveRecentSearch(queryString);
if (trimmedQueryString.isNotEmpty) {
_saveRecentSearch(trimmedQueryString);
}

if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
_searchController.clearSearchFilter(
sortOrderType: _dashBoardController.currentSortOrder,
);
if (_searchController.listFilterOnSuggestionForm.isNotEmpty) {
_searchController.applyFilterSuggestionToSearchFilter(
_dashBoardController.ownEmailAddress.value,
);
_dashBoardController.searchEmailByQueryString(queryString);
} else {
_dashBoardController.clearSearchEmail();
}

_dashBoardController.searchEmailByQueryString(trimmedQueryString);
}

void _saveRecentSearch(String queryString) {
Expand All @@ -192,7 +191,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
_searchController.saveRecentSearch(
accountId,
userName,
RecentSearch.now(queryString),
RecentSearch.now(queryString.trimmed),
);
}

Expand All @@ -208,9 +207,6 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
_searchController.searchInputController.text = recent.value;
_searchController.searchFocus.unfocus();
_searchController.enableSearch();
_searchController.clearSearchFilter(
sortOrderType: _dashBoardController.currentSortOrder,
);
_searchController.applyFilterSuggestionToSearchFilter(
_dashBoardController.ownEmailAddress.value,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -603,9 +603,6 @@ class SearchEmailController extends BaseController
listResultSearch.clear();
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
emailSortOrderType.value = mailboxDashBoardController.currentSortOrder;
searchEmailFilter.value = SearchEmailFilter.withSortOrder(
emailSortOrderType.value,
);
searchIsRunning.value = false;
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
if (isMailAddress) {
Expand Down
Loading