diff --git a/src/helpers/index.js b/src/helpers/index.js index 922b1a6..13dfacf 100644 --- a/src/helpers/index.js +++ b/src/helpers/index.js @@ -88,10 +88,12 @@ export function sortBy(args) { } export function validatePagingArgs(args) { - if (args.limit && !Number.isInteger(args.limit)) + if (args.limit && !Number.isInteger(parseInt(args.limit)) || + parseInt(args.limit) < 1) return false; - if (args.skip && !Number.isInteger(args.skip)) + if (args.skip && !Number.isInteger(parseInt(args.skip)) || + parseInt(args.skip) < 0) return false; if (args.sortBy) { diff --git a/src/routers/domain.js b/src/routers/domain.js index 018200d..7fed89d 100644 --- a/src/routers/domain.js +++ b/src/routers/domain.js @@ -60,7 +60,7 @@ router.get('/domain/history/:id', auth, [ const domain = await Services.getDomainById(req.params.id); const query = 'oldValue newValue updatedBy date -_id'; - const history = await getHistory(query, domain._id, undefined, req.query); + const history = await getHistory(query, domain._id, domain._id, req.query); await verifyOwnership(req.admin, domain, domain._id, ActionTypes.READ, RouterTypes.DOMAIN); diff --git a/src/services/history.js b/src/services/history.js index 5d20ce1..80b9e82 100644 --- a/src/services/history.js +++ b/src/services/history.js @@ -3,12 +3,10 @@ import { sortBy, validatePagingArgs } from '../helpers'; import { BadRequestError } from '../exceptions'; export async function getHistory(query, domainId, elementId, pagingArgs = {}) { - const findQuery = elementId ? { domainId, elementId } : { domainId }; - if (!validatePagingArgs(pagingArgs)) throw new BadRequestError('Invalid paging args'); - return History.find(findQuery) + return History.find({ domainId, elementId }) .select(query) .sort(sortBy(pagingArgs)) .limit(parseInt(pagingArgs.limit || 10)) diff --git a/tests/services/history.test.js b/tests/services/history.test.js index 45f49e7..6e32922 100644 --- a/tests/services/history.test.js +++ b/tests/services/history.test.js @@ -60,10 +60,30 @@ describe('Testing history services', () => { await expect(call()).rejects.toThrowError('Invalid paging args'); }); + test('HISTORY_SERVICE - Should NOT get history - invalid paging args - limit not number', async () => { + const call = async () => { + await getHistory('elementId', domainId, element1Id, { + limit: 'a' + }); + }; + + await expect(call()).rejects.toThrowError('Invalid paging args'); + }); + test('HISTORY_SERVICE - Should NOT get history - invalid paging args - skip', async () => { const call = async () => { await getHistory('elementId', domainId, element1Id, { - skip: '0' + skip: '-1' + }); + }; + + await expect(call()).rejects.toThrowError('Invalid paging args'); + }); + + test('HISTORY_SERVICE - Should NOT get history - invalid paging args - skip not number', async () => { + const call = async () => { + await getHistory('elementId', domainId, element1Id, { + skip: 'a' }); };