TF-3294 Fix BLUE-BAR mail to attendees duplicated recipients

This commit is contained in:
dab246
2024-11-23 03:52:01 +07:00
committed by Dat H. Pham
parent cd8602784e
commit 4f5e7d460d
5 changed files with 110 additions and 11 deletions
@@ -69,6 +69,15 @@ extension SetEmailAddressExtension on Set<EmailAddress>? {
extension ListEmailAddressExtension on List<EmailAddress> {
Set<String> asSetAddress() => map((emailAddress) => emailAddress.emailAddress).toSet();
List<EmailAddress> removeInvalidEmails(String username) {
final Set<String> seenEmails = {};
return where((email) {
if (email.emailAddress.isEmpty) return false;
if (email.emailAddress == username) return false;
return seenEmails.add(email.emailAddress);
}).toList();
}
List<EmailAddress> withoutMe(String? userName) {
if (userName == null) return this;
@@ -1,5 +1,6 @@
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:model/extensions/list_email_address_extension.dart';
void main() {
@@ -43,4 +44,69 @@ void main() {
expect(result, 'John Doe &lt;john@example.com&gt;, Jane Smith &lt;jane@example.com&gt;');
});
});
group('ListEmailAddressExtension::removeInvalidEmails::test', () {
test('SHOULD remove email addresses that are empty', () {
final emails = [
EmailAddress('Alice', 'alice@example.com'),
EmailAddress('Bob', ''),
EmailAddress('Charlie', 'charlie@example.com'),
];
final validEmails = emails.removeInvalidEmails('bob@example.com');
expect(validEmails.length, 2);
expect(validEmails[0].emailAddress, 'alice@example.com');
expect(validEmails[1].emailAddress, 'charlie@example.com');
});
test('SHOULD remove email addresses that match the provided username', () {
final emails = [
EmailAddress('Alice', 'alice@example.com'),
EmailAddress('Bob', 'bob@example.com'),
EmailAddress('Charlie', 'charlie@example.com'),
];
final validEmails = emails.removeInvalidEmails('bob@example.com');
expect(validEmails.length, 2);
expect(validEmails[0].emailAddress, 'alice@example.com');
expect(validEmails[1].emailAddress, 'charlie@example.com');
});
test('SHOULD remove duplicate email addresses, keeping only the first occurrence', () {
final emails = [
EmailAddress('Alice', 'alice@example.com'),
EmailAddress('Bob', 'bob@example.com'),
EmailAddress('Charlie', 'alice@example.com'),
EmailAddress('David', 'david@example.com'),
];
final validEmails = emails.removeInvalidEmails('bob@example.com');
expect(validEmails.length, 2);
expect(validEmails[0].emailAddress, 'alice@example.com');
expect(validEmails[1].emailAddress, 'david@example.com');
});
test('SHOULD return an empty list if all email addresses are invalid', () {
final emails = [
EmailAddress('Alice', ''),
EmailAddress('Bob', 'bob@example.com'),
EmailAddress('Charlie', 'bob@example.com'),
];
final validEmails = emails.removeInvalidEmails('bob@example.com');
expect(validEmails.isEmpty, true);
});
test('SHOULD return an empty list for an empty input list', () {
final emails = <EmailAddress>[];
final validEmails = emails.removeInvalidEmails('bob@example.com');
expect(validEmails.isEmpty, true);
});
});
}