Skip to content

Commit adaa4b9

Browse files
dab246hoangdat
authored andcommitted
TF-3449 Add integration test for send email with mark as important
Signed-off-by: dab246 <tdvu@linagora.com>
1 parent 4e5e8f5 commit adaa4b9

File tree

6 files changed

+104
-0
lines changed

6 files changed

+104
-0
lines changed

integration_test/robots/composer_robot.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,12 @@ class ComposerRobot extends CoreRobot {
8585
Future<void> tapSaveButtonOnSaveDraftConfirmDialog(AppLocalizations appLocalizations) async {
8686
await $(find.text(appLocalizations.save)).tap();
8787
}
88+
89+
Future<void> tapMoreOptionOnAppBar() async {
90+
await $(#composer_more_button).tap();
91+
}
92+
93+
Future<void> tapMarkAsImportantPopupItemOnMenu() async {
94+
await $(#mark_as_important_popup_item).tap();
95+
}
8896
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import 'package:core/presentation/resources/image_paths.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
import 'package:model/email/prefix_email_address.dart';
4+
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
5+
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';
6+
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
7+
8+
import '../base/base_test_scenario.dart';
9+
import '../robots/composer_robot.dart';
10+
import '../robots/thread_robot.dart';
11+
12+
class SendEmailWithMarkAsImportantScenario extends BaseTestScenario {
13+
const SendEmailWithMarkAsImportantScenario(super.$);
14+
15+
@override
16+
Future<void> runTestLogic() async {
17+
const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL');
18+
const emailContent = 'Mark email as important';
19+
20+
final threadRobot = ThreadRobot($);
21+
final composerRobot = ComposerRobot($);
22+
final imagePaths = ImagePaths();
23+
final appLocalizations = AppLocalizations();
24+
25+
await threadRobot.openComposer();
26+
await _expectComposerViewVisible();
27+
28+
await composerRobot.grantContactPermission();
29+
30+
await composerRobot.addRecipientIntoField(
31+
prefixEmailAddress: PrefixEmailAddress.to,
32+
email: emailUser,
33+
);
34+
await composerRobot.addSubject(emailContent);
35+
await composerRobot.addContent(emailContent);
36+
37+
await composerRobot.tapMoreOptionOnAppBar();
38+
await $.pump(const Duration(seconds: 2));
39+
await _expectMoreOptionPopupMenuVisible();
40+
41+
await composerRobot.tapMarkAsImportantPopupItemOnMenu();
42+
await $.pump(const Duration(seconds: 2));
43+
await _expectToastDisplayWithMessageMarkAsImportantIsEnabled(appLocalizations);
44+
45+
await composerRobot.sendEmail(imagePaths);
46+
await _expectSendEmailSuccessToast(appLocalizations);
47+
await $.pump(const Duration(seconds: 2));
48+
49+
await _expectDisplayedEmailHasImportantFlagIcon();
50+
}
51+
52+
Future<void> _expectComposerViewVisible() => expectViewVisible($(ComposerView));
53+
54+
Future<void> _expectMoreOptionPopupMenuVisible() async {
55+
await expectViewVisible($(#mark_as_important_popup_item));
56+
}
57+
58+
Future<void> _expectToastDisplayWithMessageMarkAsImportantIsEnabled(
59+
AppLocalizations appLocalizations,
60+
) async {
61+
await expectViewVisible(
62+
$(find.text(appLocalizations.markAsImportantIsEnabled)),
63+
);
64+
}
65+
66+
Future<void> _expectSendEmailSuccessToast(
67+
AppLocalizations appLocalizations,
68+
) async {
69+
await expectViewVisible(
70+
$(find.text(appLocalizations.message_has_been_sent_successfully)),
71+
);
72+
}
73+
74+
Future<void> _expectDisplayedEmailHasImportantFlagIcon() async {
75+
await expectViewVisible(
76+
$(EmailTileBuilder)
77+
.which<EmailTileBuilder>(
78+
(widget) => widget.presentationEmail.isMarkAsImportant
79+
&& widget.isSenderImportantFlagEnabled
80+
),
81+
);
82+
await expectViewVisible($(#important_flag_icon));
83+
}
84+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import '../../base/test_base.dart';
2+
import '../../scenarios/send_email_with_mark_as_important_scenario.dart';
3+
4+
void main() {
5+
TestBase().runPatrolTest(
6+
description: 'Should see email item has important flag icon when send email with mark as important successfully',
7+
scenarioBuilder: ($) => SendEmailWithMarkAsImportantScenario($),
8+
);
9+
}

lib/features/composer/presentation/composer_view.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ class ComposerView extends GetWidget<ComposerController> {
500500
PopupMenuItem(
501501
padding: EdgeInsets.zero,
502502
child: PopupItemWidget(
503+
key: const Key('mark_as_important_popup_item'),
503504
iconAction: controller.imagePaths.icMarkAsImportant,
504505
nameAction: AppLocalizations.of(context).markAsImportant,
505506
styleName: ComposerStyle.popupItemTextStyle,

lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class AppBarComposerWidget extends StatelessWidget {
9191
),
9292
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
9393
TMailButtonWidget.fromIcon(
94+
key: const Key('composer_more_button'),
9495
icon: imagePaths.icMore,
9596
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
9697
backgroundColor: Colors.transparent,

lib/features/thread/presentation/mixin/base_email_item_tile.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ mixin BaseEmailItemTile {
357357

358358
Widget buildMarkAsImportantIcon(BuildContext context) {
359359
return Padding(
360+
key: const Key('important_flag_icon'),
360361
padding: ItemEmailTileStyles.getSpaceCalendarEventIcon(
361362
context,
362363
responsiveUtils,

0 commit comments

Comments
 (0)