388 lines
11 KiB
PHP
388 lines
11 KiB
PHP
<?php
|
|
|
|
class AliasHandlerTest extends \PHPUnit\Framework\TestCase {
|
|
protected function setUp(): void {
|
|
// Fake being an admin.
|
|
$_SESSION = [
|
|
'sessid' => [
|
|
'roles' => ['global-admin']
|
|
]
|
|
];
|
|
parent::setUp();
|
|
}
|
|
|
|
protected function tearDown(): void {
|
|
$_SESSION = [];
|
|
db_query('DELETE FROM alias');
|
|
db_query('DELETE FROM domain_admins');
|
|
db_query('DELETE FROM domain');
|
|
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function testBasic() {
|
|
$x = new AliasHandler();
|
|
$list = $x->getList("");
|
|
$this->assertTrue($list);
|
|
$results = $x->result();
|
|
$this->assertEmpty($results);
|
|
}
|
|
|
|
|
|
public function testCannotAddAliasUntilDomainIsThere() {
|
|
|
|
// Fake us being an admin.
|
|
|
|
$_SESSION = [
|
|
'sessid' => [
|
|
'roles' => ['global-admin']
|
|
]
|
|
];
|
|
|
|
// Trying to add an alias when the domain doesn't exist fails.
|
|
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
|
|
$values = [
|
|
'localpart' => 'david.test',
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => 'david.test@example.com',
|
|
'goto' => ['dest@example.com']
|
|
];
|
|
|
|
try {
|
|
$r = $x->init('david.test@example.com');
|
|
$this->fail("Should not see this - example.com is not present");
|
|
} catch (\Exception $e) {
|
|
$this->assertEquals('Error: This domain does not exist!', $e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @see https://github.com/postfixadmin/postfixadmin/pull/375 and https://github.com/postfixadmin/postfixadmin/issues/358
|
|
*/
|
|
public function testCannotAddAliasThatPointsToItself() {
|
|
// Fake being an admin.
|
|
$_SESSION = [
|
|
'sessid' => [
|
|
'roles' => ['global-admin']
|
|
]
|
|
];
|
|
// Add example.com
|
|
$dh = new DomainHandler(1, 'admin', true);
|
|
|
|
$dh->init('example.com');
|
|
|
|
$ret = $dh->set(
|
|
[
|
|
'domain' => 'example.com',
|
|
'description' => 'test domain',
|
|
'aliases' => 11,
|
|
'mailboxes' => 12,
|
|
'active' => 1,
|
|
'backupmx' => 0,
|
|
'default_aliases' => 1
|
|
]
|
|
);
|
|
|
|
|
|
$this->assertEmpty($dh->errormsg);
|
|
$this->assertEmpty($dh->infomsg);
|
|
|
|
$this->assertTrue($ret);
|
|
|
|
$ret = $dh->save();
|
|
|
|
$this->assertTrue($ret);
|
|
|
|
// Need to add 'admin' as a domain_admin
|
|
db_insert('domain_admins', ['username' => 'admin', 'domain' => 'example.com', 'created' => '2020-01-01', 'active' => 1], ['created'], true);
|
|
|
|
$dh = new DomainHandler(0, 'admin', true);
|
|
$dh->getList('');
|
|
$result = $dh->result();
|
|
|
|
$this->assertEmpty($dh->infomsg);
|
|
$this->assertEmpty($dh->errormsg);
|
|
|
|
$this->assertNotEmpty($result);
|
|
|
|
$this->assertEquals('example.com', $result['example.com']['domain']);
|
|
$this->assertEquals('test domain', $result['example.com']['description']);
|
|
|
|
$this->assertEquals(11, $result['example.com']['aliases']);
|
|
$this->assertEquals(12, $result['example.com']['mailboxes']); // default aliases.
|
|
|
|
$this->assertEquals(4, $result['example.com']['alias_count']); // default aliases.
|
|
$this->assertEquals(0, $result['example.com']['mailbox_count']);
|
|
$this->assertEquals(1, $result['example.com']['active']);
|
|
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
|
|
$values = [
|
|
'localpart' => 'david.test',
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => 'david.test@example.com',
|
|
'goto' => ['david.test@example.com']
|
|
];
|
|
|
|
$r = $x->init('david.test@example.com');
|
|
$this->assertTrue($r);
|
|
$x->getList('');
|
|
$list = $x->result();
|
|
$this->assertEquals(4, count($list)); // default aliases.
|
|
|
|
$x->set($values);
|
|
$x->save();
|
|
|
|
$this->assertNotEmpty($x->errormsg);
|
|
$this->assertEquals(
|
|
[
|
|
'goto' => "david.test@example.com: Alias may not point to itself",
|
|
0 => "one or more values are invalid!"
|
|
], $x->errormsg);
|
|
}
|
|
|
|
public function testAddingDataEtc() {
|
|
|
|
// Fake being an admin.
|
|
$_SESSION = [
|
|
'sessid' => [
|
|
'roles' => ['global-admin']
|
|
]
|
|
];
|
|
|
|
$this->addDomain('example.com', 'admin');
|
|
|
|
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
|
|
$values = [
|
|
'localpart' => 'david.test',
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => 'david.test@example.com',
|
|
'goto' => ['dest@example.com']
|
|
];
|
|
|
|
$r = $x->init('david.test@example.com');
|
|
$this->assertTrue($r);
|
|
$x->getList('');
|
|
$list = $x->result();
|
|
$this->assertEquals(4, count($list)); // default aliases.
|
|
|
|
$x->set($values);
|
|
$x->save();
|
|
|
|
$x->getList('');
|
|
|
|
$list = $x->result();
|
|
$this->assertEquals(5, count($list));
|
|
|
|
$found = false;
|
|
|
|
foreach ($list as $alias => $details) {
|
|
if ($alias == 'david.test@example.com') {
|
|
// Found!
|
|
$this->assertEquals('example.com', $details['domain']);
|
|
$this->assertEquals('david.test@example.com', $details['address']);
|
|
$this->assertEquals(['dest@example.com'], $details['goto']);
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$this->assertTrue($found, "check output : " . json_encode($list));
|
|
}
|
|
|
|
|
|
private function addDomain(string $domain, string $username): void {
|
|
// Fake being an admin.
|
|
$_SESSION = [
|
|
'sessid' => [
|
|
'roles' => ['global-admin']
|
|
]
|
|
];
|
|
// Add example.com
|
|
$dh = new DomainHandler(1, $username, true);
|
|
|
|
$dh->init('example.com');
|
|
|
|
$ret = $dh->set(
|
|
[
|
|
'domain' => $domain,
|
|
'description' => 'test domain',
|
|
'aliases' => 11,
|
|
'mailboxes' => 12,
|
|
'active' => 1,
|
|
'backupmx' => 0,
|
|
'default_aliases' => 1
|
|
]
|
|
);
|
|
|
|
|
|
$this->assertEmpty($dh->errormsg);
|
|
$this->assertEmpty($dh->infomsg);
|
|
$this->assertTrue($ret);
|
|
$ret = $dh->save();
|
|
$this->assertTrue($ret);
|
|
|
|
// Need to add 'admin' as a domain_admin
|
|
db_insert('domain_admins', ['username' => $username, 'domain' => $domain, 'created' => '2020-01-01', 'active' => 1], ['created'], true);
|
|
|
|
|
|
$dh = new DomainHandler(0, $username, true);
|
|
$dh->getList('');
|
|
$result = $dh->result();
|
|
$this->assertEmpty($dh->infomsg);
|
|
$this->assertEmpty($dh->errormsg);
|
|
|
|
$this->assertNotEmpty($result);
|
|
|
|
$expected = [
|
|
'domain' => 'example.com',
|
|
'description' => 'test domain',
|
|
'aliases' => 11,
|
|
'alias_count' => 4,
|
|
'mailboxes' => 12,
|
|
'mailbox_count' => 0,
|
|
'backupmx' => 0,
|
|
'active' => 1,
|
|
];
|
|
|
|
foreach ($expected as $k => $v) {
|
|
$this->assertEquals($v, $result[$domain][$k]);
|
|
}
|
|
}
|
|
|
|
public function testYouCannotAddMoreAliasesThanTheDomainLimit() {
|
|
$this->addDomain('example.com', 'admin');
|
|
|
|
// default limit is 11 aliases.... so it should exit once we get past that.
|
|
|
|
|
|
$dh = new DomainHandler(0, 'admin', true);
|
|
$this->assertTrue($dh->getList(''));
|
|
$result = $dh->result();
|
|
|
|
// alias count limit is 11.
|
|
$this->assertEquals(11, $result['example.com']['aliases']);
|
|
|
|
// 4 default aliases were added.
|
|
$this->assertEquals(4, $result['example.com']['alias_count']);
|
|
|
|
|
|
foreach (range(1, 7) as $char) {
|
|
$newAlias = $char . '-test@example.com';
|
|
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
$values = [
|
|
'localpart' => explode('@', $newAlias)[0],
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => $newAlias,
|
|
'goto' => ['dest@example.com']
|
|
];
|
|
|
|
$r = $x->init($newAlias);
|
|
|
|
$this->assertTrue($r);
|
|
|
|
$x->set($values);
|
|
$this->assertTrue($x->save());
|
|
$this->assertTrue($x->getList(''));
|
|
$list = $x->result();
|
|
$this->assertArrayHasKey($newAlias, $list);
|
|
$this->assertEquals(1, $list[$newAlias]['active']);
|
|
}
|
|
|
|
// try and add one more - it should fail.
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
$values = [
|
|
'localpart' => 'z-david.test',
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => 'z-david.test@example.com',
|
|
'goto' => ['dest@example.com']
|
|
];
|
|
|
|
$r = $x->init('z-david.test@example.com');
|
|
|
|
// doesn't already exist.
|
|
$this->assertFalse($r);
|
|
|
|
// try saving ....
|
|
$x->set($values);
|
|
$this->assertFalse($x->save());
|
|
|
|
$this->assertEquals([
|
|
'address' => "You have reached your limit to create aliases!",
|
|
0 => "one or more values are invalid!"
|
|
], $x->errormsg);
|
|
}
|
|
|
|
|
|
public function testLoadsOfAliasesGetHandledByPager() {
|
|
$this->addDomain('example.com', 'admin');
|
|
|
|
// default limit is 11 aliases.... so it should exit once we get past that.
|
|
|
|
$dh = new DomainHandler(0, 'admin', true);
|
|
$dh->init('example.com');
|
|
|
|
$this->assertTrue($dh->set(
|
|
[
|
|
//'domain' => 'example.com',
|
|
'aliases' => 99,
|
|
'mailboxes' => 88,
|
|
'backupmx' => 0,
|
|
'active' => 1,
|
|
]
|
|
));
|
|
|
|
$this->assertTrue($dh->save());
|
|
|
|
$dh->getList('');
|
|
|
|
$domain = $dh->result()['example.com'];
|
|
|
|
$this->assertEquals(99, $domain['aliases']);
|
|
$this->assertEquals(88, $domain['mailboxes']);
|
|
|
|
foreach (range(1, 80) as $char) {
|
|
$newAlias = $char . '-test@example.com';
|
|
|
|
$x = new AliasHandler(1, 'admin', true);
|
|
$values = [
|
|
'localpart' => explode('@', $newAlias)[0],
|
|
'domain' => 'example.com',
|
|
'active' => 1,
|
|
'address' => $newAlias,
|
|
'goto' => ['dest@example.com']
|
|
];
|
|
|
|
$r = $x->init($newAlias);
|
|
|
|
$this->assertTrue($r);
|
|
|
|
$x->set($values);
|
|
$this->assertTrue($x->save());
|
|
$this->assertTrue($x->getList(''));
|
|
$list = $x->result();
|
|
$this->assertArrayHasKey($newAlias, $list);
|
|
$this->assertEquals(1, $list[$newAlias]['active']);
|
|
}
|
|
|
|
// try and add one more - it should fail.
|
|
$x = new AliasHandler(0, 'admin', true);
|
|
|
|
$x->getList('', [], 5, 20);
|
|
$results = $x->result();
|
|
|
|
$this->assertEquals(5, count($results));
|
|
$this->assertTrue(isset($results['31-test@example.com']));
|
|
}
|
|
}
|