TF-4367 Add unit test for apply Reply/Forward prefix for subject when compose email
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/localization_service.dart';
|
||||
|
||||
void main() {
|
||||
Future<BuildContext> pumpLocalizedWidget(
|
||||
WidgetTester tester,
|
||||
Locale locale,
|
||||
) async {
|
||||
late BuildContext context;
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
locale: locale,
|
||||
supportedLocales: LocalizationService.supportedLocales,
|
||||
localizationsDelegates: const [
|
||||
AppLocalizationsDelegate(),
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
home: Builder(
|
||||
builder: (ctx) {
|
||||
context = ctx;
|
||||
return const SizedBox();
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
group('EmailActionTypeExtension.getSubjectComposer', () {
|
||||
const subject = 'Hello world';
|
||||
|
||||
group('reply actions', () {
|
||||
test('should add default Re prefix when context is null', () {
|
||||
final result = EmailActionType.reply.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, 'Re: Hello world');
|
||||
});
|
||||
|
||||
test('should not duplicate Re prefix', () {
|
||||
const subjectWithPrefix = 'Re: Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.reply.getSubjectComposer(null, subjectWithPrefix);
|
||||
|
||||
expect(result, subjectWithPrefix);
|
||||
});
|
||||
|
||||
test('should ignore case when checking prefix', () {
|
||||
const subjectWithPrefix = 're: Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.reply.getSubjectComposer(null, subjectWithPrefix);
|
||||
|
||||
expect(result, subjectWithPrefix);
|
||||
});
|
||||
});
|
||||
|
||||
group('forward actions', () {
|
||||
test('should add default Fwd prefix when context is null', () {
|
||||
final result =
|
||||
EmailActionType.forward.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, 'Fwd: Hello world');
|
||||
});
|
||||
|
||||
test('should not duplicate Fwd prefix', () {
|
||||
const subjectWithPrefix = 'Fwd: Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.forward.getSubjectComposer(null, subjectWithPrefix);
|
||||
|
||||
expect(result, subjectWithPrefix);
|
||||
});
|
||||
|
||||
test('should ignore case when checking prefix', () {
|
||||
const subjectWithPrefix = 'fwd: Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.forward.getSubjectComposer(null, subjectWithPrefix);
|
||||
|
||||
expect(result, subjectWithPrefix);
|
||||
});
|
||||
});
|
||||
|
||||
group('edit actions', () {
|
||||
test('editDraft should return original subject', () {
|
||||
final result =
|
||||
EmailActionType.editDraft.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, subject);
|
||||
});
|
||||
|
||||
test('editSendingEmail should return original subject', () {
|
||||
final result =
|
||||
EmailActionType.editSendingEmail.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, subject);
|
||||
});
|
||||
|
||||
test('editAsNewEmail should return original subject', () {
|
||||
final result =
|
||||
EmailActionType.editAsNewEmail.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, subject);
|
||||
});
|
||||
});
|
||||
|
||||
group('default case', () {
|
||||
test('should return empty string for unsupported action', () {
|
||||
final result =
|
||||
EmailActionType.markAsRead.getSubjectComposer(null, subject);
|
||||
|
||||
expect(result, '');
|
||||
});
|
||||
});
|
||||
|
||||
group('localized prefix', () {
|
||||
testWidgets('should use localized reply prefix (vi)', (tester) async {
|
||||
final context = await pumpLocalizedWidget(
|
||||
tester,
|
||||
const Locale('vi'),
|
||||
);
|
||||
|
||||
const subject = 'Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.reply.getSubjectComposer(context, subject);
|
||||
|
||||
final prefix = AppLocalizations.of(context).prefix_reply_email;
|
||||
|
||||
expect(result, '$prefix Hello world');
|
||||
});
|
||||
|
||||
testWidgets('should not duplicate localized reply prefix',
|
||||
(tester) async {
|
||||
final context = await pumpLocalizedWidget(
|
||||
tester,
|
||||
const Locale('vi'),
|
||||
);
|
||||
|
||||
final prefix = AppLocalizations.of(context).prefix_reply_email;
|
||||
|
||||
final subject = '$prefix Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.reply.getSubjectComposer(context, subject);
|
||||
|
||||
expect(result, subject);
|
||||
});
|
||||
|
||||
testWidgets('should use localized forward prefix', (tester) async {
|
||||
final context = await pumpLocalizedWidget(
|
||||
tester,
|
||||
const Locale('fr'),
|
||||
);
|
||||
|
||||
const subject = 'Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.forward.getSubjectComposer(context, subject);
|
||||
|
||||
final prefix = AppLocalizations.of(context).prefix_forward_email;
|
||||
|
||||
expect(result, '$prefix Hello world');
|
||||
});
|
||||
|
||||
testWidgets('should not duplicate localized forward prefix',
|
||||
(tester) async {
|
||||
final context = await pumpLocalizedWidget(
|
||||
tester,
|
||||
const Locale('fr'),
|
||||
);
|
||||
|
||||
final prefix = AppLocalizations.of(context).prefix_forward_email;
|
||||
|
||||
final subject = '$prefix Hello world';
|
||||
|
||||
final result =
|
||||
EmailActionType.forward.getSubjectComposer(context, subject);
|
||||
|
||||
expect(result, subject);
|
||||
});
|
||||
|
||||
for (final locale in LocalizationService.supportedLocales) {
|
||||
testWidgets('reply prefix works for $locale', (tester) async {
|
||||
final context = await pumpLocalizedWidget(tester, locale);
|
||||
|
||||
final result =
|
||||
EmailActionType.reply.getSubjectComposer(context, 'Hello');
|
||||
|
||||
final prefix = AppLocalizations.of(context).prefix_reply_email;
|
||||
|
||||
expect(result, '$prefix Hello');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user