Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TF-3552 E2E Email view display multiple type html content #3553

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions core/lib/utils/platform_info.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import 'package:flutter/foundation.dart';
abstract class PlatformInfo {
@visibleForTesting
static bool isTestingForWeb = false;
// @visibleForTesting
static bool isIntegrationTesting = false;

static bool get isWeb => kIsWeb || isTestingForWeb;
static bool get isLinux => !isWeb && defaultTargetPlatform == TargetPlatform.linux;
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@

import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';

import '../../base/base_test_scenario.dart';
import '../../models/provisioning_email.dart';
import '../../robots/thread_robot.dart';

class DisplayEmailWithShortContentScenario extends BaseTestScenario {

const DisplayEmailWithShortContentScenario(super.$);

static const String subject = 'Email with short content';
static const String shortContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';

@override
Future<void> runTestLogic() async {
const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL');
final provisioningEmail = ProvisioningEmail(
toEmail: emailUser,
subject: subject,
content: shortContent,
);

await provisionEmail([provisioningEmail], requestReadReceipt: false);
await $.pumpAndSettle(duration: const Duration(seconds: 3));

await _expectDisplayedEmailWithSubject();

final threadRobot = ThreadRobot($);
await threadRobot.openEmailWithSubject(subject);
await $.pumpAndSettle(duration: const Duration(seconds: 3));

await _expectEmailViewWithShortContent();
}

Future<void> _expectDisplayedEmailWithSubject() async {
await expectViewVisible(
$(EmailTileBuilder)
.which<EmailTileBuilder>(
(widget) => widget.presentationEmail.subject == subject
),
);
}

Future<void> _expectEmailViewWithShortContent() async {
expect(
$(HtmlContentViewer).which<HtmlContentViewer>((view) {
return view.contentHtml.contains(shortContent);
}),
findsOneWidget,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@

import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';

import '../../base/base_test_scenario.dart';
import '../../models/provisioning_email.dart';
import '../../robots/thread_robot.dart';

class DisplayEmailWithXssContentScenario extends BaseTestScenario {

const DisplayEmailWithXssContentScenario(super.$);

static const String subject = 'Email with xss content';
static const String xssContent = '<script>alert("XSSRobot")</script>';

@override
Future<void> runTestLogic() async {
const emailUser = String.fromEnvironment('BASIC_AUTH_EMAIL');
final provisioningEmail = ProvisioningEmail(
toEmail: emailUser,
subject: subject,
content: xssContent,
);

await provisionEmail([provisioningEmail], requestReadReceipt: false);
await $.pumpAndSettle(duration: const Duration(seconds: 3));

await _expectDisplayedEmailWithSubject();

final threadRobot = ThreadRobot($);
await threadRobot.openEmailWithSubject(subject);
await $.pumpAndSettle(duration: const Duration(seconds: 3));

await _expectEmailViewWithoutDisplayAlertDialog();
}

Future<void> _expectDisplayedEmailWithSubject() async {
await expectViewVisible(
$(EmailTileBuilder)
.which<EmailTileBuilder>(
(widget) => widget.presentationEmail.subject == subject
),
);
}

Future<void> _expectEmailViewWithoutDisplayAlertDialog() async {
expect(
find.text('XSSRobot'),
findsNothing,
);

expect(
$(HtmlContentViewer).which<HtmlContentViewer>((view) {
return view.contentHtml.contains('XSSRobot');
}),
findsNothing,
);

expect(
find.text('says'),
findsNothing,
);

expect(
find.text('OK'),
findsNothing,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/email_detailed/display_and_scroll_email_with_long_content_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should be visible and fully scrollable when opening a long email',
scenarioBuilder: ($) => DisplayAndScrollEmailWithLongContentScenario($),
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/email_detailed/display_email_with_short_content_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should display full content when opening a short email',
scenarioBuilder: ($) => DisplayEmailWithShortContentScenario($),
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/email_detailed/display_email_with_xss_content_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should not display alert dialog when opening an email containing content xss',
scenarioBuilder: ($) => DisplayEmailWithXssContentScenario($),
);
}
8 changes: 7 additions & 1 deletion lib/features/email/presentation/email_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,13 @@ class EmailView extends GetWidget<SingleEmailController> {
} else {
return const SizedBox.shrink();
}
})
}),
if (PlatformInfo.isIntegrationTesting)
const Divider(
key: Key('integration_testing_email_detailed_divider'),
height: 5,
color: Colors.transparent,
),
],
);
}
Expand Down
Loading