From bfb20d3b6c829be8d1306827d2dbcc40dea73911 Mon Sep 17 00:00:00 2001 From: DatDang Date: Wed, 19 Mar 2025 10:52:28 +0700 Subject: [PATCH] TF-3569 E2E Mailbox toggle read/star/spam --- integration_test/robots/thread_robot.dart | 19 +++++++++ ...ingle_selected_email_as_read_scenario.dart | 33 ++++++++++++++++ ...ingle_selected_email_as_spam_scenario.dart | 39 +++++++++++++++++++ ...ingle_selected_email_as_star_scenario.dart | 33 ++++++++++++++++ ...rk_single_selected_email_as_read_test.dart | 9 +++++ ...rk_single_selected_email_as_spam_test.dart | 9 +++++ ...rk_single_selected_email_as_star_test.dart | 9 +++++ 7 files changed, 151 insertions(+) create mode 100644 integration_test/scenarios/mailbox/mark_single_selected_email_as_read_scenario.dart create mode 100644 integration_test/scenarios/mailbox/mark_single_selected_email_as_spam_scenario.dart create mode 100644 integration_test/scenarios/mailbox/mark_single_selected_email_as_star_scenario.dart create mode 100644 integration_test/tests/mailbox/mark_single_selected_email_as_read_test.dart create mode 100644 integration_test/tests/mailbox/mark_single_selected_email_as_spam_test.dart create mode 100644 integration_test/tests/mailbox/mark_single_selected_email_as_star_test.dart diff --git a/integration_test/robots/thread_robot.dart b/integration_test/robots/thread_robot.dart index 93b2c53a9..e6cabab33 100644 --- a/integration_test/robots/thread_robot.dart +++ b/integration_test/robots/thread_robot.dart @@ -127,4 +127,23 @@ class ThreadRobot extends CoreRobot { await $(#moveToTrash_selected_email_button).tap(); await $.pumpAndTrySettle(); } + + Future tapMarkAsReadButton() async { + await $(#markAsRead_selected_email_button).tap(); + await $.pumpAndTrySettle(); + } + + Future tapMarkAsStarAction() async { + await $(#moreAction_selected_email_button).tap(); + await $.pumpAndTrySettle(); + await $(#markAsStarred_action).tap(); + await $.pumpAndTrySettle(); + } + + Future tapMarkAsSpamAction() async { + await $(#moreAction_selected_email_button).tap(); + await $.pumpAndTrySettle(); + await $(#moveToSpam_action).tap(); + await $.pumpAndTrySettle(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/mailbox/mark_single_selected_email_as_read_scenario.dart b/integration_test/scenarios/mailbox/mark_single_selected_email_as_read_scenario.dart new file mode 100644 index 000000000..c34c225fc --- /dev/null +++ b/integration_test/scenarios/mailbox/mark_single_selected_email_as_read_scenario.dart @@ -0,0 +1,33 @@ +import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../models/provisioning_email.dart'; +import '../../robots/thread_robot.dart'; + +class MarkSingleSelectedEmailAsReadScenario extends BaseTestScenario { + const MarkSingleSelectedEmailAsReadScenario(super.$); + + @override + Future runTestLogic() async { + const email = String.fromEnvironment('BASIC_AUTH_EMAIL'); + const readSubject = 'single selected read'; + + final threadRobot = ThreadRobot($); + + await provisionEmail([ + ProvisioningEmail(toEmail: email, subject: readSubject, content: ''), + ]); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + + await threadRobot.longPressEmailWithSubject(readSubject); + await threadRobot.tapMarkAsReadButton(); + await _expectEmailWithSubjectIsRead(readSubject); + } + + Future _expectEmailWithSubjectIsRead(String subject) async { + await expectViewVisible($(EmailTileBuilder).which( + (widget) => widget.presentationEmail.subject == subject + && widget.presentationEmail.hasRead + )); + } +} \ No newline at end of file diff --git a/integration_test/scenarios/mailbox/mark_single_selected_email_as_spam_scenario.dart b/integration_test/scenarios/mailbox/mark_single_selected_email_as_spam_scenario.dart new file mode 100644 index 000000000..c4da17b6e --- /dev/null +++ b/integration_test/scenarios/mailbox/mark_single_selected_email_as_spam_scenario.dart @@ -0,0 +1,39 @@ +import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.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 MarkSingleSelectedEmailAsSpamScenario extends BaseTestScenario { + const MarkSingleSelectedEmailAsSpamScenario(super.$); + + @override + Future runTestLogic() async { + const email = String.fromEnvironment('BASIC_AUTH_EMAIL'); + const spamSubject = 'single selected spam'; + + final threadRobot = ThreadRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + + await provisionEmail([ + ProvisioningEmail(toEmail: email, subject: spamSubject, content: ''), + ]); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + + await threadRobot.longPressEmailWithSubject(spamSubject); + await threadRobot.tapMarkAsSpamAction(); + await threadRobot.openMailbox(); + await mailboxMenuRobot.openFolderByName( + AppLocalizations().spamMailboxDisplayName, + ); + await _expectEmailWithSubjectExist(spamSubject); + } + + Future _expectEmailWithSubjectExist(String subject) async { + await expectViewVisible($(EmailTileBuilder).which( + (widget) => widget.presentationEmail.subject == subject + )); + } +} diff --git a/integration_test/scenarios/mailbox/mark_single_selected_email_as_star_scenario.dart b/integration_test/scenarios/mailbox/mark_single_selected_email_as_star_scenario.dart new file mode 100644 index 000000000..241c64c6c --- /dev/null +++ b/integration_test/scenarios/mailbox/mark_single_selected_email_as_star_scenario.dart @@ -0,0 +1,33 @@ +import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../models/provisioning_email.dart'; +import '../../robots/thread_robot.dart'; + +class MarkSingleSelectedEmailAsStarScenario extends BaseTestScenario { + const MarkSingleSelectedEmailAsStarScenario(super.$); + + @override + Future runTestLogic() async { + const email = String.fromEnvironment('BASIC_AUTH_EMAIL'); + const starSubject = 'single selected star'; + + final threadRobot = ThreadRobot($); + + await provisionEmail([ + ProvisioningEmail(toEmail: email, subject: starSubject, content: ''), + ]); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + + await threadRobot.longPressEmailWithSubject(starSubject); + await threadRobot.tapMarkAsStarAction(); + await _expectEmailWithSubjectIsStarred(starSubject); + } + + Future _expectEmailWithSubjectIsStarred(String subject) async { + await expectViewVisible($(EmailTileBuilder).which( + (widget) => widget.presentationEmail.subject == subject + && widget.presentationEmail.hasStarred + )); + } +} \ No newline at end of file diff --git a/integration_test/tests/mailbox/mark_single_selected_email_as_read_test.dart b/integration_test/tests/mailbox/mark_single_selected_email_as_read_test.dart new file mode 100644 index 000000000..fc6bea50c --- /dev/null +++ b/integration_test/tests/mailbox/mark_single_selected_email_as_read_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/mailbox/mark_single_selected_email_as_read_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see selected email mark as read successfully', + scenarioBuilder: ($) => MarkSingleSelectedEmailAsReadScenario($), + ); +} diff --git a/integration_test/tests/mailbox/mark_single_selected_email_as_spam_test.dart b/integration_test/tests/mailbox/mark_single_selected_email_as_spam_test.dart new file mode 100644 index 000000000..9f9d900af --- /dev/null +++ b/integration_test/tests/mailbox/mark_single_selected_email_as_spam_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/mailbox/mark_single_selected_email_as_spam_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see selected email mark as spam successfully', + scenarioBuilder: ($) => MarkSingleSelectedEmailAsSpamScenario($), + ); +} diff --git a/integration_test/tests/mailbox/mark_single_selected_email_as_star_test.dart b/integration_test/tests/mailbox/mark_single_selected_email_as_star_test.dart new file mode 100644 index 000000000..904cea63b --- /dev/null +++ b/integration_test/tests/mailbox/mark_single_selected_email_as_star_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/mailbox/mark_single_selected_email_as_star_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see selected email mark as star successfully', + scenarioBuilder: ($) => MarkSingleSelectedEmailAsStarScenario($), + ); +}