TF-4236 Add integration test on mobile for case remove_a_label_from_email_scenario

This commit is contained in:
dab246
2026-01-20 15:50:54 +07:00
committed by Dat H. Pham
parent b76df6a6f6
commit 326f5e46f5
4 changed files with 122 additions and 0 deletions
+7
View File
@@ -1,8 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/base/widget/labels/tag_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_item_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_subject_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_back_button.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart';
import 'package:tmail_ui_user/features/labels/presentation/widgets/label_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import '../base/core_robot.dart';
@@ -83,4 +86,8 @@ class EmailRobot extends CoreRobot {
Future<void> onTapAttachmentItem() async {
await $(AttachmentItemWidget).$(InkWell).tap();
}
Future<void> tapRemoveLabelButton(String labelDisplayName) async {
await $(EmailSubjectWidget).$(LabelWidget).$(TagWidget).$(InkWell).tap();
}
}
+12
View File
@@ -1,6 +1,7 @@
import 'package:core/presentation/views/search/search_bar_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:labels/extensions/label_extension.dart';
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';
@@ -32,6 +33,17 @@ class ThreadRobot extends CoreRobot {
await $.pump(const Duration(seconds: 2));
}
Future<void> openEmailWithLabel(String labelDisplayName) async {
final email = $(EmailTileBuilder).which<EmailTileBuilder>(
(view) =>
view.labels
?.any((label) => label.safeDisplayName == labelDisplayName) ==
true,
);
await $.waitUntilVisible(email);
await email.tap();
}
Future<void> openMailbox() async {
await $(#mobile_mailbox_menu_button).tap();
}
@@ -0,0 +1,93 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:labels/labels.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_subject_widget.dart';
import 'package:tmail_ui_user/features/labels/presentation/widgets/label_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/labels/label_list_view.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import '../../base/base_test_scenario.dart';
import '../../mixin/provisioning_label_scenario_mixin.dart';
import '../../robots/email_robot.dart';
import '../../robots/label_robot.dart';
import '../../robots/thread_robot.dart';
class RemoveALabelFromEmailScenario extends BaseTestScenario
with ProvisioningLabelScenarioMixin {
const RemoveALabelFromEmailScenario(super.$);
@override
Future<void> runTestLogic() async {
const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL');
final threadRobot = ThreadRobot($);
final emailRobot = EmailRobot($);
final labelRobot = LabelRobot($);
final labels = await provisionLabelsByDisplayNames(
['Remove Tag 1'],
);
await $.pumpAndSettle();
final firstLabel = labels.first;
final labelDisplayName = firstLabel.safeDisplayName;
await provisionEmail(
buildEmailsForLabel(
label: firstLabel,
toEmail: emailUser,
count: 1,
),
requestReadReceipt: false,
);
await $.pumpAndSettle(duration: const Duration(seconds: 2));
await threadRobot.openMailbox();
await _expectLabelListViewVisible();
await labelRobot.openLabelByName(labelDisplayName);
await _expectEmailListDisplayedCorrectByTag(labelDisplayName);
await threadRobot.openEmailWithLabel(labelDisplayName);
await $.pumpAndSettle(duration: const Duration(seconds: 1));
await _expectLabelDisplayedOnEmailSubject(labelDisplayName);
await emailRobot.tapRemoveLabelButton(labelDisplayName);
await _expectRemoveLabelFromEmailSuccessToast(labelDisplayName);
}
Future<void> _expectLabelListViewVisible() =>
expectViewVisible($(LabelListView));
Future<void> _expectEmailListDisplayedCorrectByTag(
String labelDisplayName,
) async {
final listEmailTileWithTag = $.tester.widgetList<EmailTileBuilder>(
$(EmailTileBuilder).which<EmailTileBuilder>((widget) =>
widget.presentationEmail.subject?.contains(labelDisplayName) == true),
);
expect(listEmailTileWithTag.length, greaterThanOrEqualTo(1));
}
Future<void> _expectLabelDisplayedOnEmailSubject(
String labelDisplayName,
) async {
expect(
$(EmailSubjectWidget)
.$(LabelWidget)
.which<LabelWidget>(
(widget) => widget.label.safeDisplayName == labelDisplayName)
.visible,
true,
);
}
Future<void> _expectRemoveLabelFromEmailSuccessToast(
String labelDisplayName,
) async {
await expectViewVisible(
$(find.text(AppLocalizations()
.removeLabelFromEmailSuccessfullyMessage(labelDisplayName))),
);
}
}
@@ -0,0 +1,10 @@
import '../../base/test_base.dart';
import '../../scenarios/labels/remove_a_label_from_email_scenario.dart';
void main() {
TestBase().runPatrolTest(
description:
'Should remove tag on email subject when click click on the cross on a tag in the opened mail',
scenarioBuilder: ($) => RemoveALabelFromEmailScenario($),
);
}