diff --git a/integration_test/robots/email_robot.dart b/integration_test/robots/email_robot.dart index ff3ce14a0..38493e6d3 100644 --- a/integration_test/robots/email_robot.dart +++ b/integration_test/robots/email_robot.dart @@ -40,4 +40,8 @@ class EmailRobot extends CoreRobot { Future tapMarkAsUnreadOptionInContextMenu() async { await $(#markAsUnread_action).tap(); } + + Future tapEmailDetailedStarButton() async { + await $(#email_detailed_star_button).tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/mark_as_star_email_scenario.dart b/integration_test/scenarios/email_detailed/mark_as_star_email_scenario.dart new file mode 100644 index 000000000..fc8ce5fba --- /dev/null +++ b/integration_test/scenarios/email_detailed/mark_as_star_email_scenario.dart @@ -0,0 +1,65 @@ + +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../../base/base_test_scenario.dart'; +import '../../models/provisioning_email.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/thread_robot.dart'; + +class MarkAsStarEmailScenario extends BaseTestScenario { + + const MarkAsStarEmailScenario(super.$); + + @override + Future runTestLogic() async { + const subject = 'Mark as star/unStar email'; + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + final threadRobot = ThreadRobot($); + final emailRobot = EmailRobot($); + final imagePaths = ImagePaths(); + + await provisionEmail( + [ + ProvisioningEmail( + toEmail: emailUser, + subject: subject, + content: subject, + ), + ], + requestReadReceipt: false, + ); + await $.pumpAndSettle(); + + await threadRobot.openEmailWithSubject(subject); + await $.pumpAndSettle(); + _expectEmailDetailedStarButtonVisible(); + + await emailRobot.tapEmailDetailedStarButton(); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + await _expectDisplayedStarIcon(imagePaths); + + await emailRobot.tapEmailDetailedStarButton(); + await $.pumpAndSettle(duration: const Duration(seconds: 2)); + await _expectDisplayedUnStarIcon(imagePaths); + } + + void _expectEmailDetailedStarButtonVisible() { + expect($(#email_detailed_star_button), findsOneWidget); + } + + Future _expectDisplayedStarIcon(ImagePaths imagePaths) async { + await expectViewVisible( + $(#email_detailed_star_button).which( + (widget) => widget.icon == imagePaths.icStar), + ); + } + + Future _expectDisplayedUnStarIcon(ImagePaths imagePaths) async { + await expectViewVisible( + $(#email_detailed_star_button).which( + (widget) => widget.icon == imagePaths.icUnStar), + ); + } +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/mark_as_star_email_when_open_detailed_email_test.dart b/integration_test/tests/email_detailed/mark_as_star_email_when_open_detailed_email_test.dart new file mode 100644 index 000000000..fc46583de --- /dev/null +++ b/integration_test/tests/email_detailed/mark_as_star_email_when_open_detailed_email_test.dart @@ -0,0 +1,9 @@ +import '../../base/test_base.dart'; +import '../../scenarios/email_detailed/mark_as_star_email_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should see star and unStar icon when open detailed email and mark as star and unStar email successfully', + scenarioBuilder: ($) => MarkAsStarEmailScenario($), + ); +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart b/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart index e67f0b272..81ab68f3d 100644 --- a/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart +++ b/lib/features/email/presentation/widgets/email_view_app_bar_widget.dart @@ -176,6 +176,7 @@ class EmailViewAppBarWidget extends StatelessWidget { ); Widget _getMarkStarButton(AppLocalizations applocalizations) => TMailButtonWidget.fromIcon( + key: const Key('email_detailed_star_button'), icon: presentationEmail.hasStarred ? _imagePaths.icStar : _imagePaths.icUnStar,