HOTFIX Integration test 0.24.8 (#4298)

This commit is contained in:
Dat Dang
2026-02-03 12:12:44 +07:00
committed by GitHub
parent de8de6c83f
commit 1b29b481c0
4 changed files with 42 additions and 24 deletions
@@ -193,4 +193,8 @@ class ComposerRobot extends CoreRobot {
); );
controller?.handleSuccessViewState(LocalImagePickerSuccess(fileInfo)); controller?.handleSuccessViewState(LocalImagePickerSuccess(fileInfo));
} }
Future<void> tapDiscardChanges() async {
await $(AppLocalizations().discardChanges).tap();
}
} }
@@ -2,7 +2,7 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:model/email/prefix_email_address.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/composer_view.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_attachments_widget.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_item_widget.dart';
import '../../base/base_test_scenario.dart'; import '../../base/base_test_scenario.dart';
import '../../models/provisioning_email.dart'; import '../../models/provisioning_email.dart';
@@ -56,9 +56,6 @@ class ForwardingEmailLostAttachmentsScenario extends BaseTestScenario {
await composerRobot.grantContactPermission(); await composerRobot.grantContactPermission();
await composerRobot.expandRecipientsFields();
await $.pumpAndSettle();
await composerRobot.addRecipientIntoField( await composerRobot.addRecipientIntoField(
prefixEmailAddress: PrefixEmailAddress.to, prefixEmailAddress: PrefixEmailAddress.to,
email: emailUser, email: emailUser,
@@ -75,5 +72,8 @@ class ForwardingEmailLostAttachmentsScenario extends BaseTestScenario {
Future<void> _expectComposerViewVisible() => expectViewVisible($(ComposerView)); Future<void> _expectComposerViewVisible() => expectViewVisible($(ComposerView));
Future<void> _expectAttachmentListVisible() => expectViewVisible($(EmailAttachmentsWidget)); Future<void> _expectAttachmentListVisible() async {
await $.waitUntilVisible($(AttachmentItemWidget));
expect($(AttachmentItemWidget), findsNWidgets(2));
}
} }
@@ -1,8 +1,10 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import '../base/base_test_scenario.dart'; import '../base/base_test_scenario.dart';
import '../robots/composer_robot.dart'; import '../robots/composer_robot.dart';
import '../robots/mailbox_menu_robot.dart';
import '../robots/thread_robot.dart'; import '../robots/thread_robot.dart';
class SaveAsTemplateScenario extends BaseTestScenario { class SaveAsTemplateScenario extends BaseTestScenario {
@@ -10,37 +12,40 @@ class SaveAsTemplateScenario extends BaseTestScenario {
@override @override
Future<void> runTestLogic() async { Future<void> runTestLogic() async {
final imagePaths = ImagePaths();
final appLocalizations = AppLocalizations();
final mailboxMenuRobot = MailboxMenuRobot($);
final threadRobot = ThreadRobot($); final threadRobot = ThreadRobot($);
final composerRobot = ComposerRobot($); final composerRobot = ComposerRobot($);
await threadRobot.openMailbox();
await mailboxMenuRobot.openFolderByName(
appLocalizations.templatesMailboxDisplayName,
);
await threadRobot.openComposer(); await threadRobot.openComposer();
await composerRobot.grantContactPermission(); await composerRobot.grantContactPermission();
await composerRobot.addSubject('test subject');
await composerRobot.saveAsTemplate(); await composerRobot.saveAsTemplate();
await $.pumpAndTrySettle(); await $.pumpAndTrySettle();
await _expectSaveToastSuccessVisible(); await composerRobot.tapCloseComposer(imagePaths);
await composerRobot.tapDiscardChanges();
await _expectTemplateVisible('test subject');
await composerRobot.addSubject('test subject'); await threadRobot.openEmailWithSubject('test subject');
await composerRobot.addSubject('test subject updated');
hideKeyboard(); hideKeyboard();
await $.pumpAndTrySettle(duration: const Duration(seconds: 1)); await $.pumpAndTrySettle(duration: const Duration(seconds: 1));
await composerRobot.saveAsTemplate(); await composerRobot.saveAsTemplate();
await $.pumpAndTrySettle();
await _expectUpdateToastSuccessVisible(); await composerRobot.tapCloseComposer(imagePaths);
await composerRobot.tapDiscardChanges();
await _expectTemplateVisible('test subject updated');
} }
Future<void> _expectSaveToastSuccessVisible() async { Future<void> _expectTemplateVisible(String subject) async {
await $(AppLocalizations().saveMessageToTemplateSuccess).waitUntilVisible(); await $(subject).waitUntilVisible();
expect( expect($(subject).visible, isTrue);
$(AppLocalizations().saveMessageToTemplateSuccess).visible,
isTrue,
);
}
Future<void> _expectUpdateToastSuccessVisible() async {
await $(AppLocalizations().updateMessageToTemplateSuccess).waitUntilVisible();
expect(
$(AppLocalizations().updateMessageToTemplateSuccess).visible,
isTrue,
);
} }
} }
@@ -5,6 +5,7 @@ import 'package:core/utils/html/html_utils.dart';
import 'package:core/utils/platform_info.dart'; import 'package:core/utils/platform_info.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/rich_text_composer.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart';
@@ -75,7 +76,15 @@ class RichTextMobileTabletController extends GetxController {
@override @override
void onClose() { void onClose() {
richTextController.dispose(); richTextController.dispose();
htmlEditorApi?.webViewController.dispose(); if (kDebugMode) {
try {
htmlEditorApi?.webViewController.dispose();
} catch (e) {
logWarning('Dispose error: $e');
}
} else {
htmlEditorApi?.webViewController.dispose();
}
htmlEditorApi = null; htmlEditorApi = null;
super.onClose(); super.onClose();
} }