From 7f4dcf8b38b6116b48c9ed9001972c7f110eaba1 Mon Sep 17 00:00:00 2001 From: DatDang Date: Wed, 9 Apr 2025 15:13:43 +0700 Subject: [PATCH] TF-3611 E2E Long press spam empty and recover --- integration_test/robots/thread_robot.dart | 4 + ...press_empty_and_recover_spam_scenario.dart | 97 +++++++++++++++++++ ...ong_press_empty_and_recover_spam_test.dart | 9 ++ 3 files changed, 110 insertions(+) create mode 100644 integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart create mode 100644 integration_test/tests/mailbox/long_press_empty_and_recover_spam_test.dart diff --git a/integration_test/robots/thread_robot.dart b/integration_test/robots/thread_robot.dart index 23c1ef26b..02ce25a6b 100644 --- a/integration_test/robots/thread_robot.dart +++ b/integration_test/robots/thread_robot.dart @@ -103,4 +103,8 @@ class ThreadRobot extends CoreRobot { await $(AppLocalizations().delete).tap(); await $.pumpAndSettle(duration: const Duration(seconds: 2)); } + + Future tapEmptySpamAfterLongPress() async { + await $(AppLocalizations().deleteAllSpamEmails).tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart b/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart new file mode 100644 index 000000000..24c5e731f --- /dev/null +++ b/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart @@ -0,0 +1,97 @@ +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/base/widget/clean_messages_banner.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 LongPressEmptyAndRecoverSpamScenario extends BaseTestScenario { + const LongPressEmptyAndRecoverSpamScenario(super.$); + + @override + Future runTestLogic() async { + const toEmail = String.fromEnvironment('BASIC_AUTH_EMAIL'); + const subject = 'long press spam'; + + final threadRobot = ThreadRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + final appLocalizations = AppLocalizations(); + + await provisionEmail( + [ProvisioningEmail( + toEmail: toEmail, + subject: subject, + content: '', + )], + folderLocationRole: PresentationMailbox.roleJunk, + ); + await $.pumpAndTrySettle(duration: const Duration(seconds: 2)); + await threadRobot.openMailbox(); + await $.pumpAndTrySettle(); + _expectSpamUnreadCountVisible( + appLocalizations.spamMailboxDisplayName, + ); + await mailboxMenuRobot.longPressMailboxWithName( + appLocalizations.spamMailboxDisplayName, + ); + await threadRobot.tapEmptySpamAfterLongPress(); + await threadRobot.confirmEmptySpam(); + await $.pumpAndTrySettle(duration: const Duration(seconds: 2)); + _expectSpamUnreadCountInvisible( + appLocalizations.spamMailboxDisplayName, + ); + await threadRobot.openMailbox(); + await mailboxMenuRobot.openFolderByName( + appLocalizations.spamMailboxDisplayName, + ); + await _expectSpamBannerInvisible(); + + await threadRobot.openMailbox(); + await mailboxMenuRobot.longPressMailboxWithName( + appLocalizations.trashMailboxDisplayName, + ); + await mailboxMenuRobot.tapRecoverDeletedMessages(); + await mailboxMenuRobot.tapConfirmRecoverDeletedMessages(); + await threadRobot.openMailbox(); + await mailboxMenuRobot.openFolderByName( + appLocalizations.recoveredMailboxDisplayName, + ); + await _expectEmailWithSubjectVisible(subject); + } + + Future _expectSpamBannerInvisible() async { + await $(#clean_message_banner_not_visible).waitUntilExists(); + expect($(CleanMessagesBanner).visible, false); + } + + Future _expectEmailWithSubjectVisible(String subject) async { + await expectViewVisible($(subject)); + } + + void _expectSpamUnreadCountVisible(String name) { + expect( + $(TrailingMailboxItemWidget).which((widget) { + final mailbox = widget.mailboxNode.item; + return mailbox.name?.name.toLowerCase() == name.toLowerCase() && + mailbox.countTotalEmailsAsString.isNotEmpty; + }), + findsOneWidget, + ); + } + + void _expectSpamUnreadCountInvisible(String name) { + expect( + $(TrailingMailboxItemWidget).which((widget) { + final mailbox = widget.mailboxNode.item; + return mailbox.name?.name.toLowerCase() == name.toLowerCase() && + mailbox.countTotalEmailsAsString.isNotEmpty; + }), + findsNothing, + ); + } +} \ No newline at end of file diff --git a/integration_test/tests/mailbox/long_press_empty_and_recover_spam_test.dart b/integration_test/tests/mailbox/long_press_empty_and_recover_spam_test.dart new file mode 100644 index 000000000..5ac219538 --- /dev/null +++ b/integration_test/tests/mailbox/long_press_empty_and_recover_spam_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should empty and recover spam by long press mailbox successfully', + scenarioBuilder: ($) => LongPressEmptyAndRecoverSpamScenario($), + ); +} \ No newline at end of file