From 6ec9c81c32ff89c55ba39d8b419cdab3d707b261 Mon Sep 17 00:00:00 2001 From: Lukas Metzger Date: Sat, 24 Mar 2018 15:09:33 +0100 Subject: [PATCH] Fixed bug where numbers where returned as string --- backend/src/operations/Domains.php | 3 + backend/test/tests/domains-crud.js | 161 +++++++++++++------------ backend/test/tests/domains-get.js | 186 +++++++++++++++-------------- backend/test/tests/session.js | 120 ++++++++++--------- 4 files changed, 241 insertions(+), 229 deletions(-) diff --git a/backend/src/operations/Domains.php b/backend/src/operations/Domains.php index e9ecc58..5511a59 100644 --- a/backend/src/operations/Domains.php +++ b/backend/src/operations/Domains.php @@ -103,6 +103,8 @@ class Domains if ($item['type'] != 'SLAVE') { unset($item['master']); } + $item['id'] = intval($item['id']); + $item['records'] = intval($item['records']); return $item; }, $data); } @@ -147,6 +149,7 @@ class Domains $query->execute(); $record = $query->fetch(); + $record['id'] = intval($record['id']); if ($type !== 'SLAVE') { unset($record['master']); } diff --git a/backend/test/tests/domains-crud.js b/backend/test/tests/domains-crud.js index 3c14e9c..e84aed3 100644 --- a/backend/test/tests/domains-crud.js +++ b/backend/test/tests/domains-crud.js @@ -1,100 +1,105 @@ const cartesianProduct = require('cartesian-product'); -require('../testlib')('admin', async function (assert, req) { - //Test missing fields - var res = await req({ - url: '/domains', - method: 'post', - data: { - name: 'abc.de' - } - }); +(async function () { + await require('../testlib')('admin', async function (assert, req) { + //Test missing fields + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'abc.de' + } + }); - assert.equal(res.status, 422, 'Missing type filed should trigger error.'); + assert.equal(res.status, 422, 'Missing type filed should trigger error.'); - var res = await req({ - url: '/domains', - method: 'post', - data: { - name: 'abc.de', - type: 'SLAVE' - } - }); + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'abc.de', + type: 'SLAVE' + } + }); - assert.equal(res.status, 422, 'Missing master field for SLAVE domain should trigger error.'); + assert.equal(res.status, 422, 'Missing master field for SLAVE domain should trigger error.'); - var res = await req({ - url: '/domains', - method: 'post', - data: { - name: 'foo.de', - type: 'MASTER' - } - }); + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'foo.de', + type: 'MASTER' + } + }); - assert.equal(res.status, 409, 'Existing domain should trigger error.'); + assert.equal(res.status, 409, 'Existing domain should trigger error.'); - //Test creation of master zone - var res = await req({ - url: '/domains', - method: 'post', - data: { + //Test creation of master zone + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'master.de', + type: 'MASTER' + } + }); + + assert.equal(res.status, 201, 'Creation should be successfull'); + assert.equal(res.data, { + id: 6, name: 'master.de', type: 'MASTER' - } - }); + }, 'Creation result fail.') - assert.equal(res.status, 201, 'Creation should be successfull'); - assert.equal(res.data, { - id: '6', - name: 'master.de', - type: 'MASTER' - }, 'Creation result fail.') + //Test creation of native zone + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'native.de', + type: 'NATIVE' + } + }); - //Test creation of native zone - var res = await req({ - url: '/domains', - method: 'post', - data: { + assert.equal(res.status, 201, 'Creation should be successfull'); + assert.equal(res.data, { + id: 7, name: 'native.de', type: 'NATIVE' - } - }); + }, 'Creation result fail.') - assert.equal(res.status, 201, 'Creation should be successfull'); - assert.equal(res.data, { - id: '7', - name: 'native.de', - type: 'NATIVE' - }, 'Creation result fail.') + //Test creation of slave zone + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'slave.de', + type: 'SLAVE', + master: '1.2.3.4' + } + }); - //Test creation of slave zone - var res = await req({ - url: '/domains', - method: 'post', - data: { + assert.equal(res.status, 201, 'Creation should be successfull'); + assert.equal(res.data, { + id: 8, name: 'slave.de', - type: 'SLAVE' - } + type: 'SLAVE', + master: '1.2.3.4' + }, 'Creation result fail.') }); - assert.equal(res.status, 201, 'Creation should be successfull'); - assert.equal(res.data, { - id: '8', - name: 'slave.de', - type: 'SLAVE' - }, 'Creation result fail.') -}); + await require('../testlib')('user', async function (assert, req) { + //Test insufficient privileges + var res = await req({ + url: '/domains', + method: 'post', + data: { + name: 'foo.de' + } + }); -require('../testlib')('user', async function (assert, req) { - //Test insufficient privileges - var res = await req({ - url: '/domains', - method: 'post', - data: { - name: 'foo.de' - } + assert.equal(res.status, 403, 'Domain creation should be forbidden for users.') }); - assert.equal(res.status, 403, 'Domain creation should be forbidden for users.') -}); \ No newline at end of file +})(); \ No newline at end of file diff --git a/backend/test/tests/domains-get.js b/backend/test/tests/domains-get.js index bf2ca4f..2d17e33 100644 --- a/backend/test/tests/domains-get.js +++ b/backend/test/tests/domains-get.js @@ -1,106 +1,108 @@ const cartesianProduct = require('cartesian-product'); -require('../testlib')('admin', async function (assert, req) { - //GET /domains?page=5&pagesize=10&query=foo&sort=id-asc,name-desc,type-asc,records-asc&type=MASTER +(async function () { + require('../testlib')('admin', 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'] - ]); + //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(','); + 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?sort=' + sortQuery, + url: '/domains?pagesize=3', method: 'get' }); - assert.equal(res.status, 200); + 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 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; + var res = await req({ + url: '/domains?pagesize=3&page=2', + method: 'get' }); - assert.equal(res.data.results, sortedData, 'Sort failed for ' + res.config.url); - } + 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 paging - var res = await req({ - url: '/domains?pagesize=3', - method: 'get' + //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); }); - - 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); -}); +})(); \ No newline at end of file diff --git a/backend/test/tests/session.js b/backend/test/tests/session.js index 890a8c0..58f2d3d 100644 --- a/backend/test/tests/session.js +++ b/backend/test/tests/session.js @@ -1,61 +1,63 @@ -require('../testlib')('admin', async function (assert, req) { - //Try to login with invalid username and password - var res = await req({ - url: '/sessions', - method: 'post', - data: { - username: 'foo', - password: 'bar' - } +(async function () { + require('../testlib')('admin', async function (assert, req) { + //Try to login with invalid username and password + var res = await req({ + url: '/sessions', + method: 'post', + data: { + username: 'foo', + password: 'bar' + } + }); + + assert.equal(res.status, 403, 'Status not valid'); + + //Try to login with invalid username + var res = await req({ + url: '/sessions', + method: 'post', + data: { + username: 'foo', + password: 'admin' + } + }); + + assert.equal(res.status, 403, 'Status not valid'); + + //Try to login with invalid password + var res = await req({ + url: '/sessions', + method: 'post', + data: { + username: 'admin', + password: 'foo' + } + }); + + assert.equal(res.status, 403, 'Status not valid'); + + //Try to login with missing field + var res = await req({ + url: '/sessions', + method: 'post', + data: { + password: 'admin' + } + }); + + assert.equal(res.status, 422, 'Status not valid'); + + //Try to login with invalid username and password + var res = await req({ + url: '/sessions', + method: 'post', + data: { + username: 'foo/admin', + password: 'admin' + } + }); + + assert.equal(res.status, 201, 'Status not valid'); }); - - assert.equal(res.status, 403, 'Status not valid'); - - //Try to login with invalid username - var res = await req({ - url: '/sessions', - method: 'post', - data: { - username: 'foo', - password: 'admin' - } - }); - - assert.equal(res.status, 403, 'Status not valid'); - - //Try to login with invalid password - var res = await req({ - url: '/sessions', - method: 'post', - data: { - username: 'admin', - password: 'foo' - } - }); - - assert.equal(res.status, 403, 'Status not valid'); - - //Try to login with missing field - var res = await req({ - url: '/sessions', - method: 'post', - data: { - password: 'admin' - } - }); - - assert.equal(res.status, 422, 'Status not valid'); - - //Try to login with invalid username and password - var res = await req({ - url: '/sessions', - method: 'post', - data: { - username: 'foo/admin', - password: 'admin' - } - }); - - assert.equal(res.status, 201, 'Status not valid'); -}); +})(); \ No newline at end of file