TF-3912 Thread Detail Fix real time update

This commit is contained in:
DatDang
2025-07-29 16:43:03 +07:00
committed by Dat H. Pham
parent 4f0c783ea7
commit c7f5dc9e5e
12 changed files with 262 additions and 7 deletions
@@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import '../base/core_robot.dart';
@@ -8,4 +10,25 @@ class SettingRobot extends CoreRobot {
Future<void> openLanguageMenuItem() async {
await $(#setting_language_region).tap();
}
Future<void> openPreferencesMenuItem() async {
await $(#setting_preferences).tap();
}
Future<void> switchOnThreadSetting() async {
final threadSettingOn = $(ValueKey(AppLocalizations().thread))
.$(#setting_option_switch_on)
.visible;
if (!threadSettingOn) {
await $(ValueKey(AppLocalizations().thread)).tap();
}
}
Future<void> backToSettingsFromFirstLevel() async {
await $(#settings_first_level_close_button).tap();
}
Future<void> closeSettings() async {
await $(#settings_close_button).tap();
}
}
@@ -0,0 +1,53 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread_detail_collapsed_email.dart';
import '../../base/base_test_scenario.dart';
import '../../robots/composer_robot.dart';
import '../../robots/email_robot.dart';
import '../../robots/mailbox_menu_robot.dart';
import '../../robots/search_robot.dart';
import '../../robots/setting_robot.dart';
import '../../robots/thread_robot.dart';
class ThreadDetailReplyRealTimeUpdateScenario extends BaseTestScenario {
ThreadDetailReplyRealTimeUpdateScenario(super.$);
@override
Future<void> runTestLogic() async {
const subject = 'Reply thread';
const replyContent = 'reply thread detail';
final threadRobot = ThreadRobot($);
final mailboxMenuRobot = MailboxMenuRobot($);
final settingRobot = SettingRobot($);
final searchRobot = SearchRobot($);
final emailRobot = EmailRobot($);
final composerRobot = ComposerRobot($);
final imagePaths = ImagePaths();
await threadRobot.openMailbox();
await mailboxMenuRobot.openSetting();
await settingRobot.openPreferencesMenuItem();
await settingRobot.switchOnThreadSetting();
await settingRobot.backToSettingsFromFirstLevel();
await settingRobot.closeSettings();
await threadRobot.openSearchView();
await searchRobot.enterQueryString(subject);
await searchRobot.tapOnShowAllResultsText();
await searchRobot.openEmailWithSubject(subject);
await emailRobot.onTapReplyEmail();
await composerRobot.grantContactPermission();
await composerRobot.addContent(replyContent);
await composerRobot.sendEmail(imagePaths);
await $.waitUntilVisible($(ThreadDetailCollapsedEmail));
expect(
$(ThreadDetailCollapsedEmail).which<ThreadDetailCollapsedEmail>((widget) {
return widget.preview.contains(replyContent);
}),
findsOneWidget,
);
}
}
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/thread_detail/thread_detail_reply_real_time_update_scenario.dart';
void main() {
TestBase().runPatrolTest(
description: 'Should see reply of thread detail',
scenarioBuilder: ($) => ThreadDetailReplyRealTimeUpdateScenario($),
);
}