123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- <?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']));
- }
- }
|