import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:model/email/prefix_email_address.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart'; import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_editor_view.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_mobile_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_suggestion_item_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/subject_composer_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import '../base/core_robot.dart'; import '../extensions/patrol_finder_extension.dart'; class ComposerRobot extends CoreRobot { ComposerRobot(super.$); Future addRecipientIntoField({ required PrefixEmailAddress prefixEmailAddress, required String email, }) async { final finder = $(RecipientComposerWidget) .which((widget) => widget.prefix == prefixEmailAddress); final isTextFieldFocused = finder .which((view) => view.focusNode?.hasFocus ?? false) .exists; if (!isTextFieldFocused) { await finder.tap(); } await finder.enterTextWithoutTapAction(email); await $(RecipientSuggestionItemWidget) .which((widget) => widget.emailAddress.email?.contains(email) ?? false) .tap(); } Future addSubject(String subject) async { final finder = $(SubjectComposerWidget); final isTextFieldFocused = finder .which((view) => view.focusNode?.hasFocus ?? false) .exists; if (!isTextFieldFocused) { await finder.tap(); } await finder.enterTextWithoutTapAction(subject); } Future addContent(String content) async { ComposerController? composerController; await $(ComposerView) .which((widget) { composerController = widget.controller; return true; }) .$(MobileEditorView).$(HtmlEditor).$(InAppWebView).tap(); await composerController?.htmlEditorApi?.requestFocusLastChild(); await composerController!.htmlEditorApi!.insertHtml('$content

'); } Future sendEmail(ImagePaths imagePaths) async { await $(AppBarComposerWidget) .$(TMailButtonWidget) .which((widget) => widget.icon == imagePaths.icSendMobile) .tap(); } Future grantContactPermission() async { if (await $.native.isPermissionDialogVisible(timeout: const Duration(seconds: 5))) { await $.native.grantPermissionWhenInUse(); } } Future tapCloseComposer(ImagePaths imagePaths) async { await $(AppBarComposerWidget) .$(TMailButtonWidget) .which((widget) => widget.icon == imagePaths.icCancel) .tap(); } Future tapSaveButtonOnSaveDraftConfirmDialog(AppLocalizations appLocalizations) async { await $(find.text(appLocalizations.save)).tap(); } Future tapMoreOptionOnAppBar() async { await $(#composer_more_button).tap(); } Future tapMarkAsImportantPopupItemOnMenu() async { await $(#mark_as_important_popup_item).tap(); } Future tapReadReceiptPopupItemOnMenu() async { await $(#read_receipt_popup_item).tap(); } Future tapSaveAsDraftPopupItemOnMenu() async { await $(#save_as_draft_popup_item).tap(); } Future tapRecipientExpandButton() async { await $(#prefix_to_recipient_expand_button).tap(); } Future tapFromFieldPopupMenu() async { await $(FromComposerMobileWidget).$(InkWell).tap(); } Future saveAsTemplate() async { await $(AppBarComposerWidget) .$(TMailButtonWidget) .which((widget) => widget.icon == ImagePaths().icMore) .tap(); await $(AppLocalizations().saveAsTemplate).tap(); } }