187 строки
4.0 KiB
PHP
187 строки
4.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
|
*
|
|
* @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
|
*
|
|
* @license GNU AGPL version 3 or any later version
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
namespace OCA\Mail\Tests;
|
|
|
|
use ChristophWurst\Nextcloud\Testing\TestCase;
|
|
use Horde_Mail_Rfc822_Address;
|
|
use Horde_Mail_Rfc822_Group;
|
|
use Horde_Mail_Rfc822_List;
|
|
use OCA\Mail\Address;
|
|
use OCA\Mail\AddressList;
|
|
|
|
class AddressListTest extends TestCase {
|
|
|
|
public function testSerialize() {
|
|
$list = new AddressList([
|
|
new Address('User 1', 'user1@domain.tld'),
|
|
new Address('User 2', 'user2@domain.tld'),
|
|
]);
|
|
$expected = [
|
|
[
|
|
'label' => 'User 1',
|
|
'email' => 'user1@domain.tld',
|
|
],
|
|
[
|
|
'label' => 'User 2',
|
|
'email' => 'user2@domain.tld',
|
|
],
|
|
];
|
|
|
|
$json = $list->jsonSerialize();
|
|
|
|
$this->assertCount(2, $json);
|
|
$this->assertEquals($expected, $json);
|
|
}
|
|
|
|
public function testParseSingleAddress() {
|
|
$source = 'a@b.c';
|
|
$expected = new AddressList([
|
|
new Address('a@b.c', 'a@b.c'),
|
|
]);
|
|
|
|
$list = AddressList::parse($source);
|
|
|
|
$this->assertEquals($expected, $list);
|
|
}
|
|
|
|
public function testFromHordeList() {
|
|
$hordeList = new Horde_Mail_Rfc822_List([
|
|
new Horde_Mail_Rfc822_Address(),
|
|
new Horde_Mail_Rfc822_Group(),
|
|
]);
|
|
|
|
$list = AddressList::fromHorde($hordeList);
|
|
|
|
$this->assertCount(1, $list);
|
|
}
|
|
|
|
public function testToHorde() {
|
|
$list = new AddressList([
|
|
new Address('A', 'a@domain.tld'),
|
|
new Address('B', 'b@domain.tld'),
|
|
]);
|
|
$add1 = new Horde_Mail_Rfc822_Address('a@domain.tld');
|
|
$add1->personal = 'A';
|
|
$add2 = new Horde_Mail_Rfc822_Address('b@domain.tld');
|
|
$add2->personal = 'B';
|
|
$expected = new Horde_Mail_Rfc822_List([
|
|
$add1,
|
|
$add2
|
|
]);
|
|
|
|
$hordeList = $list->toHorde();
|
|
|
|
$this->assertEquals($expected, $hordeList);
|
|
}
|
|
|
|
public function testFromAndToHorde() {
|
|
$add1 = new Horde_Mail_Rfc822_Address('a@domain.tld');
|
|
$add1->personal = 'A';
|
|
$add2 = new Horde_Mail_Rfc822_Address('b@domain.tld');
|
|
$add2->personal = 'B';
|
|
$source = new Horde_Mail_Rfc822_List([
|
|
$add1,
|
|
$add2,
|
|
]);
|
|
$expected = new Horde_Mail_Rfc822_List([
|
|
$add1,
|
|
$add2,
|
|
]);
|
|
$list = AddressList::fromHorde($source);
|
|
|
|
$hordeList = $list->toHorde();
|
|
|
|
$this->assertEquals($expected, $hordeList);
|
|
}
|
|
|
|
public function testMergeIdentical() {
|
|
$a = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
]);
|
|
$b = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
]);
|
|
|
|
$c = $a->merge($b);
|
|
|
|
$this->assertCount(1, $c);
|
|
}
|
|
|
|
public function testMergeNonIdentical() {
|
|
$a = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
]);
|
|
$b = new AddressList([
|
|
new Address('B', 'b@b.c'),
|
|
]);
|
|
|
|
$c = $a->merge($b);
|
|
|
|
$this->assertCount(1, $a);
|
|
$this->assertCount(1, $b);
|
|
$this->assertCount(2, $c);
|
|
}
|
|
|
|
public function testMergeMixed() {
|
|
$a = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
new Address('B', 'b@b.c'),
|
|
]);
|
|
$b = new AddressList([
|
|
new Address('B', 'b@b.c'),
|
|
]);
|
|
|
|
$c = $a->merge($b);
|
|
|
|
$this->assertCount(2, $c);
|
|
}
|
|
|
|
public function testMergeEmpty() {
|
|
$a = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
new Address('B', 'b@b.c'),
|
|
]);
|
|
$b = new AddressList();
|
|
|
|
$c = $a->merge($b);
|
|
|
|
$this->assertCount(2, $c);
|
|
}
|
|
|
|
public function testMergeToEmpty() {
|
|
$a = new AddressList([
|
|
]);
|
|
$b = new AddressList([
|
|
new Address('A', 'a@b.c'),
|
|
new Address('B', 'b@b.c'),
|
|
]);
|
|
|
|
$c = $a->merge($b);
|
|
|
|
$this->assertCount(2, $c);
|
|
}
|
|
|
|
}
|