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($), + ); +}