TF-4236 Add integration test on mobile for case remove_a_label_from_email_scenario
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.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/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/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/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 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
import '../base/core_robot.dart';
|
import '../base/core_robot.dart';
|
||||||
@@ -83,4 +86,8 @@ class EmailRobot extends CoreRobot {
|
|||||||
Future<void> onTapAttachmentItem() async {
|
Future<void> onTapAttachmentItem() async {
|
||||||
await $(AttachmentItemWidget).$(InkWell).tap();
|
await $(AttachmentItemWidget).$(InkWell).tap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> tapRemoveLabelButton(String labelDisplayName) async {
|
||||||
|
await $(EmailSubjectWidget).$(LabelWidget).$(TagWidget).$(InkWell).tap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:core/presentation/views/search/search_bar_view.dart';
|
import 'package:core/presentation/views/search/search_bar_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.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/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/thread_view.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.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));
|
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 {
|
Future<void> openMailbox() async {
|
||||||
await $(#mobile_mailbox_menu_button).tap();
|
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($),
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user