Browse Source

adding tests for the doc controller

pull/39/head
Harish Krishna 10 years ago
parent
commit
be39fb5a8f
  1. 93
      test/unit/controller/doc.js
  2. 27
      test/unit/mock/backend.js
  3. 1
      test/unit/run.js

93
test/unit/controller/doc.js

@ -0,0 +1,93 @@
var setup = require('../../../controller/doc'),
mockBackend = require('../mock/backend'),
mockQuery = require('../mock/query');
module.exports.tests = {};
module.exports.tests.interface = function(test, common) {
test('valid interface', function(t) {
t.equal(typeof setup, 'function', 'setup is a function');
t.equal(typeof setup(), 'function', 'setup returns a controller');
t.end();
});
};
// functionally test controller (backend success)
module.exports.tests.functional_success = function(test, common) {
// expected geojson features for 'client/doc/ok/1' fixture
var expected = [{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [ -50.5, 100.1 ]
},
properties: {
name: 'test name1',
admin0: 'country1',
admin1: 'state1',
admin2: 'city1'
}
}, {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [ -51.5, 100.2 ]
},
properties: {
name: 'test name2',
admin0: 'country2',
admin1: 'state2',
admin2: 'city2'
}
}];
test('functional success', function(t) {
var backend = mockBackend( 'client/doc/ok/1', function( cmd ){
t.deepEqual(cmd, { body: { docs: [ { _id: 123, _index: 'pelias', _type: 'a' } ] } }, 'correct backend command');
});
var controller = setup( backend, mockQuery() );
var res = {
status: function( code ){
t.equal(code, 200, 'status set');
return res;
},
json: function( json ){
t.equal(typeof json, 'object', 'returns json');
t.equal(typeof json.date, 'number', 'date set');
t.equal(json.type, 'FeatureCollection', 'valid geojson');
t.true(Array.isArray(json.features), 'features is array');
t.deepEqual(json.features, expected, 'values correctly mapped');
t.end();
}
};
controller( { clean: { ids: [ {'id' : 123, 'type': 'a' } ] } }, res );
});
};
// functionally test controller (backend failure)
module.exports.tests.functional_failure = function(test, common) {
test('functional failure', function(t) {
var backend = mockBackend( 'client/doc/fail/1', function( cmd ){
t.deepEqual(cmd, { body: { docs: [ { _id: 123, _index: 'pelias', _type: 'b' } ] } }, 'correct backend command');
});
var controller = setup( backend, mockQuery() );
var next = function( message ){
t.equal(message,'a backend error occurred','error passed to errorHandler');
t.end();
};
controller( { clean: { ids: [ {'id' : 123, 'type': 'b' } ] } }, undefined, next );
});
};
module.exports.all = function (tape, common) {
function test(name, testFunction) {
return tape('GET /doc ' + name, testFunction);
}
for( var testCase in module.exports.tests ){
module.exports.tests[testCase](test, common);
}
};

27
test/unit/mock/backend.js

@ -32,10 +32,33 @@ responses['client/search/fail/1'] = function( cmd, cb ){
return cb( 'a backend error occurred' ); return cb( 'a backend error occurred' );
}; };
responses['client/doc/ok/1'] = function( cmd, cb ){
return cb( undefined, docEnvelope([{
_source: {
value: 1,
center_point: { lat: 100.1, lon: -50.5 },
name: { default: 'test name1' },
admin0: 'country1', admin1: 'state1', admin2: 'city1'
}
}, {
_source: {
value: 2,
center_point: { lat: 100.2, lon: -51.5 },
name: { default: 'test name2' },
admin0: 'country2', admin1: 'state2', admin2: 'city2'
}
}]));
};
responses['client/doc/fail/1'] = responses['client/search/fail/1'];
function setup( key, cmdCb ){ function setup( key, cmdCb ){
function backend( a, b ){ function backend( a, b ){
return { return {
client: { client: {
mget: function( cmd, cb ){
if( 'function' === typeof cmdCb ){ cmdCb( cmd ); }
return responses[key].apply( this, arguments );
},
suggest: function( cmd, cb ){ suggest: function( cmd, cb ){
if( 'function' === typeof cmdCb ){ cmdCb( cmd ); } if( 'function' === typeof cmdCb ){ cmdCb( cmd ); }
return responses[key].apply( this, arguments ); return responses[key].apply( this, arguments );
@ -50,6 +73,10 @@ function setup( key, cmdCb ){
return backend; return backend;
} }
function docEnvelope( options ){
return { docs: options };
}
function suggestEnvelope( options ){ function suggestEnvelope( options ){
return { pelias: [{ options: options }]}; return { pelias: [{ options: options }]};
} }

1
test/unit/run.js

@ -4,6 +4,7 @@ var common = {};
var tests = [ var tests = [
require('./controller/index'), require('./controller/index'),
require('./controller/doc'),
require('./controller/suggest'), require('./controller/suggest'),
require('./controller/search'), require('./controller/search'),
require('./sanitiser/suggest'), require('./sanitiser/suggest'),

Loading…
Cancel
Save