From b38cf25a75b3bba5810f245d4b463532c098fb39 Mon Sep 17 00:00:00 2001 From: Lukas Metzger Date: Sat, 24 Mar 2018 13:32:34 +0100 Subject: [PATCH] Added tests for GET /domains --- backend/test/db.sql | 14 ++-- backend/test/package-lock.json | 5 ++ backend/test/package.json | 3 +- backend/test/test.sh | 2 +- backend/test/tests/domains-get.js | 106 ++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 backend/test/tests/domains-get.js diff --git a/backend/test/db.sql b/backend/test/db.sql index 7d46602..91f67a2 100644 --- a/backend/test/db.sql +++ b/backend/test/db.sql @@ -3,10 +3,11 @@ -- http://www.phpmyadmin.net -- -- Host: localhost --- Generation Time: Mar 23, 2018 at 02:29 PM +-- Generation Time: Mar 24, 2018 at 01:13 PM -- Server version: 5.7.21-0ubuntu0.16.04.1 -- PHP Version: 7.0.28-0ubuntu0.16.04.1 +SET FOREIGN_KEY_CHECKS=0; SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; @@ -16,7 +17,6 @@ SET time_zone = "+00:00"; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; - -- -------------------------------------------------------- -- @@ -86,7 +86,10 @@ CREATE TABLE `domains` ( INSERT INTO `domains` (`id`, `name`, `master`, `last_check`, `type`, `notified_serial`, `account`) VALUES (1, 'example.com', NULL, NULL, 'MASTER', NULL, NULL), -(2, 'slave.example.net', '12.34.56.78', NULL, 'SLAVE', NULL, NULL); +(2, 'slave.example.net', '12.34.56.78', NULL, 'SLAVE', NULL, NULL), +(3, 'foo.de', NULL, NULL, 'NATIVE', NULL, NULL), +(4, 'bar.net', NULL, NULL, 'MASTER', NULL, NULL), +(5, 'baz.org', NULL, NULL, 'MASTER', NULL, NULL); -- -------------------------------------------------------- @@ -267,7 +270,7 @@ ALTER TABLE `domainmetadata` -- AUTO_INCREMENT for table `domains` -- ALTER TABLE `domains` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; -- -- AUTO_INCREMENT for table `records` -- @@ -282,7 +285,8 @@ ALTER TABLE `tsigkeys` -- AUTO_INCREMENT for table `users` -- ALTER TABLE `users` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;SET FOREIGN_KEY_CHECKS=1; + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/backend/test/package-lock.json b/backend/test/package-lock.json index 584aefa..80731bb 100644 --- a/backend/test/package-lock.json +++ b/backend/test/package-lock.json @@ -13,6 +13,11 @@ "is-buffer": "1.1.6" } }, + "cartesian-product": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cartesian-product/-/cartesian-product-2.1.2.tgz", + "integrity": "sha1-yahGLFSrGaDF/TIZKSLiOatMpP0=" + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", diff --git a/backend/test/package.json b/backend/test/package.json index 0da5868..3a0a721 100644 --- a/backend/test/package.json +++ b/backend/test/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "Dependencies for pdnsmanager test", "dependencies": { - "axios": "^0.18.0" + "axios": "^0.18.0", + "cartesian-product": "^2.1.2" } } diff --git a/backend/test/test.sh b/backend/test/test.sh index aa56810..29989a9 100755 --- a/backend/test/test.sh +++ b/backend/test/test.sh @@ -74,7 +74,7 @@ then clearConfig exit 1 else - if [ $(wc -l logfile.log) -gt 0 ] + if [ $(cat logfile.log | wc -l) -gt 0 ] then echo "Errors in logfile:" cat "logfile.log" diff --git a/backend/test/tests/domains-get.js b/backend/test/tests/domains-get.js new file mode 100644 index 0000000..5dd87c7 --- /dev/null +++ b/backend/test/tests/domains-get.js @@ -0,0 +1,106 @@ +const cartesianProduct = require('cartesian-product'); + +require('../testlib')(async function (assert, req) { + //GET /domains?page=5&pagesize=10&query=foo&sort=id-asc,name-desc,type-asc,records-asc&type=MASTER + + //Test sorting in all combinations + const sortCombinations = cartesianProduct([ + ['', 'id-asc', 'id-desc'], + ['', 'name-asc', 'name-desc'], + ['', 'type-asc', 'type-desc'], + ['', 'records-asc', 'records-desc'] + ]); + + for (list of sortCombinations) { + list = list.filter((str) => str.length > 0); + var sortQuery = list.join(','); + + var res = await req({ + url: '/domains?sort=' + sortQuery, + method: 'get' + }); + + assert.equal(res.status, 200); + + var sortedData = res.data.results.slice(); + sortedData.sort(function (a, b) { + for (sort of list) { + var spec = sort.split('-'); + if (a[spec[0]] < b[spec[0]]) { + return spec[1] == 'asc' ? -1 : 1; + } else if (a[spec[0]] > b[spec[0]]) { + return spec[1] == 'asc' ? 1 : -1; + } + } + return 0; + }); + + assert.equal(res.data.results, sortedData, 'Sort failed for ' + res.config.url); + } + + //Test paging + var res = await req({ + url: '/domains?pagesize=3', + method: 'get' + }); + + assert.equal(res.status, 200, 'Status should be OK'); + assert.equal(res.data.paging, { + page: 1, + total: 2, + pagesize: 3 + }, 'Paging data fail for ' + res.config.url); + assert.equal(res.data.results.length, 3, "Should be 3 results."); + + var res = await req({ + url: '/domains?pagesize=3&page=2', + method: 'get' + }); + + assert.equal(res.status, 200, 'Status should be OK'); + assert.equal(res.data.paging, { + page: 2, + total: 2, + pagesize: 3 + }, 'Paging data fail for ' + res.config.url); + assert.equal(res.data.results.length, 2, "Should be 2 results."); + + //Test query + var res = await req({ + url: '/domains?query=.net&sort=id-asc', + method: 'get' + }); + + assert.equal(res.status, 200, 'Status should be OK'); + assert.equal(res.data.results, [ + { + id: '2', + name: 'slave.example.net', + type: 'SLAVE', + master: '12.34.56.78', + records: '0' + }, + { + id: '4', + name: 'bar.net', + type: 'MASTER', + records: '0' + } + ], 'Result fail for ' + res.config.url); + + //Type filter + var res = await req({ + url: '/domains?type=NATIVE', + method: 'get' + }); + + assert.equal(res.status, 200, 'Status should be OK'); + assert.equal(res.data.results, [ + { + id: '3', + name: 'foo.de', + type: 'NATIVE', + records: '0' + } + ], 'Result fail for ' + res.config.url); +});