From 48d71107790e7426278a5d499732ecaa925e582e Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Thu, 22 Mar 2018 14:56:18 +0100 Subject: [PATCH] add first unit tests for DomainZones ApiCommand Signed-off-by: Michael Kaufmann (d00p) --- .../api/commands/class.DomainZones.php | 22 ++++-- lib/classes/api/commands/class.SubDomains.php | 6 +- phpunit.xml | 1 + tests/DomainZones/DomainZonesTest.php | 68 +++++++++++++++++++ tests/Domains/DomainsTest.php | 3 +- 5 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 tests/DomainZones/DomainZonesTest.php diff --git a/lib/classes/api/commands/class.DomainZones.php b/lib/classes/api/commands/class.DomainZones.php index dbdacad6..0a7dcdf3 100644 --- a/lib/classes/api/commands/class.DomainZones.php +++ b/lib/classes/api/commands/class.DomainZones.php @@ -42,8 +42,11 @@ class DomainZones extends ApiCommand implements ResourceEntity $content = $this->getParam('content', true, null); $ttl = $this->getParam('ttl', true, 18000); - // validation - if ($result['isbinddomain'] != '1') { + if ($result['parentdomainid'] != '0') { + throw new Exception("DNS zones can only be generated for the main domain, not for subdomains", 406); + } + + if ($result['subisbinddomain'] != '1') { standard_error('dns_domain_nodns', '', true); } @@ -291,7 +294,11 @@ class DomainZones extends ApiCommand implements ResourceEntity )); $id = $result['id']; - if ($result['isbinddomain'] != '1') { + if ($result['parentdomainid'] != '0') { + throw new Exception("DNS zones can only be generated for the main domain, not for subdomains", 406); + } + + if ($result['subisbinddomain'] != '1') { standard_error('dns_domain_nodns', '', true); } @@ -335,8 +342,11 @@ class DomainZones extends ApiCommand implements ResourceEntity 'id' => $entry_id, 'did' => $id ), true, true); - // re-generate bind configs - inserttask('4'); - return $this->response(200, "successfull", true); + if ($del_stmt->rowCount() > 0) { + // re-generate bind configs + inserttask('4'); + return $this->response(200, "successfull", true); + } + return $this->response(304, "successfull", true); } } diff --git a/lib/classes/api/commands/class.SubDomains.php b/lib/classes/api/commands/class.SubDomains.php index 9159587f..b7be8393 100644 --- a/lib/classes/api/commands/class.SubDomains.php +++ b/lib/classes/api/commands/class.SubDomains.php @@ -347,7 +347,7 @@ class SubDomains extends ApiCommand implements ResourceEntity } if (count($customer_ids) > 0) { $result_stmt = Database::prepare(" - SELECT d.*, pd.`subcanemaildomain` + SELECT d.*, pd.`subcanemaildomain`, pd.`isbinddomain` as subisbinddomain FROM `" . TABLE_PANEL_DOMAINS . "` d, `" . TABLE_PANEL_DOMAINS . "` pd WHERE " . ($id > 0 ? "d.`id` = :iddn" : "d.`domain` = :iddn") . " AND d.`customerid` IN (:customerids) AND ((d.`parentdomainid`!='0' AND pd.`id` = d.`parentdomainid`) OR (d.`parentdomainid`='0' AND pd.`id` = d.`id`)) @@ -361,7 +361,7 @@ class SubDomains extends ApiCommand implements ResourceEntity } } else { $result_stmt = Database::prepare(" - SELECT d.*, pd.`subcanemaildomain` + SELECT d.*, pd.`subcanemaildomain`, pd.`isbinddomain` as subisbinddomain FROM `" . TABLE_PANEL_DOMAINS . "` d, `" . TABLE_PANEL_DOMAINS . "` pd WHERE " . ($id > 0 ? "d.`id` = :iddn" : "d.`domain` = :iddn") . " AND ((d.`parentdomainid`!='0' AND pd.`id` = d.`parentdomainid`) OR (d.`parentdomainid`='0' AND pd.`id` = d.`id`)) @@ -375,7 +375,7 @@ class SubDomains extends ApiCommand implements ResourceEntity throw new Exception("You cannot access this resource", 405); } $result_stmt = Database::prepare(" - SELECT d.*, pd.`subcanemaildomain` + SELECT d.*, pd.`subcanemaildomain`, pd.`isbinddomain` as subisbinddomain FROM `" . TABLE_PANEL_DOMAINS . "` d, `" . TABLE_PANEL_DOMAINS . "` pd WHERE d.`customerid`= :customerid AND " . ($id > 0 ? "d.`id` = :iddn" : "d.`domain` = :iddn") . " AND ((d.`parentdomainid`!='0' AND pd.`id` = d.`parentdomainid`) OR (d.`parentdomainid`='0' AND pd.`id` = d.`id`)) diff --git a/phpunit.xml b/phpunit.xml index 33b73837..ceeb519c 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -19,6 +19,7 @@ tests/Emails tests/Extras tests/Backup + tests/DomainZones diff --git a/tests/DomainZones/DomainZonesTest.php b/tests/DomainZones/DomainZonesTest.php new file mode 100644 index 00000000..3833084f --- /dev/null +++ b/tests/DomainZones/DomainZonesTest.php @@ -0,0 +1,68 @@ + 'test1' + ))->get(); + $customer_userdata = json_decode($json_result, true)['data']; + + $data = [ + 'domainname' => 'test2.local' + ]; + $json_result = DomainZones::getLocal($customer_userdata, $data)->get(); + $result = json_decode($json_result, true)['data']; + $this->assertTrue(count($result) > 1); + $this->assertEquals('$ORIGIN test2.local.', $result[1]); + } + + public function testCustomerDomainZonesGetNoSubdomains() + { + global $admin_userdata; + + Settings::Set('system.dnsenabled', 1, true); + + // get customer + $json_result = Customers::getLocal($admin_userdata, array( + 'loginname' => 'test1' + ))->get(); + $customer_userdata = json_decode($json_result, true)['data']; + + $data = [ + 'domainname' => 'mysub2.test2.local' + ]; + $this->expectExceptionCode(406); + $this->expectExceptionMessage("DNS zones can only be generated for the main domain, not for subdomains"); + DomainZones::getLocal($customer_userdata, $data)->get(); + } + + public function testAdminDomainZonesListing() + { + global $admin_userdata; + $this->expectExceptionCode(303); + DomainZones::getLocal($admin_userdata)->listing(); + } + + public function testAdminDomainZonesUpdate() + { + global $admin_userdata; + $this->expectExceptionCode(303); + DomainZones::getLocal($admin_userdata)->update(); + } +} diff --git a/tests/Domains/DomainsTest.php b/tests/Domains/DomainsTest.php index efc41901..4e899eb2 100644 --- a/tests/Domains/DomainsTest.php +++ b/tests/Domains/DomainsTest.php @@ -68,7 +68,8 @@ class DomainsTest extends TestCase $reseller_userdata['caneditphpsettings'] = 1; $data = [ 'domain' => 'test2.local', - 'customerid' => 1 + 'customerid' => 1, + 'isbinddomain' => 1 ]; // the reseller is not allowed to use the default ip/port $this->expectExceptionMessage("The ip/port combination you have chosen doesn't exist.");