|
|
|
const _ = require('lodash');
|
|
|
|
const proxyquire = require('proxyquire').noCallThru();
|
|
|
|
const mock_logger = require('pelias-mock-logger');
|
|
|
|
|
|
|
|
const sortResponseData = require('../../../middleware/sortResponseData');
|
|
|
|
|
|
|
|
module.exports.tests = {};
|
|
|
|
|
|
|
|
module.exports.tests.should_execute_failure = (test, common) => {
|
|
|
|
test('should_execute returning false should call next w/o invoking comparator', (t) => {
|
|
|
|
t.plan(2, 'this ensures that should_execute was invoked');
|
|
|
|
|
|
|
|
const comparator = () => {
|
|
|
|
throw Error('should not have been called');
|
|
|
|
};
|
|
|
|
|
|
|
|
const should_execute = (req, res) => {
|
|
|
|
t.deepEquals(req, { a: 1 });
|
|
|
|
t.deepEquals(res, { b: 2 });
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
const sort = sortResponseData(comparator, should_execute);
|
|
|
|
|
|
|
|
const req = { a: 1 };
|
|
|
|
const res = { b: 2 };
|
|
|
|
|
|
|
|
sort(req, res, () => {
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.general_tests = (test, common) => {
|
|
|
|
test('req.clean should be passed to sort', (t) => {
|
|
|
|
t.plan(1, 'this ensures that comparator was invoked');
|
|
|
|
|
|
|
|
const comparator = (clean) => {
|
|
|
|
t.deepEquals(clean, { a: 1 });
|
|
|
|
return () => {
|
|
|
|
throw Error('should not have been called');
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const sort = sortResponseData(comparator, _.constant(true));
|
|
|
|
|
|
|
|
const req = {
|
|
|
|
clean: {
|
|
|
|
a: 1
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const res = {
|
|
|
|
data: [ {} ]
|
|
|
|
};
|
|
|
|
|
|
|
|
sort(req, res, () => {
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
test('undefined res.data should return without interacting with comparator', (t) => {
|
|
|
|
const comparator = () => {
|
|
|
|
throw Error('should not have been called');
|
|
|
|
};
|
|
|
|
|
|
|
|
const sort = sortResponseData(comparator, _.constant(true));
|
|
|
|
|
|
|
|
const req = {};
|
|
|
|
const res = {};
|
|
|
|
|
|
|
|
sort(req, res, () => {
|
|
|
|
t.deepEquals(res, {});
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
test('empty res.data should return without interacting with comparator', (t) => {
|
|
|
|
const comparator = () => {
|
|
|
|
throw Error('should not have been called');
|
|
|
|
};
|
|
|
|
|
|
|
|
const sort = sortResponseData(comparator, _.constant(true));
|
|
|
|
|
|
|
|
const req = {};
|
|
|
|
const res = {
|
|
|
|
data: []
|
|
|
|
};
|
|
|
|
|
|
|
|
sort(req, res, () => {
|
|
|
|
t.deepEquals(res.data, [], 'res.data should still be empty');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.successful_sort = (test, common) => {
|
|
|
|
test('comparator should be sort res.data', (t) => {
|
|
|
|
const logger = mock_logger();
|
|
|
|
|
|
|
|
const comparator = () => {
|
|
|
|
return (a, b) => {
|
|
|
|
return a._id > b._id;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const sortResponseData = proxyquire('../../../middleware/sortResponseData', {
|
|
|
|
'pelias-logger': logger
|
|
|
|
});
|
|
|
|
|
|
|
|
const sort = sortResponseData(comparator, _.constant(true));
|
|
|
|
|
|
|
|
const req = {
|
|
|
|
clean: {
|
|
|
|
field: 'value'
|
|
|
|
}
|
|
|
|
};
|
|
|
|
const res = {
|
|
|
|
data: [
|
|
|
|
{ _id: 3 },
|
|
|
|
{ _id: 2 },
|
|
|
|
{ _id: 1 },
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
sort(req, res, () => {
|
|
|
|
t.deepEquals(res.data.shift(), { _id: 1 });
|
|
|
|
t.deepEquals(res.data.shift(), { _id: 2 });
|
|
|
|
t.deepEquals(res.data.shift(), { _id: 3 });
|
|
|
|
|
|
|
|
t.ok(logger.isDebugMessage(
|
|
|
|
'req.clean: {"field":"value"}, pre-sort: [3,2,1], post-sort: [1,2,3]'));
|
|
|
|
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.all = (tape, common) => {
|
|
|
|
|
|
|
|
function test(name, testFunction) {
|
|
|
|
return tape(`[middleware] sortResponseData: ${name}`, testFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
for( var testCase in module.exports.tests ){
|
|
|
|
module.exports.tests[testCase](test, common);
|
|
|
|
}
|
|
|
|
};
|