TF-3864 Support pasting multiple address with multiple format mixed
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/list_address_extension.dart';
|
||||
|
||||
void main() {
|
||||
group('ListAddressExtension.toFilteredEmailAddressList', () {
|
||||
test('removes existing emails and duplicates', () {
|
||||
final addresses = [
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
'B@EXAMPLE.COM', // duplicate in different case
|
||||
'c@example.com',
|
||||
];
|
||||
final existingEmails = [
|
||||
EmailAddress('B', 'b@example.com'),
|
||||
EmailAddress('X', 'x@example.com'),
|
||||
];
|
||||
|
||||
final result = addresses.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result.map((e) => e.emailAddress), [
|
||||
'a@example.com',
|
||||
'c@example.com',
|
||||
]);
|
||||
});
|
||||
|
||||
test('keeps all unique and non-existing emails', () {
|
||||
final addresses = [
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
'c@example.com',
|
||||
];
|
||||
final existingEmails = [
|
||||
EmailAddress('Someone', 'z@example.com'),
|
||||
];
|
||||
|
||||
final result = addresses.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result.map((e) => e.emailAddress), [
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
'c@example.com',
|
||||
]);
|
||||
});
|
||||
|
||||
test('skips invalid emails', () {
|
||||
final addresses = [
|
||||
'invalid-email',
|
||||
'valid@example.com',
|
||||
];
|
||||
final existingEmails = <EmailAddress>[];
|
||||
|
||||
final result = addresses.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result.length, 2);
|
||||
expect(result[0].emailAddress, 'invalid-email');
|
||||
expect(result[0].name, isNull);
|
||||
expect(result[1].emailAddress, 'valid@example.com');
|
||||
});
|
||||
|
||||
test('removes duplicates within the list', () {
|
||||
final addresses = [
|
||||
'a@example.com',
|
||||
'A@EXAMPLE.COM', // duplicate in different case
|
||||
'b@example.com',
|
||||
'b@example.com',
|
||||
];
|
||||
final existingEmails = <EmailAddress>[];
|
||||
|
||||
final result = addresses.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result.map((e) => e.emailAddress), [
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
]);
|
||||
});
|
||||
|
||||
test('removes addresses matching normalized existingEmails', () {
|
||||
final addresses = [
|
||||
' A@Example.Com ',
|
||||
'b@example.com',
|
||||
];
|
||||
final existingEmails = [
|
||||
EmailAddress('A', 'a@example.com'),
|
||||
];
|
||||
|
||||
final result = addresses.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result.map((e) => e.emailAddress), ['b@example.com']);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
import 'package:core/utils/mail/named_address.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/list_named_address_extension.dart';
|
||||
|
||||
void main() {
|
||||
group('ListNamedAddressExtension.toFilteredEmailAddressList', () {
|
||||
test('filters out emails already in existingEmails list', () {
|
||||
final namedList = [
|
||||
NamedAddress(name: 'A', address: 'a@example.com'),
|
||||
NamedAddress(name: 'B', address: 'b@example.com'),
|
||||
NamedAddress(name: 'C', address: 'c@example.com'),
|
||||
];
|
||||
|
||||
final existingEmails = [
|
||||
EmailAddress('B', 'b@example.com'),
|
||||
];
|
||||
|
||||
final result = namedList.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(
|
||||
result.map((e) => e.emailAddress),
|
||||
containsAll(['a@example.com', 'c@example.com']),
|
||||
);
|
||||
expect(
|
||||
result.map((e) => e.emailAddress),
|
||||
isNot(contains('b@example.com')),
|
||||
);
|
||||
});
|
||||
|
||||
test('removes duplicate emails within the same list', () {
|
||||
final namedList = [
|
||||
NamedAddress(name: 'A1', address: 'a@example.com'),
|
||||
NamedAddress(name: 'A2', address: 'A@Example.com'),
|
||||
// Duplicate with different case
|
||||
NamedAddress(name: 'B', address: 'b@example.com'),
|
||||
];
|
||||
|
||||
final result = namedList.toFilteredEmailAddressList([]);
|
||||
|
||||
expect(result.length, 2);
|
||||
expect(
|
||||
result.map((e) => e.emailAddress),
|
||||
containsAll(['a@example.com', 'b@example.com']),
|
||||
);
|
||||
});
|
||||
|
||||
test('returns empty list if all emails are either existing or duplicates',
|
||||
() {
|
||||
final namedList = [
|
||||
NamedAddress(name: 'A', address: 'a@example.com'),
|
||||
NamedAddress(name: 'A2', address: 'A@Example.com'),
|
||||
];
|
||||
|
||||
final existingEmails = [
|
||||
EmailAddress('Existing A', 'a@example.com'),
|
||||
];
|
||||
|
||||
final result = namedList.toFilteredEmailAddressList(existingEmails);
|
||||
|
||||
expect(result, isEmpty);
|
||||
});
|
||||
|
||||
test('handles emails with empty name fields', () {
|
||||
final namedList = [
|
||||
NamedAddress(name: '', address: 'test@example.com'),
|
||||
];
|
||||
|
||||
final result = namedList.toFilteredEmailAddressList([]);
|
||||
|
||||
expect(result.length, 1);
|
||||
expect(result.first.emailAddress, 'test@example.com');
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user