TF-3579 E2E Mailbox mark as read
This commit is contained in:
@@ -175,4 +175,9 @@ class MailboxMenuRobot extends CoreRobot {
|
||||
Future<void> tapAddNewFolderButton() async {
|
||||
await $(#add_new_folder_button).tap();
|
||||
}
|
||||
|
||||
Future<void> tapMarkAsRead() async {
|
||||
await $(AppLocalizations().mark_as_read).tap();
|
||||
await $.pumpAndSettle();
|
||||
}
|
||||
}
|
||||
@@ -113,13 +113,18 @@ class ThreadRobot extends CoreRobot {
|
||||
}
|
||||
|
||||
Future<void> moveEmailToMailboxWithName(String mailboxName) async {
|
||||
await $(#move_selected_email_to_mailbox_button).tap();
|
||||
await $(#moreAction_selected_email_button).tap();
|
||||
await $.pumpAndTrySettle();
|
||||
|
||||
await $(#moveToMailbox_action).tap();
|
||||
await $.pumpAndTrySettle();
|
||||
|
||||
await $(mailboxName).tap();
|
||||
await $.pumpAndSettle();
|
||||
await $.pumpAndTrySettle();
|
||||
}
|
||||
|
||||
Future<void> moveEmailToTrash() async {
|
||||
await $(#delete_selected_email_button).tap();
|
||||
await $.pumpAndSettle();
|
||||
await $(#moveToTrash_selected_email_button).tap();
|
||||
await $.pumpAndTrySettle();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
import '../../base/base_test_scenario.dart';
|
||||
import '../../models/provisioning_email.dart';
|
||||
import '../../robots/mailbox_menu_robot.dart';
|
||||
import '../../robots/thread_robot.dart';
|
||||
|
||||
class MarkMailboxAsReadScenario extends BaseTestScenario {
|
||||
const MarkMailboxAsReadScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> runTestLogic() async {
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
|
||||
final threadRobot = ThreadRobot($);
|
||||
final mailboxMenuRobot = MailboxMenuRobot($);
|
||||
|
||||
await provisionEmail([ProvisioningEmail(
|
||||
toEmail: email,
|
||||
subject: 'placeholder email',
|
||||
content: ''
|
||||
)]);
|
||||
await $.pumpAndSettle(duration: const Duration(seconds: 2));
|
||||
await threadRobot.openMailbox();
|
||||
await $.pumpAndTrySettle();
|
||||
_expectInboxUnreadCountVisible();
|
||||
|
||||
await mailboxMenuRobot.longPressMailboxWithName(
|
||||
AppLocalizations().inboxMailboxDisplayName,
|
||||
);
|
||||
await mailboxMenuRobot.tapMarkAsRead();
|
||||
await threadRobot.openMailbox();
|
||||
await $.pumpAndTrySettle();
|
||||
_expectInboxUnreadCountInvisible();
|
||||
}
|
||||
|
||||
void _expectInboxUnreadCountVisible() {
|
||||
expect(
|
||||
$(TrailingMailboxItemWidget).which<TrailingMailboxItemWidget>((widget) {
|
||||
final mailbox = widget.mailboxNode.item;
|
||||
return mailbox.role == PresentationMailbox.roleInbox &&
|
||||
mailbox.countUnReadEmailsAsString.isNotEmpty;
|
||||
}),
|
||||
findsOneWidget,
|
||||
);
|
||||
}
|
||||
|
||||
void _expectInboxUnreadCountInvisible() {
|
||||
expect(
|
||||
$(TrailingMailboxItemWidget)
|
||||
.which<TrailingMailboxItemWidget>((widget) {
|
||||
final mailbox = widget.mailboxNode.item;
|
||||
return mailbox.role == PresentationMailbox.roleInbox
|
||||
&& mailbox.countUnReadEmailsAsString.isNotEmpty;
|
||||
}
|
||||
),
|
||||
findsNothing,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import '../../base/test_base.dart';
|
||||
import '../../scenarios/mailbox/mark_mailbox_as_read_scenario.dart';
|
||||
|
||||
void main() {
|
||||
TestBase().runPatrolTest(
|
||||
description: 'Should not see unread counter when mark mailbox as read',
|
||||
scenarioBuilder: ($) => MarkMailboxAsReadScenario($),
|
||||
);
|
||||
}
|
||||
+1
@@ -71,6 +71,7 @@ extension HandlePressEmailSelectionActionExtension on SearchEmailController {
|
||||
AppLocalizations.of(context),
|
||||
imagePaths,
|
||||
category: action.category,
|
||||
key: '${action.name}_action',
|
||||
))
|
||||
.toList();
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ extension HandlePressEmailSelectionActionExtension on ThreadController {
|
||||
AppLocalizations.of(context),
|
||||
imagePaths,
|
||||
category: action.category,
|
||||
key: '${action.name}_action',
|
||||
))
|
||||
.toList();
|
||||
|
||||
|
||||
+1
@@ -64,6 +64,7 @@ class SelectionMobileAppBarThreadWidget extends StatelessWidget {
|
||||
),
|
||||
...emailSelectionActionTypes.map(
|
||||
(type) => TMailButtonWidget.fromIcon(
|
||||
key: Key('${type.name}_selected_email_button'),
|
||||
icon: type.getIcon(imagePaths),
|
||||
iconColor: type.getIconColor(),
|
||||
iconSize: type.getIconSize(),
|
||||
|
||||
@@ -1,197 +0,0 @@
|
||||
import 'package:core/presentation/extensions/color_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';
|
||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/list_presentation_email_extension.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
typedef OnPressEmailSelectionActionClick = void Function(EmailActionType, List<PresentationEmail>);
|
||||
|
||||
class BottomBarThreadSelectionWidget extends StatelessWidget{
|
||||
|
||||
final ImagePaths _imagePaths;
|
||||
final ResponsiveUtils _responsiveUtils;
|
||||
final List<PresentationEmail> _listSelectionEmail;
|
||||
final PresentationMailbox? _currentMailbox;
|
||||
final OnPressEmailSelectionActionClick? onPressEmailSelectionActionClick;
|
||||
|
||||
const BottomBarThreadSelectionWidget(
|
||||
this._imagePaths,
|
||||
this._responsiveUtils,
|
||||
this._listSelectionEmail,
|
||||
this._currentMailbox,
|
||||
{
|
||||
super.key,
|
||||
this.onPressEmailSelectionActionClick,
|
||||
}
|
||||
);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: const BoxDecoration(
|
||||
border: Border(top: BorderSide(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
width: 0.5,
|
||||
)),
|
||||
),
|
||||
child: IntrinsicHeight(
|
||||
child: Row(
|
||||
children: [
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('mark_as_read_selected_email_button'),
|
||||
text: _listSelectionEmail.isAllEmailRead
|
||||
? AppLocalizations.of(context).unread
|
||||
: AppLocalizations.of(context).read,
|
||||
icon: _listSelectionEmail.isAllEmailRead ? _imagePaths.icUnread : _imagePaths.icRead,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
iconColor: AppColor.steelGrayA540,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: ThemeUtils.defaultTextStyleInterFont.copyWith(
|
||||
fontSize: 12,
|
||||
color: AppColor.steelGrayA540,
|
||||
),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
|
||||
_listSelectionEmail
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('mark_as_star_selected_email_button'),
|
||||
text: _listSelectionEmail.isAllEmailStarred
|
||||
? AppLocalizations.of(context).un_star
|
||||
: AppLocalizations.of(context).star,
|
||||
icon: _listSelectionEmail.isAllEmailStarred ? _imagePaths.icUnStar : _imagePaths.icStar,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
iconColor: _listSelectionEmail.isAllEmailStarred
|
||||
? AppColor.steelGrayA540
|
||||
: null,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: ThemeUtils.defaultTextStyleInterFont.copyWith(
|
||||
fontSize: 12,
|
||||
color: AppColor.steelGrayA540,
|
||||
),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(
|
||||
_listSelectionEmail.isAllEmailStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
|
||||
_listSelectionEmail
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('move_selected_email_to_mailbox_button'),
|
||||
text: AppLocalizations.of(context).move,
|
||||
icon: _imagePaths.icMoveMailbox,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
iconColor: AppColor.steelGrayA540,
|
||||
textAlign: TextAlign.center,
|
||||
flexibleText: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: ThemeUtils.defaultTextStyleInterFont.copyWith(
|
||||
fontSize: 12,
|
||||
color: AppColor.steelGrayA540,
|
||||
),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToMailbox, _listSelectionEmail);
|
||||
},
|
||||
),
|
||||
),
|
||||
if (_currentMailbox?.isDrafts == false)
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('move_selected_email_to_spam_button'),
|
||||
text: _currentMailbox?.isSpam == true
|
||||
? AppLocalizations.of(context).un_spam
|
||||
: AppLocalizations.of(context).spam,
|
||||
icon: _currentMailbox?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
iconColor: AppColor.steelGrayA540,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: ThemeUtils.defaultTextStyleInterFont.copyWith(
|
||||
fontSize: 12,
|
||||
color: AppColor.steelGrayA540,
|
||||
),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
if (_currentMailbox?.isSpam == true) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.unSpam, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToSpam, _listSelectionEmail);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TMailButtonWidget(
|
||||
key: const Key('delete_selected_email_button'),
|
||||
text: AppLocalizations.of(context).delete,
|
||||
icon: _imagePaths.icDeleteComposer,
|
||||
borderRadius: 0,
|
||||
iconSize: 20,
|
||||
iconColor: AppColor.steelGrayA540,
|
||||
flexibleText: true,
|
||||
textAlign: TextAlign.center,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 12),
|
||||
backgroundColor: Colors.transparent,
|
||||
textStyle: ThemeUtils.defaultTextStyleInterFont.copyWith(
|
||||
fontSize: 12,
|
||||
color: AppColor.steelGrayA540,
|
||||
),
|
||||
verticalDirection: _verticalDirection(context),
|
||||
onTapActionCallback: () {
|
||||
if (canDeletePermanently) {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.deletePermanently, _listSelectionEmail);
|
||||
} else {
|
||||
onPressEmailSelectionActionClick?.call(EmailActionType.moveToTrash, _listSelectionEmail);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
bool get canDeletePermanently {
|
||||
return _currentMailbox?.isTrash == true || _currentMailbox?.isDrafts == true || _currentMailbox?.isSpam == true;
|
||||
}
|
||||
|
||||
bool _verticalDirection(BuildContext context) {
|
||||
return _responsiveUtils.isLandscapeMobile(context) ||
|
||||
_responsiveUtils.isPortraitMobile(context) ||
|
||||
_responsiveUtils.isTabletLarge(context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user