|
|
|
const setup = require('../../../middleware/changeLanguage');
|
|
|
|
const proxyquire = require('proxyquire').noCallThru();
|
|
|
|
const _ = require('lodash');
|
|
|
|
|
|
|
|
module.exports.tests = {};
|
|
|
|
|
|
|
|
module.exports.tests.interface = (test, common) => {
|
|
|
|
test('valid interface', t => {
|
|
|
|
t.equal(typeof setup, 'function', 'setup is a function');
|
|
|
|
t.equal(typeof setup(), 'function', 'setup returns a controller');
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.early_exit_conditions = (test, common) => {
|
|
|
|
test('should_execute returning false should not call service', t => {
|
|
|
|
t.plan(2, 'should_execute will assert 2 things');
|
|
|
|
|
|
|
|
const service = () => {
|
|
|
|
t.fail('service should not have been called');
|
|
|
|
};
|
|
|
|
|
|
|
|
const should_execute = (req, res) => {
|
|
|
|
t.deepEquals(req, { a: 1 });
|
|
|
|
t.deepEquals(res, { b: 2 });
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
const controller = setup(service, should_execute);
|
|
|
|
|
|
|
|
controller({ a: 1 }, { b: 2 }, () => { });
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.error_conditions = (test, common) => {
|
|
|
|
test('service error should log and call next', t => {
|
|
|
|
// (2) req/res were passed to service
|
|
|
|
// (1) error was logged
|
|
|
|
// (1) res was not modified
|
|
|
|
t.plan(4);
|
|
|
|
|
|
|
|
const service = (req, res, callback) => {
|
|
|
|
t.deepEquals(req, { a: 1 } );
|
|
|
|
t.deepEquals(res, { b: 2 } );
|
|
|
|
callback('this is an error');
|
|
|
|
};
|
|
|
|
|
|
|
|
const logger = require('pelias-mock-logger')();
|
|
|
|
|
|
|
|
const controller = proxyquire('../../../middleware/changeLanguage', {
|
|
|
|
'pelias-logger': logger
|
|
|
|
})(service, () => true);
|
|
|
|
|
|
|
|
const req = { a: 1 };
|
|
|
|
const res = { b: 2 };
|
|
|
|
|
|
|
|
controller(req, res, () => {
|
|
|
|
t.ok(logger.isErrorMessage('this is an error'));
|
|
|
|
t.deepEquals(res, { b: 2 }, 'res should not have been modified');
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.success_conditions = (test, common) => {
|
|
|
|
test('translations should be mapped in', t => {
|
|
|
|
// (2) req/res were passed to service
|
|
|
|
// (1) error was logged
|
|
|
|
// (1) res was not modified
|
|
|
|
// t.plan(4);
|
|
|
|
|
|
|
|
const service = (req, res, callback) => {
|
|
|
|
const response = {
|
|
|
|
'1': {
|
|
|
|
names: {
|
|
|
|
'requested language': [
|
|
|
|
'replacement name for layer1'
|
|
|
|
],
|
|
|
|
// this should be ignored
|
|
|
|
'another language': [
|
|
|
|
'name in another language'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'2': {
|
|
|
|
names: {
|
|
|
|
'requested language': [
|
|
|
|
'replacement name for layer2',
|
|
|
|
// this should be ignored
|
|
|
|
'another replacement name for layer2'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'3': {
|
|
|
|
names: {
|
|
|
|
'requested language': [
|
|
|
|
'replacement name 1 for layer3'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'4': {
|
|
|
|
names: {
|
|
|
|
'requested language': [
|
|
|
|
'replacement name 2 for layer3'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'10': {
|
|
|
|
// has names but not in the requested language
|
|
|
|
names: {
|
|
|
|
'another language': [
|
|
|
|
'replacement name for layer4'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'11': {
|
|
|
|
// no names
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
callback(null, response);
|
|
|
|
};
|
|
|
|
|
|
|
|
const logger = require('pelias-mock-logger')();
|
|
|
|
|
|
|
|
const controller = proxyquire('../../../middleware/changeLanguage', {
|
|
|
|
'pelias-logger': logger
|
|
|
|
})(service, () => true);
|
|
|
|
|
|
|
|
const req = {
|
|
|
|
clean: {
|
|
|
|
lang: {
|
|
|
|
iso6393: 'requested language'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const res = {
|
|
|
|
data: [
|
|
|
|
// doc with 2 layer names that will be changed
|
|
|
|
{
|
|
|
|
name: {
|
|
|
|
default: 'original name for 1st result'
|
|
|
|
},
|
|
|
|
layer: 'layer1',
|
|
|
|
parent: {
|
|
|
|
layer1_id: ['1'],
|
|
|
|
layer1: ['original name for layer1'],
|
|
|
|
layer2_id: ['2'],
|
|
|
|
layer2: ['original name for layer2']
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// not sure how this would sneak in but check anyway
|
|
|
|
undefined,
|
|
|
|
// doc w/o parent
|
|
|
|
{},
|
|
|
|
// doc with only 1 layer name that will be changed and no default name change
|
|
|
|
{
|
|
|
|
name: {
|
|
|
|
default: 'original name for 2nd result'
|
|
|
|
},
|
|
|
|
layer: 'layer10',
|
|
|
|
parent: {
|
|
|
|
layer3_id: ['3', '4'],
|
|
|
|
layer3: ['original name 1 for layer3', 'original name 2 for layer3'],
|
|
|
|
// requested language not found for this id
|
|
|
|
layer10_id: ['10'],
|
|
|
|
layer10: ['original name for layer10'],
|
|
|
|
// no names for this id
|
|
|
|
layer11_id: ['11'],
|
|
|
|
layer11: ['original name for layer11'],
|
|
|
|
// no translations for this id
|
|
|
|
layer12_id: ['12'],
|
|
|
|
layer12: ['original name for layer12'],
|
|
|
|
// undefined id, will be skipped
|
|
|
|
layer13_id: [undefined],
|
|
|
|
layer13: ['original name for layer13']
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
controller(req, res, () => {
|
|
|
|
t.ok(logger.isDebugMessage('[language] [debug] missing translation requested language 10'));
|
|
|
|
t.ok(logger.isDebugMessage('[language] [debug] missing translation requested language 11'));
|
|
|
|
t.ok(logger.isDebugMessage('[language] [debug] failed to find translations for 12'));
|
|
|
|
|
|
|
|
t.notOk(logger.hasErrorMessages(), 'there shouldn\'t be any error messages');
|
|
|
|
|
|
|
|
t.deepEquals(res, {
|
|
|
|
data: [
|
|
|
|
{
|
|
|
|
name: {
|
|
|
|
default: 'replacement name for layer1'
|
|
|
|
},
|
|
|
|
layer: 'layer1',
|
|
|
|
parent: {
|
|
|
|
layer1_id: ['1'],
|
|
|
|
layer1: ['replacement name for layer1'],
|
|
|
|
layer2_id: ['2'],
|
|
|
|
layer2: ['replacement name for layer2']
|
|
|
|
}
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
{},
|
|
|
|
{
|
|
|
|
name: {
|
|
|
|
default: 'original name for 2nd result'
|
|
|
|
},
|
|
|
|
layer: 'layer10',
|
|
|
|
parent: {
|
|
|
|
layer3_id: ['3', '4'],
|
|
|
|
layer3: ['replacement name 1 for layer3', 'replacement name 2 for layer3'],
|
|
|
|
layer10_id: ['10'],
|
|
|
|
layer10: ['original name for layer10'],
|
|
|
|
layer11_id: ['11'],
|
|
|
|
layer11: ['original name for layer11'],
|
|
|
|
layer12_id: ['12'],
|
|
|
|
layer12: ['original name for layer12'],
|
|
|
|
layer13_id: [undefined],
|
|
|
|
layer13: ['original name for layer13']
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
});
|
|
|
|
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.all = (tape, common) => {
|
|
|
|
|
|
|
|
function test(name, testFunction) {
|
|
|
|
return tape(`GET /changeLanguage ${name}`, testFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
for( const testCase in module.exports.tests ){
|
|
|
|
module.exports.tests[testCase](test, common);
|
|
|
|
}
|
|
|
|
};
|