Skip to content

TF-3579 E2E mailbox move and mark as read #3580

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

Open
wants to merge 3 commits into
base: patrol-integration-test
Choose a base branch
from
Open
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
11 changes: 11 additions & 0 deletions integration_test/robots/mailbox_menu_robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';

import '../base/core_robot.dart';

Expand All @@ -18,4 +19,14 @@ class MailboxMenuRobot extends CoreRobot {
.$(find.text(name))
.tap();
}

Future<void> longPressMailboxWithName(String name) async {
await $(name).longPress();
await $.pumpAndSettle();
}

Future<void> tapMarkAsRead() async {
await $(AppLocalizations().mark_as_read).tap();
await $.pumpAndSettle();
}
}
15 changes: 15 additions & 0 deletions integration_test/robots/thread_robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,19 @@ class ThreadRobot extends CoreRobot {
Future<void> openMailbox() async {
await $(#mobile_mailbox_menu_button).tap();
}

Future<void> longPressEmailWithSubject(String subject) async {
await $(subject).longPress();
}

Future<void> moveEmailToMailboxWithName(String mailboxName) async {
await $(#move_selected_email_to_mailbox_button).tap();
await $(mailboxName).tap();
await $.pumpAndSettle();
}

Future<void> moveEmailToTrash() async {
await $(#delete_selected_email_button).tap();
await $.pumpAndSettle();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';

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

class MailboxMoveEmailScenario extends BaseTestScenario {
const MailboxMoveEmailScenario(super.$);

@override
Future<void> runTestLogic() async {
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
const templatesSubject = 'email to templates';
const trashSubject = 'email to trash';

final threadRobot = ThreadRobot($);
final mailboxMenuRobot = MailboxMenuRobot($);
final appLocalizations = AppLocalizations();

await provisionEmail([
ProvisioningEmail(
toEmail: email,
subject: templatesSubject,
content: ''
),
ProvisioningEmail(
toEmail: email,
subject: trashSubject,
content: '',
),
]);
await $.pumpAndSettle(duration: const Duration(seconds: 2));

await threadRobot.longPressEmailWithSubject(templatesSubject);
await threadRobot.moveEmailToMailboxWithName(appLocalizations.templatesMailboxDisplayName);
await threadRobot.openMailbox();
await mailboxMenuRobot.openFolderByName(appLocalizations.templatesMailboxDisplayName);
await _expectEmailWithSubjectVisible(templatesSubject);
await threadRobot.openMailbox();
await mailboxMenuRobot.openFolderByName(appLocalizations.inboxMailboxDisplayName);

await threadRobot.longPressEmailWithSubject(trashSubject);
await threadRobot.moveEmailToTrash();
await threadRobot.openMailbox();
await mailboxMenuRobot.openFolderByName(appLocalizations.trashMailboxDisplayName);
await _expectEmailWithSubjectVisible(trashSubject);
}

Future<void> _expectEmailWithSubjectVisible(String subject) async {
await expectViewVisible($(subject));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';

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

class MarkMailboxAsReadScenario extends BaseTestScenario {
const MarkMailboxAsReadScenario(super.$);

@override
Future<void> runTestLogic() async {
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');

final threadRobot = ThreadRobot($);
final mailboxMenuRobot = MailboxMenuRobot($);

await provisionEmail([ProvisioningEmail(
toEmail: email,
subject: 'placeholder email',
content: ''
)]);
await $.pumpAndSettle(duration: const Duration(seconds: 2));
await threadRobot.openMailbox();
await _expectInboxUnreadCountVisible();

await mailboxMenuRobot.longPressMailboxWithName(
AppLocalizations().inboxMailboxDisplayName,
);
await mailboxMenuRobot.tapMarkAsRead();
await threadRobot.openMailbox();
_expectInboxUnreadCountInvisible();
}

Future<void> _expectInboxUnreadCountVisible() async {
await expectViewVisible($(TrailingMailboxItemWidget)
.which<TrailingMailboxItemWidget>((widget) {
final mailbox = widget.mailboxNode.item;
return mailbox.role == PresentationMailbox.roleInbox
&& mailbox.countUnReadEmailsAsString.isNotEmpty;
}));
}

void _expectInboxUnreadCountInvisible() {
expect(
$(TrailingMailboxItemWidget)
.which<TrailingMailboxItemWidget>((widget) {
final mailbox = widget.mailboxNode.item;
return mailbox.role == PresentationMailbox.roleInbox
&& mailbox.countUnReadEmailsAsString.isEmpty;
}
),
findsOneWidget,
);
}
}
9 changes: 9 additions & 0 deletions integration_test/tests/mailbox/mailbox_move_email_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/mailbox/mailbox_move_email_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should move email to mailbox successfully',
scenarioBuilder: ($) => MailboxMoveEmailScenario($),
);
}
9 changes: 9 additions & 0 deletions integration_test/tests/mailbox/mark_mailbox_as_read_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../../base/test_base.dart';
import '../../scenarios/mailbox/mark_mailbox_as_read_scenario.dart';

void main() {
TestBase().runPatrolTest(
description: 'Should not see unread counter when mark mailbox as read',
scenarioBuilder: ($) => MarkMailboxAsReadScenario($),
);
}