1
+ import 'package:core/presentation/resources/image_paths.dart' ;
2
+ import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart' ;
3
+ import 'package:flutter/material.dart' ;
4
+ import 'package:flutter_test/flutter_test.dart' ;
5
+ import 'package:model/email/prefix_email_address.dart' ;
6
+ import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart' ;
7
+ import 'package:tmail_ui_user/features/email/presentation/email_view.dart' ;
8
+ import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart' ;
9
+ import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart' ;
10
+ import 'package:tmail_ui_user/main/localizations/app_localizations.dart' ;
11
+
12
+ import '../base/base_test_scenario.dart' ;
13
+ import '../robots/composer_robot.dart' ;
14
+ import '../robots/email_robot.dart' ;
15
+ import '../robots/search_robot.dart' ;
16
+ import '../robots/thread_robot.dart' ;
17
+
18
+ class ReplyEmailWithContentContainImageBase64DataScenario extends BaseTestScenario {
19
+ const ReplyEmailWithContentContainImageBase64DataScenario (super .$);
20
+
21
+ @override
22
+ Future <void > runTestLogic () async {
23
+ const emailSubject = 'Mail with base64' ;
24
+ const emailUser = String .fromEnvironment ('BASIC_AUTH_EMAIL' );
25
+
26
+ final threadRobot = ThreadRobot ($);
27
+ final searchRobot = SearchRobot ($);
28
+ final emailRobot = EmailRobot ($);
29
+ final composerRobot = ComposerRobot ($);
30
+ final imagePaths = ImagePaths ();
31
+ final appLocalizations = AppLocalizations ();
32
+
33
+ await threadRobot.openSearchView ();
34
+ await _expectSearchViewVisible ();
35
+
36
+ await searchRobot.enterQueryString (emailSubject);
37
+ await searchRobot.tapOnShowAllResultsText ();
38
+ await _expectSearchResultEmailListVisible ();
39
+
40
+ await searchRobot.openEmailWithSubject (emailSubject);
41
+ await _expectEmailViewVisible ();
42
+ await _expectReplyEmailButtonVisible ();
43
+
44
+ await emailRobot.onTapReplyEmail ();
45
+ await _expectComposerViewVisible ();
46
+
47
+ await composerRobot.grantContactPermission ();
48
+
49
+ await composerRobot.addRecipientIntoField (
50
+ prefixEmailAddress: PrefixEmailAddress .to,
51
+ email: emailUser,
52
+ );
53
+
54
+ await composerRobot.sendEmail (imagePaths);
55
+ await _expectSendEmailSuccessToast (appLocalizations);
56
+ await Future .delayed (const Duration (seconds: 3 ));
57
+
58
+ await emailRobot.onTapBackButton ();
59
+ await $.pumpAndSettle (duration: const Duration (seconds: 3 ));
60
+ await _expectEmailCidWithSubject (emailSubject);
61
+
62
+ await threadRobot.openEmailWithSubject (
63
+ '${appLocalizations .prefix_reply_email } $emailSubject '
64
+ );
65
+ await _expectEmailViewVisible ();
66
+ await Future .delayed (const Duration (seconds: 3 ));
67
+ await _ensureHtmlContentViewerVisible ();
68
+ await _expectEmailViewWithCidImage ();
69
+ }
70
+
71
+ Future <void > _expectSearchViewVisible () async {
72
+ await expectViewVisible ($(SearchEmailView ));
73
+ }
74
+
75
+ Future <void > _expectSearchResultEmailListVisible () async {
76
+ await expectViewVisible ($(#search_email_list_notification_listener));
77
+ }
78
+
79
+ Future <void > _expectEmailViewVisible () async {
80
+ await expectViewVisible ($(EmailView ));
81
+ }
82
+
83
+ Future <void > _expectReplyEmailButtonVisible () async {
84
+ await expectViewVisible ($(#reply_email_button));
85
+ }
86
+
87
+ Future <void > _expectComposerViewVisible () async {
88
+ await expectViewVisible ($(ComposerView ));
89
+ }
90
+
91
+ Future <void > _expectSendEmailSuccessToast (AppLocalizations appLocalizations) async {
92
+ await expectViewVisible (
93
+ $(find.text (appLocalizations.message_has_been_sent_successfully)),
94
+ );
95
+ }
96
+
97
+ Future <void > _expectEmailCidWithSubject (String subject) => expectViewVisible (
98
+ $(EmailTileBuilder )
99
+ .which <EmailTileBuilder >(
100
+ (widget) => widget.presentationEmail.subject? .contains (subject) == true
101
+ ),
102
+ );
103
+
104
+ Future <void > _ensureHtmlContentViewerVisible () async {
105
+ await $(HtmlContentViewer ).scrollTo (scrollDirection: AxisDirection .down);
106
+ }
107
+
108
+ Future <void > _expectEmailViewWithCidImage () async {
109
+ HtmlContentViewer ? htmlContentViewer;
110
+
111
+ await $(HtmlContentViewer )
112
+ .which <HtmlContentViewer >((view) {
113
+ htmlContentViewer = view;
114
+ return true ;
115
+ })
116
+ .first
117
+ .tap ();
118
+
119
+ final contentHtml = htmlContentViewer! .contentHtml;
120
+ final cidCount = RegExp (r'cid' ).allMatches (contentHtml).length;
121
+ expect (cidCount, 2 );
122
+ }
123
+ }
0 commit comments