diff --git a/integration_test/robots/email_address_dialog_robot.dart b/integration_test/robots/email_address_dialog_robot.dart index e6ae24f24..127ec1e76 100644 --- a/integration_test/robots/email_address_dialog_robot.dart +++ b/integration_test/robots/email_address_dialog_robot.dart @@ -14,4 +14,8 @@ class EmailAddressDialogRobot extends CoreRobot { Future tapCopyEmailAddressButton(AppLocalizations appLocalizations) async { await $(appLocalizations.copy_email_address).tap(); } + + Future tapComposeEmailButton(AppLocalizations appLocalizations) async { + await $(appLocalizations.compose_email).tap(); + } } \ No newline at end of file diff --git a/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart b/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart new file mode 100644 index 000000000..055950732 --- /dev/null +++ b/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart @@ -0,0 +1,68 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:model/email/prefix_email_address.dart'; +import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_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/composer_robot.dart'; +import '../../robots/email_address_dialog_robot.dart'; +import '../../robots/email_robot.dart'; +import '../../robots/thread_robot.dart'; + +class ComposeEmailFromEmailAddressScenario extends BaseTestScenario { + + const ComposeEmailFromEmailAddressScenario(super.$); + + @override + Future runTestLogic() async { + const subject = 'Compose email from email address'; + const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL'); + final threadRobot = ThreadRobot($); + final emailRobot = EmailRobot($); + final emailAddressDialogRobot = EmailAddressDialogRobot($); + final composerRobot = ComposerRobot($); + final appLocalizations = AppLocalizations(); + + await provisionEmail( + [ + ProvisioningEmail( + toEmail: emailUser, + subject: subject, + content: subject, + ), + ], + requestReadReceipt: false, + ); + await $.pumpAndSettle(); + + await threadRobot.openEmailWithSubject(subject); + await $.pumpAndSettle(); + + await emailRobot.tapSenderEmailAddress(emailUser); + await $.pumpAndSettle(); + + await emailAddressDialogRobot.tapComposeEmailButton(appLocalizations); + await _expectComposerViewVisible(); + + await composerRobot.grantContactPermission(); + + await _expectToFieldContainListEmailAddressCorrectly(emailUser); + } + + Future _expectComposerViewVisible() async { + await expectViewVisible($(ComposerView)); + } + + Future _expectToFieldContainListEmailAddressCorrectly(String emailAddress) async { + expect( + $(RecipientComposerWidget).which((widget) => + widget.prefix == PrefixEmailAddress.to && + isMatchingEmailList(widget.listEmailAddress, {emailAddress}) + ).visible, + isTrue, + ); + } +} \ No newline at end of file diff --git a/integration_test/tests/email_detailed/email_address_dialog/compose_email_from_email_address_test.dart b/integration_test/tests/email_detailed/email_address_dialog/compose_email_from_email_address_test.dart new file mode 100644 index 000000000..e797a645c --- /dev/null +++ b/integration_test/tests/email_detailed/email_address_dialog/compose_email_from_email_address_test.dart @@ -0,0 +1,9 @@ +import '../../../base/test_base.dart'; +import '../../../scenarios/email_detailed/compose_email_from_email_address_scenario.dart'; + +void main() { + TestBase().runPatrolTest( + description: 'Should open new composer with To field has email address when open detailed email and tap `Compose email` button in email address info dialog', + scenarioBuilder: ($) => ComposeEmailFromEmailAddressScenario($), + ); +} \ No newline at end of file