|
|
|
|
|
var fs = require('fs'), |
|
|
tmp = require('tmp'), |
|
|
setup = require('../../../middleware/changeLanguage'); |
|
|
const proxyquire = require('proxyquire').noCallThru(); |
|
|
|
|
|
// load middleware using the default pelias config |
|
|
var load = function(){ |
|
|
// adapter is driven by config |
|
|
var tmpfile = tmp.tmpNameSync({ postfix: '.json' }); |
|
|
fs.writeFileSync( tmpfile, '{}', { encoding: 'utf8' } ); |
|
|
process.env.PELIAS_CONFIG = tmpfile; |
|
|
var middleware = setup(); |
|
|
delete process.env.PELIAS_CONFIG; |
|
|
return middleware; |
|
|
}; |
|
|
|
|
|
module.exports.tests = {}; |
|
|
|
|
|
module.exports.tests.interface = function(test, common) { |
|
|
test('valid interface', function(t) { |
|
|
var middleware = load(); |
|
|
t.equal(typeof middleware, 'function', 'middleware is a function'); |
|
|
t.equal(middleware.length, 3, 'middleware is a function'); |
|
|
t.end(); |
|
|
}); |
|
|
}; |
|
|
|
|
|
module.exports.tests.isLanguageChangeRequired = function(test, common) { |
|
|
test('invalid query - null req/res', function(t) { |
|
|
var middleware = load(); |
|
|
middleware(null, null, t.end); |
|
|
}); |
|
|
|
|
|
test('invalid query - no results', function(t) { |
|
|
var req = { language: { iso6393: 'spa' } }; |
|
|
var res = {}; |
|
|
|
|
|
var middleware = load(); |
|
|
middleware(req, res, function(){ |
|
|
t.deepEqual( req, { language: { iso6393: 'spa' } } ); |
|
|
t.deepEqual( res, {} ); |
|
|
t.end(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
test('invalid query - empty results', function(t) { |
|
|
var req = { language: { iso6393: 'spa' } }; |
|
|
var res = { data: [] }; |
|
|
|
|
|
var middleware = load(); |
|
|
middleware(req, res, function(){ |
|
|
t.deepEqual( req, { language: { iso6393: 'spa' } } ); |
|
|
t.deepEqual( res, { data: [] } ); |
|
|
t.end(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
test('invalid query - no target language', function(t) { |
|
|
var req = {}; |
|
|
var res = { data: [] }; |
|
|
|
|
|
var middleware = load(); |
|
|
middleware(req, res, function(){ |
|
|
t.deepEqual( req, {} ); |
|
|
t.deepEqual( res, { data: [] } ); |
|
|
t.end(); |
|
|
}); |
|
|
}); |
|
|
}; |
|
|
|
|
|
// check the service is called and response mapped correctly |
|
|
module.exports.tests.miss = function(test, common) { |
|
|
test('miss', function(t) { |
|
|
|
|
|
var req = { language: { iso6393: 'spa' } }; |
|
|
var res = { data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101750367 ], |
|
|
locality: [ 'London' ] |
|
|
} |
|
|
}, |
|
|
{ |
|
|
layer: 'example', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101735809 ], |
|
|
locaity: [ 'London' ] |
|
|
} |
|
|
} |
|
|
]}; |
|
|
|
|
|
var middleware = load(); |
|
|
|
|
|
// mock out the transport |
|
|
middleware.transport.query = function mock( ids, cb ){ |
|
|
t.deepEqual( ids, [ '101735809', '101750367' ] ); |
|
|
t.equal( typeof cb, 'function' ); |
|
|
cb( 'error' ); |
|
|
}; |
|
|
|
|
|
middleware(req, res, function(){ |
|
|
t.deepEqual( res, { data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101750367 ], |
|
|
locality: [ 'London' ] |
|
|
} |
|
|
}, |
|
|
{ |
|
|
layer: 'example', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101735809 ], |
|
|
locaity: [ 'London' ] |
|
|
} |
|
|
} |
|
|
]}); |
|
|
t.end(); |
|
|
}); |
|
|
}); |
|
|
}; |
|
|
|
|
|
// check the service is called and response mapped correctly |
|
|
module.exports.tests.hit = function(test, common) { |
|
|
test('hit', function(t) { |
|
|
|
|
|
var req = { language: { iso6393: 'spa' } }; |
|
|
var res = { data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101750367 ], |
|
|
locality: [ 'London' ] |
|
|
} |
|
|
}, |
|
|
{ |
|
|
layer: 'example', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101735809 ], |
|
|
locality: [ 'London' ] |
|
|
} |
|
|
} |
|
|
]}; |
|
|
|
|
|
var middleware = load(); |
|
|
|
|
|
// mock out the transport |
|
|
middleware.transport.query = function mock( ids, cb ){ |
|
|
t.deepEqual( ids, [ '101735809', '101750367' ] ); |
|
|
t.equal( typeof cb, 'function' ); |
|
|
cb( null, { |
|
|
'101750367': { |
|
|
'names': { |
|
|
'default':['London'], |
|
|
'chi':['倫敦'], |
|
|
'spa':['Londres'], |
|
|
'eng':['London'], |
|
|
'hin':['लंदन'], |
|
|
'ara':['لندن'], |
|
|
'por':['Londres'], |
|
|
'ben':['লন্ডন'], |
|
|
'rus':['Лондон'], |
|
|
'jpn':['ロンドン'], |
|
|
'kor':['런던'] |
|
|
} |
|
|
}, |
|
|
'101735809': { |
|
|
'names':{ |
|
|
'default':['London'], |
|
|
'eng':['London'] |
|
|
} |
|
|
} |
|
|
}); |
|
|
}; |
|
|
|
|
|
middleware(req, res, function(){ |
|
|
t.deepEqual( res, { data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { default: 'Londres' }, |
|
|
parent: { |
|
|
locality_id: [ 101750367 ], |
|
|
locality: [ 'Londres' ] |
|
|
} |
|
|
}, |
|
|
{ |
|
|
layer: 'example', |
|
|
name: { default: 'London' }, |
|
|
parent: { |
|
|
locality_id: [ 101735809 ], |
|
|
locality: [ 'London' ] |
|
|
} |
|
|
} |
|
|
]}); |
|
|
t.end(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
test('empty array name translation should not change the value', t => { |
|
|
t.plan(2); |
|
|
|
|
|
const req = { language: { iso6393: 'ISO3 value' } }; |
|
|
const res = { |
|
|
data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { default: 'original name' }, |
|
|
parent: { |
|
|
locality_id: [ 123 ], |
|
|
locality: [ 'original name' ] |
|
|
} |
|
|
} |
|
|
] |
|
|
}; |
|
|
|
|
|
const changeLanguage = proxyquire('../../../middleware/changeLanguage', { |
|
|
'../service/language': { |
|
|
findById: () => ({ |
|
|
query: (ids, callback) => { |
|
|
t.deepEquals(ids, ['123']); |
|
|
callback(null, { |
|
|
'123': { |
|
|
'names': { |
|
|
'ISO3 value':[] |
|
|
} |
|
|
} |
|
|
}); |
|
|
} |
|
|
}) |
|
|
} |
|
|
})(); |
|
|
|
|
|
changeLanguage(req, res, () => { |
|
|
t.deepEqual( res, { data: [ |
|
|
{ |
|
|
layer: 'locality', |
|
|
name: { |
|
|
default: 'original name' |
|
|
}, |
|
|
parent: { |
|
|
locality_id: [ 123 ], |
|
|
locality: [ 'original name' ] |
|
|
} |
|
|
} |
|
|
]}); |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}; |
|
|
|
|
|
module.exports.all = function (tape, common) { |
|
|
|
|
|
function test(name, testFunction) { |
|
|
return tape('[middleware] changeLanguage: ' + name, testFunction); |
|
|
} |
|
|
|
|
|
for( var testCase in module.exports.tests ){ |
|
|
module.exports.tests[testCase](test, common); |
|
|
} |
|
|
};
|
|
|
|