Skip to content

Commit 09cdb6a

Browse files
TF-3543 E2E composer read receipt
1 parent a91381d commit 09cdb6a

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed

integration_test/robots/composer_robot.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:core/presentation/views/button/tmail_button_widget.dart';
33
import 'package:flutter_test/flutter_test.dart';
44
import 'package:model/email/prefix_email_address.dart';
55
import 'package:rich_text_composer/rich_text_composer.dart';
6+
import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart';
67
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
78
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
89
import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_editor_view.dart';
@@ -85,4 +86,16 @@ class ComposerRobot extends CoreRobot {
8586
Future<void> tapSaveButtonOnSaveDraftConfirmDialog(AppLocalizations appLocalizations) async {
8687
await $(find.text(appLocalizations.save)).tap();
8788
}
89+
90+
Future<void> tapMoreOptions() async {
91+
await $(TMailButtonWidget)
92+
.which<TMailButtonWidget>((widget) => widget.icon == ImagePaths().icMore)
93+
.tap();
94+
}
95+
96+
Future<void> toggleReadReceipt() async {
97+
await $(PopupItemWidget)
98+
.which<PopupItemWidget>((widget) => widget.iconAction == ImagePaths().icReadReceipt)
99+
.tap();
100+
}
88101
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import 'package:core/core.dart';
2+
import 'package:duration/duration.dart';
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:model/email/prefix_email_address.dart';
5+
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
6+
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
7+
8+
import '../../base/base_test_scenario.dart';
9+
import '../../robots/composer_robot.dart';
10+
import '../../robots/thread_robot.dart';
11+
12+
class SendEmailWithReadReceiptEnabledScenario extends BaseTestScenario {
13+
const SendEmailWithReadReceiptEnabledScenario(super.$);
14+
15+
@override
16+
Future<void> runTestLogic() async {
17+
const additionalRecipient = String.fromEnvironment('ADDITIONAL_MAIL_RECIPIENT');
18+
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
19+
const subject = 'Test read receipt subject';
20+
const content = 'Test content';
21+
22+
final threadRobot = ThreadRobot($);
23+
final composerRobot = ComposerRobot($);
24+
final imagePaths = ImagePaths();
25+
final appLocalizations = AppLocalizations();
26+
27+
await threadRobot.openComposer();
28+
await _expectComposerViewVisible();
29+
30+
await composerRobot.grantContactPermission();
31+
32+
await composerRobot.addRecipientIntoField(
33+
prefixEmailAddress: PrefixEmailAddress.to,
34+
email: email,
35+
);
36+
await composerRobot.addRecipientIntoField(
37+
prefixEmailAddress: PrefixEmailAddress.to,
38+
email: additionalRecipient,
39+
);
40+
await composerRobot.addSubject(subject);
41+
await composerRobot.addContent(content);
42+
await composerRobot.tapMoreOptions();
43+
await composerRobot.toggleReadReceipt();
44+
await _expectReadReceiptToggleSuccessfullyToast(appLocalizations);
45+
46+
await composerRobot.sendEmail(imagePaths);
47+
48+
await _expectSendEmailSuccessToast(appLocalizations);
49+
50+
await $.pumpAndSettle(duration: seconds(5));
51+
await threadRobot.openEmailWithSubject(subject);
52+
await _expectReadReceiptRequestDialog(appLocalizations);
53+
}
54+
55+
Future<void> _expectReadReceiptRequestDialog(
56+
AppLocalizations appLocalizations
57+
) async {
58+
await expectViewVisible(
59+
$(appLocalizations.titleReadReceiptRequestNotificationMessage)
60+
);
61+
}
62+
63+
Future<void> _expectReadReceiptToggleSuccessfullyToast(
64+
AppLocalizations appLocalizations
65+
) async {
66+
await expectViewVisible(
67+
$(appLocalizations.requestReadReceiptHasBeenEnabled)
68+
);
69+
}
70+
71+
Future<void> _expectComposerViewVisible() => expectViewVisible($(ComposerView));
72+
73+
Future<void> _expectSendEmailSuccessToast(AppLocalizations appLocalizations) async {
74+
await expectViewVisible(
75+
$(find.text(appLocalizations.message_has_been_sent_successfully)),
76+
);
77+
}
78+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import '../../base/test_base.dart';
2+
import '../../scenarios/composer/send_email_with_read_receipt_enabled_scenario.dart';
3+
4+
void main() {
5+
TestBase().runPatrolTest(
6+
description: 'Should see read receipt dialog '
7+
'when user toggle read receipt '
8+
'and open read receipt email',
9+
scenarioBuilder: ($) => SendEmailWithReadReceiptEnabledScenario($),
10+
);
11+
}

0 commit comments

Comments
 (0)