const proxyquire = require('proxyquire').noCallThru(); module.exports.tests = {}; module.exports.tests.interface = (test, common) => { test('valid interface', (t) => { var service = proxyquire('../../../service/mget', { 'pelias-logger': { get: (section) => { t.equal(section, 'api'); } } }); t.equal(typeof service, 'function', 'service is a function'); t.end(); }); }; module.exports.tests.error_conditions = (test, common) => { test('esclient.mget returning error should log and pass it on', (t) => { const errorMessages = []; const service = proxyquire('../../../service/mget', { 'pelias-logger': { get: () => { return { error: (msg) => { errorMessages.push(msg); } }; } } }); const expectedCmd = { body: { docs: 'this is the query' } }; const esclient = { mget: (cmd, callback) => { t.deepEquals(cmd, expectedCmd); const err = 'this is an error'; const data = { docs: [ { found: true, _id: 'doc id', _type: 'doc type', _source: {} } ] }; callback('this is an error', data); } }; const next = (err, docs) => { t.equals(err, 'this is an error', 'err should have been passed on'); t.equals(docs, undefined); t.ok(errorMessages.find((msg) => { return msg === `elasticsearch error ${err}`; })); t.end(); }; service(esclient, 'this is the query', next); }); }; module.exports.tests.success_conditions = (test, common) => { test('esclient.mget returning data.docs should filter and map', (t) => { const errorMessages = []; const service = proxyquire('../../../service/mget', { 'pelias-logger': { get: () => { return { error: (msg) => { errorMessages.push(msg); } }; } } }); const expectedCmd = { body: { docs: 'this is the query' } }; const esclient = { mget: (cmd, callback) => { t.deepEquals(cmd, expectedCmd); const data = { docs: [ { found: true, _id: 'doc id 1', _type: 'doc type 1', _source: { random_key: 'value 1' } }, { found: false, _id: 'doc id 2', _type: 'doc type 2', _source: {} }, { found: true, _id: 'doc id 3', _type: 'doc type 3', _source: { random_key: 'value 3' } } ] }; callback(undefined, data); } }; const expectedDocs = [ { _id: 'doc id 1', _type: 'doc type 1', random_key: 'value 1' }, { _id: 'doc id 3', _type: 'doc type 3', random_key: 'value 3' } ]; const next = (err, docs) => { t.equals(err, null); t.deepEquals(docs, expectedDocs); t.equals(errorMessages.length, 0, 'no errors should have been logged'); t.end(); }; service(esclient, 'this is the query', next); }); test('esclient.mget callback with falsy data should return empty array', (t) => { const errorMessages = []; const service = proxyquire('../../../service/mget', { 'pelias-logger': { get: () => { return { error: (msg) => { errorMessages.push(msg); } }; } } }); const expectedCmd = { body: { docs: 'this is the query' } }; const esclient = { mget: (cmd, callback) => { t.deepEquals(cmd, expectedCmd); callback(undefined, undefined); } }; const expectedDocs = []; const next = (err, docs) => { t.equals(err, null); t.deepEquals(docs, expectedDocs); t.equals(errorMessages.length, 0, 'no errors should have been logged'); t.end(); }; service(esclient, 'this is the query', next); }); test('esclient.mget callback with non-array data.docs should return empty array', (t) => { const errorMessages = []; const service = proxyquire('../../../service/mget', { 'pelias-logger': { get: () => { return { error: (msg) => { errorMessages.push(msg); } }; } } }); const expectedCmd = { body: { docs: 'this is the query' } }; const esclient = { mget: (cmd, callback) => { t.deepEquals(cmd, expectedCmd); const data = { docs: 'this isn\'t an array' }; callback(undefined, data); } }; const expectedDocs = []; const next = (err, docs) => { t.equals(err, null); t.deepEquals(docs, expectedDocs); t.equals(errorMessages.length, 0, 'no errors should have been logged'); t.end(); }; service(esclient, 'this is the query', next); }); }; module.exports.all = (tape, common) => { function test(name, testFunction) { return tape('SERVICE /mget ' + name, testFunction); } for( var testCase in module.exports.tests ){ module.exports.tests[testCase](test, common); } };