diff --git a/integration_test/robots/mailbox_menu_robot.dart b/integration_test/robots/mailbox_menu_robot.dart index 6b8393b76..5aed6b101 100644 --- a/integration_test/robots/mailbox_menu_robot.dart +++ b/integration_test/robots/mailbox_menu_robot.dart @@ -1,7 +1,13 @@ +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:core/presentation/views/text/text_field_builder.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart'; +import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import '../base/core_robot.dart'; @@ -22,4 +28,50 @@ class MailboxMenuRobot extends CoreRobot { Future openSetting() async { await $(#user_avatar).tap(); } + + Future longPressMailboxWithName(String name) async { + await $(name).longPress(); + await $.pumpAndSettle(); + } + + Future tapCreateNewSubFolder() async { + await $(AppLocalizations().newSubfolder).tap(); + } + + Future enterNewSubFolderName(String name) async { + await $(MailboxCreatorView) + .$(TextFieldBuilder) + .enterText(name); + } + + Future confirmCreateNewSubFolder() async { + await $(MailboxCreatorView) + .$(AppLocalizations().done) + .tap(); + } + + Future expandMailboxWithName(String name) async { + await $(MailboxItemWidget) + .which((widget) { + return widget.mailboxNode.item.name?.name.toLowerCase() == + name.toLowerCase(); + }) + .$(TMailButtonWidget) + .which((widget) { + return widget.icon == ImagePaths().icArrowRight; + }) + .tap(); + } + + Future tapHideMailbox() async { + await $(AppLocalizations().hideFolder).tap(); + } + + Future closeMenu() async { + await $(IconButton) + .which((widget) { + return widget.tooltip == AppLocalizations().close; + }) + .tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/mailbox/create_and_hide_sub_folder_scenario.dart b/integration_test/scenarios/mailbox/create_and_hide_sub_folder_scenario.dart new file mode 100644 index 000000000..c1e48d2c9 --- /dev/null +++ b/integration_test/scenarios/mailbox/create_and_hide_sub_folder_scenario.dart @@ -0,0 +1,59 @@ +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart'; +import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar/default_mobile_app_bar_thread_widget.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../robots/mailbox_menu_robot.dart'; +import '../../robots/thread_robot.dart'; + +class CreateAndHideSubFolderScenario extends BaseTestScenario { + const CreateAndHideSubFolderScenario(super.$); + + @override + Future runTestLogic() async { + const subFolderName = 'hidden sub folder'; + + final threadRobot = ThreadRobot($); + final mailboxMenuRobot = MailboxMenuRobot($); + final appLocalizations = AppLocalizations(); + + await threadRobot.openMailbox(); + await mailboxMenuRobot.longPressMailboxWithName( + appLocalizations.inboxMailboxDisplayName, + ); + await mailboxMenuRobot.tapCreateNewSubFolder(); + await mailboxMenuRobot.enterNewSubFolderName(subFolderName); + await mailboxMenuRobot.confirmCreateNewSubFolder(); + await _expectMailboxWithNameVisible(subFolderName); + + await threadRobot.openMailbox(); + await mailboxMenuRobot.expandMailboxWithName( + appLocalizations.inboxMailboxDisplayName + ); + await mailboxMenuRobot.longPressMailboxWithName(subFolderName); + await mailboxMenuRobot.tapHideMailbox(); + await _expectMailboxWithNameHaveNoChildren( + appLocalizations.inboxMailboxDisplayName + ); + await mailboxMenuRobot.closeMenu(); + await _expectMailboxWithNameVisible( + appLocalizations.inboxMailboxDisplayName + ); + } + + Future _expectMailboxWithNameVisible(String name) async { + await expectViewVisible( + $(DefaultMobileAppBarThreadWidget).$(name) + ); + } + + Future _expectMailboxWithNameHaveNoChildren(String name) async { + await expectViewVisible( + $(MailboxItemWidget) + .which((widget) { + return widget.mailboxNode.item.name?.name.toLowerCase() == + name.toLowerCase() && !widget.mailboxNode.hasChildren(); + }) + ); + } +} diff --git a/integration_test/tests/mailbox/create_and_hide_sub_folder_test.dart b/integration_test/tests/mailbox/create_and_hide_sub_folder_test.dart new file mode 100644 index 000000000..edcfc38ba --- /dev/null +++ b/integration_test/tests/mailbox/create_and_hide_sub_folder_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/mailbox/create_and_hide_sub_folder_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should create and hide sub folder successfully', + scenarioBuilder: ($) => CreateAndHideSubFolderScenario($), + ); +}