TF-3493 Refactor integration test code for performance and maintainability
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -5,31 +5,21 @@ import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/app_grid_view.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../robots/app_grid_robot.dart';
|
||||
import '../robots/mailbox_menu_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class AppGridScenario extends BaseScenario {
|
||||
class AppGridScenario extends BaseTestScenario {
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
|
||||
AppGridScenario(
|
||||
super.$,
|
||||
{
|
||||
required this.loginWithBasicAuthScenario
|
||||
}
|
||||
);
|
||||
const AppGridScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
Future<void> runTestLogic() async {
|
||||
final threadRobot = ThreadRobot($);
|
||||
final mailboxMenuRobot = MailboxMenuRobot($);
|
||||
final appGridRobot = AppGridRobot($);
|
||||
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
await threadRobot.openMailbox();
|
||||
await _expectMailboxViewVisible();
|
||||
await _expectAppGridViewVisible();
|
||||
|
||||
@@ -1,31 +1,24 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:patrol/patrol.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../models/provisioning_email.dart';
|
||||
import '../robots/email_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import '../utils/scenario_utils_mixin.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class DownloadAllAttachmentsScenario extends BaseScenario with ScenarioUtilsMixin {
|
||||
DownloadAllAttachmentsScenario(
|
||||
super.$, {
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.attachmentContents,
|
||||
});
|
||||
class DownloadAllAttachmentsScenario extends BaseTestScenario {
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final List<String> attachmentContents;
|
||||
const DownloadAllAttachmentsScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
Future<void> runTestLogic() async {
|
||||
const subject = 'download all attachments subject';
|
||||
final List<String> attachmentContents = ['file1', 'file2', 'file3'];
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
|
||||
final threadRobot = ThreadRobot($);
|
||||
final emailRobot = EmailRobot($);
|
||||
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
// Prepare attachment files
|
||||
final attachmentFiles = await Future.wait(
|
||||
attachmentContents.map(
|
||||
@@ -36,7 +29,7 @@ class DownloadAllAttachmentsScenario extends BaseScenario with ScenarioUtilsMixi
|
||||
// Provisioning email
|
||||
await provisionEmail(
|
||||
[ProvisioningEmail(
|
||||
toEmail: loginWithBasicAuthScenario.email,
|
||||
toEmail: email,
|
||||
subject: subject,
|
||||
content: 'download all attachments content',
|
||||
attachmentPaths: attachmentFiles.map((file) => file.path).toList(),
|
||||
|
||||
@@ -7,27 +7,18 @@ import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_
|
||||
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../robots/composer_robot.dart';
|
||||
import '../robots/email_robot.dart';
|
||||
import '../robots/search_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class ForwardEmailScenario extends BaseScenario {
|
||||
const ForwardEmailScenario(
|
||||
super.$,
|
||||
{
|
||||
required this.loginWithBasicAuthScenario,
|
||||
}
|
||||
);
|
||||
class ForwardEmailScenario extends BaseTestScenario {
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
const ForwardEmailScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
Future<void> runTestLogic() async {
|
||||
final threadRobot = ThreadRobot($);
|
||||
await threadRobot.openSearchView();
|
||||
await _expectSearchViewVisible();
|
||||
|
||||
File diff suppressed because one or more lines are too long
+15
-20
@@ -6,32 +6,27 @@ import 'package:tmail_ui_user/features/search/email/presentation/search_email_vi
|
||||
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_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../models/provisioning_email.dart';
|
||||
import '../robots/search_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import '../utils/scenario_utils_mixin.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class SearchEmailByDatetimeAndSortOrderRelevanceScenario extends BaseScenario
|
||||
with ScenarioUtilsMixin {
|
||||
class SearchEmailByDatetimeAndSortOrderRelevanceScenario extends BaseTestScenario {
|
||||
|
||||
const SearchEmailByDatetimeAndSortOrderRelevanceScenario(
|
||||
super.$,
|
||||
{
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.queryString,
|
||||
required this.listProvisioningEmail,
|
||||
}
|
||||
);
|
||||
const SearchEmailByDatetimeAndSortOrderRelevanceScenario(super.$);
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String queryString;
|
||||
final List<ProvisioningEmail> listProvisioningEmail;
|
||||
static const queryString = 'relevance';
|
||||
static const listUsername = ['Alice', 'Brian', 'Charlotte', 'David', 'Emma'];
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
Future<void> runTestLogic() async {
|
||||
final listProvisioningEmail = listUsername
|
||||
.map((username) => ProvisioningEmail(
|
||||
toEmail: '${username.toLowerCase()}@example.com',
|
||||
subject: queryString,
|
||||
content: '$queryString to user $username',
|
||||
))
|
||||
.toList();
|
||||
|
||||
await provisionEmail(listProvisioningEmail);
|
||||
await $.pumpAndSettle();
|
||||
@@ -70,7 +65,7 @@ class SearchEmailByDatetimeAndSortOrderRelevanceScenario extends BaseScenario
|
||||
);
|
||||
await _expectSearchResultEmailListVisible();
|
||||
|
||||
await _expectEmailListDisplayedCorrectly();
|
||||
await _expectEmailListDisplayedCorrectly(listProvisioningEmail);
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +93,7 @@ class SearchEmailByDatetimeAndSortOrderRelevanceScenario extends BaseScenario
|
||||
await expectViewVisible($(#sort_filter_context_menu));
|
||||
}
|
||||
|
||||
Future<void> _expectEmailListDisplayedCorrectly() async {
|
||||
Future<void> _expectEmailListDisplayedCorrectly(List<ProvisioningEmail> listProvisioningEmail) async {
|
||||
expect(find.byType(EmailTileBuilder), findsNWidgets(listProvisioningEmail.length));
|
||||
}
|
||||
|
||||
|
||||
@@ -7,29 +7,18 @@ import 'package:tmail_ui_user/features/search/email/presentation/search_email_vi
|
||||
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_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../robots/search_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class SearchEmailWithSortOrderScenario extends BaseScenario {
|
||||
const SearchEmailWithSortOrderScenario(
|
||||
super.$,
|
||||
{
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.queryString,
|
||||
required this.listUsername,
|
||||
}
|
||||
);
|
||||
class SearchEmailWithSortOrderScenario extends BaseTestScenario {
|
||||
const SearchEmailWithSortOrderScenario(super.$);
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String queryString;
|
||||
final List<String> listUsername;
|
||||
static const queryString = 'hello';
|
||||
static const listUsername = ['Alice', 'Brian', 'Charlotte', 'David', 'Emma'];
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
Future<void> runTestLogic() async {
|
||||
final threadRobot = ThreadRobot($);
|
||||
await threadRobot.openSearchView();
|
||||
await _expectSearchViewVisible();
|
||||
|
||||
@@ -1,34 +1,28 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../models/provisioning_email.dart';
|
||||
import '../robots/search_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import '../utils/scenario_utils_mixin.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class SearchResultHighlightsScenario extends BaseScenario with ScenarioUtilsMixin {
|
||||
SearchResultHighlightsScenario(
|
||||
super.$, {
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.keyword,
|
||||
required this.longEmailContents,
|
||||
});
|
||||
class SearchResultHighlightsScenario extends BaseTestScenario {
|
||||
SearchResultHighlightsScenario(super.$);
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String keyword;
|
||||
final List<String> longEmailContents;
|
||||
static const keyword = 'Search snippet results';
|
||||
static const List<String> longEmailContents = [
|
||||
"$keyword Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s",
|
||||
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. $keyword Lorem Ipsum has been the industry's standard dummy text ever since the 1500s",
|
||||
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s $keyword",
|
||||
];
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
Future<void> runTestLogic() async {
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
// Robots
|
||||
final threadRobot = ThreadRobot($);
|
||||
final searchRobot = SearchRobot($);
|
||||
|
||||
// Login
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
// Prepare attachment file
|
||||
final file = await preparingTxtFile(keyword);
|
||||
|
||||
@@ -36,7 +30,7 @@ class SearchResultHighlightsScenario extends BaseScenario with ScenarioUtilsMixi
|
||||
await provisionEmail(longEmailContents
|
||||
.map(
|
||||
(emailContent) => ProvisioningEmail(
|
||||
toEmail: loginWithBasicAuthScenario.email,
|
||||
toEmail: email,
|
||||
subject: keyword,
|
||||
content: emailContent,
|
||||
attachmentPaths: emailContent == longEmailContents.first
|
||||
|
||||
@@ -1,34 +1,28 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/views/text/rich_text_builder.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../models/provisioning_email.dart';
|
||||
import '../robots/search_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import '../utils/scenario_utils_mixin.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class SearchSuggestionHighlightsScenario extends BaseScenario with ScenarioUtilsMixin {
|
||||
SearchSuggestionHighlightsScenario(
|
||||
super.$, {
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.keyword,
|
||||
required this.longEmailContents,
|
||||
});
|
||||
class SearchSuggestionHighlightsScenario extends BaseTestScenario {
|
||||
SearchSuggestionHighlightsScenario(super.$);
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String keyword;
|
||||
final List<String> longEmailContents;
|
||||
static const keyword = 'Search snippet suggestions';
|
||||
static const List<String> longEmailContents = [
|
||||
"$keyword Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s",
|
||||
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. $keyword Lorem Ipsum has been the industry's standard dummy text ever since the 1500s",
|
||||
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s $keyword",
|
||||
];
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
Future<void> runTestLogic() async {
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
// Robots
|
||||
final threadRobot = ThreadRobot($);
|
||||
final searchRobot = SearchRobot($);
|
||||
|
||||
// Login
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
// Prepare attachment file
|
||||
final file = await preparingTxtFile(keyword);
|
||||
|
||||
@@ -36,7 +30,7 @@ class SearchSuggestionHighlightsScenario extends BaseScenario with ScenarioUtils
|
||||
await provisionEmail(longEmailContents
|
||||
.map(
|
||||
(emailContent) => ProvisioningEmail(
|
||||
toEmail: loginWithBasicAuthScenario.email,
|
||||
toEmail: email,
|
||||
subject: keyword,
|
||||
content: emailContent,
|
||||
attachmentPaths: emailContent == longEmailContents.first
|
||||
|
||||
@@ -1,40 +1,29 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../robots/composer_robot.dart';
|
||||
import '../robots/thread_robot.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class SendEmailScenario extends BaseScenario {
|
||||
const SendEmailScenario(
|
||||
super.$,
|
||||
{
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.additionalRecipient,
|
||||
required this.subject,
|
||||
required this.content
|
||||
}
|
||||
);
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String additionalRecipient;
|
||||
final String subject;
|
||||
final String content;
|
||||
class SendEmailScenario extends BaseTestScenario {
|
||||
const SendEmailScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
Future<void> runTestLogic() async {
|
||||
const additionalRecipient = String.fromEnvironment('ADDITIONAL_MAIL_RECIPIENT');
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
const subject = 'Test subject';
|
||||
const content = 'Test content';
|
||||
|
||||
final threadRobot = ThreadRobot($);
|
||||
final composerRobot = ComposerRobot($);
|
||||
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
|
||||
await threadRobot.openComposer();
|
||||
await _expectComposerViewVisible();
|
||||
|
||||
await composerRobot.grantContactPermission();
|
||||
|
||||
await composerRobot.addRecipient(loginWithBasicAuthScenario.email);
|
||||
await composerRobot.addRecipient(email);
|
||||
await composerRobot.addRecipient(additionalRecipient);
|
||||
await composerRobot.addSubject(subject);
|
||||
await composerRobot.addContent(content);
|
||||
|
||||
@@ -1,35 +1,27 @@
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';
|
||||
|
||||
import '../base/base_scenario.dart';
|
||||
import '../base/base_test_scenario.dart';
|
||||
import '../models/provisioning_email.dart';
|
||||
import '../utils/scenario_utils_mixin.dart';
|
||||
import 'login_with_basic_auth_scenario.dart';
|
||||
|
||||
class WebSocketUpdateUiScenario extends BaseScenario with ScenarioUtilsMixin {
|
||||
const WebSocketUpdateUiScenario(super.$, {
|
||||
required this.loginWithBasicAuthScenario,
|
||||
required this.subject,
|
||||
required this.content,
|
||||
});
|
||||
|
||||
final LoginWithBasicAuthScenario loginWithBasicAuthScenario;
|
||||
final String subject;
|
||||
final String content;
|
||||
class WebSocketUpdateUiScenario extends BaseTestScenario {
|
||||
const WebSocketUpdateUiScenario(super.$);
|
||||
|
||||
@override
|
||||
Future<void> execute() async {
|
||||
await loginWithBasicAuthScenario.execute();
|
||||
Future<void> runTestLogic() async {
|
||||
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
|
||||
const subject = 'web socket subject';
|
||||
const content = 'web socket content';
|
||||
|
||||
await provisionEmail(
|
||||
[ProvisioningEmail(
|
||||
toEmail: loginWithBasicAuthScenario.email,
|
||||
toEmail: email,
|
||||
subject: subject,
|
||||
content: content,
|
||||
)],
|
||||
refreshEmailView: false,
|
||||
);
|
||||
await $.pumpAndSettle();
|
||||
await _expectEmailVisible(loginWithBasicAuthScenario.email);
|
||||
await _expectEmailVisible(email);
|
||||
await _expectEmailUnreadWithSubject(subject);
|
||||
await _expectEmailUnstarredWithSubject(subject);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user