TF-4265 Add integration test for attachment reminder on mobile

This commit is contained in:
dab246
2026-01-30 16:09:38 +07:00
committed by Dat H. Pham
parent 74c0c75023
commit 2a3325ab7a
17 changed files with 781 additions and 899 deletions
@@ -0,0 +1,109 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/identities/identity.dart';
import 'package:model/email/prefix_email_address.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_mobile_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import '../../base/base_test_scenario.dart';
import '../../models/provisioning_identity.dart';
import '../../robots/composer_robot.dart';
import '../../robots/identities_list_menu_robot.dart';
import '../../robots/thread_robot.dart';
class AttachmentReminderScenario extends BaseTestScenario {
const AttachmentReminderScenario(super.$);
@override
Future<void> runTestLogic() async {
const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
final threadRobot = ThreadRobot($);
final composerRobot = ComposerRobot($);
final identitiesListMenuRobot = IdentitiesListMenuRobot($);
final imagePaths = ImagePaths();
final appLocalizations = AppLocalizations();
final identity1 = Identity(
name: 'Identity with attachment keyword',
email: email,
htmlSignature: Signature('Signature file'),
sortOrder: UnsignedInt(0),
);
final identity2 = Identity(
name: 'Identity without attachment keyword',
email: email,
htmlSignature: Signature('Signature'),
sortOrder: UnsignedInt(100),
);
await provisionIdentities([
ProvisioningIdentity(identity: identity1, isDefault: true),
ProvisioningIdentity(identity: identity2),
]);
await $.pumpAndSettle();
// Send email with attachment keyword in signature
await threadRobot.openComposer();
await $.pumpAndSettle();
await _expectComposerViewVisible();
await composerRobot.grantContactPermission();
await composerRobot.addSubject('Test Reminder');
await composerRobot.addContent('Test Reminder');
await composerRobot.tapToRecipientExpandButton();
await $.pumpAndSettle();
await _expectIdentityVisible(identity1);
await composerRobot.addRecipientIntoField(
prefixEmailAddress: PrefixEmailAddress.to,
email: email,
);
await composerRobot.sendEmail(imagePaths);
await _expectSendEmailSuccessToast(appLocalizations);
// Send email without attachment keyword in signature
await threadRobot.openComposer();
await $.pumpAndSettle();
await composerRobot.grantContactPermission();
await composerRobot.addSubject('Test Reminder');
await composerRobot.addContent('file in content');
await composerRobot.tapToRecipientExpandButton();
await $.pumpAndSettle();
await composerRobot.addRecipientIntoField(
prefixEmailAddress: PrefixEmailAddress.to,
email: email,
);
await composerRobot.tapFromFieldPopupMenu();
await identitiesListMenuRobot.selectIdentityByName(identity2.name!);
await $.pumpAndSettle();
await _expectIdentityVisible(identity2);
await composerRobot.sendEmail(imagePaths);
await _expectAttachmentReminderModalVisible();
}
Future<void> _expectComposerViewVisible() =>
expectViewVisible($(ComposerView));
Future<void> _expectAttachmentReminderModalVisible() =>
expectViewVisible($(find.textContaining(
'in your message but did not add any attachments. Do you still want to send?')));
Future<void> _expectIdentityVisible(Identity identity) async {
expect(
$(FromComposerMobileWidget)
.which<FromComposerMobileWidget>(
(widget) => widget.selectedIdentity?.name == identity.name)
.visible,
isTrue,
);
}
Future<void> _expectSendEmailSuccessToast(
AppLocalizations appLocalizations) async {
await expectViewVisible(
$(find.text(appLocalizations.message_has_been_sent_successfully)),
);
}
}
@@ -0,0 +1,10 @@
import '../../base/test_base.dart';
import '../../scenarios/composer/attachment_reminder_scenario.dart';
void main() {
TestBase().runPatrolTest(
description:
'Should not see attachment reminder when send email with attachment keyword in signature',
scenarioBuilder: ($) => AttachmentReminderScenario($),
);
}