mirror of https://github.com/pelias/api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
7.5 KiB
321 lines
7.5 KiB
var middleware = require('../../../middleware/requestLanguage'); |
|
module.exports.tests = {}; |
|
|
|
var DEFAULTS = { |
|
defaulted: true, |
|
iso6391: 'en', |
|
iso6392B: 'eng', |
|
iso6392T: 'eng', |
|
iso6393: 'eng', |
|
name: 'English', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
module.exports.tests.defaults = function(test, common) { |
|
test('default language', function(t) { |
|
|
|
var req = {}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, DEFAULTS, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
test('both querystring & header invalid', function(t) { |
|
|
|
var req = { |
|
headers: { 'accept-language': 'foobar' }, |
|
query: { 'lang': 'foobar' } |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, DEFAULTS, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, [ |
|
'invalid language provided via querystring', |
|
'invalid language provided via header' |
|
]); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.tests.invalid = function(test, common) { |
|
test('headers: invalid language', function(t) { |
|
|
|
var req = { headers: { |
|
'accept-language': 'invalid language' |
|
}}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, DEFAULTS, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, [ |
|
'invalid language provided via header' |
|
]); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
test('query: invalid language', function(t) { |
|
|
|
var req = { query: { |
|
lang: 'invalid language' |
|
}}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, DEFAULTS, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, [ |
|
'invalid language provided via querystring' |
|
]); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.tests.valid = function(test, common) { |
|
test('headers: valid language - french', function(t) { |
|
|
|
var req = { headers: { |
|
'accept-language': 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5' |
|
}}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'fr', |
|
iso6392B: 'fre', |
|
iso6392T: 'fra', |
|
iso6393: 'fra', |
|
name: 'French', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
test('query: valid language - french', function(t) { |
|
|
|
var req = { query: { |
|
lang: 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5' |
|
}}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'fr', |
|
iso6392B: 'fre', |
|
iso6392T: 'fra', |
|
iso6393: 'fra', |
|
name: 'French', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
|
|
test('headers: valid language - english', function(t) { |
|
|
|
var req = { headers: { |
|
'accept-language': 'en' |
|
}}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'en', |
|
iso6392B: 'eng', |
|
iso6392T: 'eng', |
|
iso6393: 'eng', |
|
name: 'English', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
test('query: valid language - english', function(t) { |
|
|
|
var req = { query: { |
|
lang: 'en' |
|
}}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'en', |
|
iso6392B: 'eng', |
|
iso6392T: 'eng', |
|
iso6393: 'eng', |
|
name: 'English', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.tests.precedence = function(test, common) { |
|
test('precedence: query has precedence over headers', function(t) { |
|
|
|
var req = { |
|
headers: { 'accept-language': 'fr' }, |
|
query: { 'lang': 'es' } |
|
}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'es', |
|
iso6392B: 'spa', |
|
iso6392T: 'spa', |
|
iso6393: 'spa', |
|
name: 'Spanish', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, []); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
test('precedence: invalid querystring but valid header', function(t) { |
|
|
|
var req = { |
|
headers: { 'accept-language': 'fr' }, |
|
query: { 'lang': 'foobar' } |
|
}; |
|
|
|
var expected = { |
|
defaulted: false, |
|
iso6391: 'fr', |
|
iso6392B: 'fre', |
|
iso6392T: 'fra', |
|
iso6393: 'fra', |
|
name: 'French', |
|
scope: 'individual', |
|
type: 'living' |
|
}; |
|
|
|
middleware(req, {}, function () { |
|
t.deepEqual( req.language, expected, '$req.language set' ); |
|
|
|
t.deepEqual( req.clean.lang, { |
|
defaulted: req.language.defaulted, |
|
iso6391: req.language.iso6391, |
|
iso6393: req.language.iso6393, |
|
name: req.language.name |
|
}, '$req.clean.lang set' ); |
|
|
|
t.deepEqual( req.warnings, [ |
|
'invalid language provided via querystring' |
|
]); |
|
|
|
t.end(); |
|
}); |
|
}); |
|
}; |
|
|
|
module.exports.all = function (tape, common) { |
|
function test(name, testFunction) { |
|
return tape('[middleware] requestLanguage: ' + name, testFunction); |
|
} |
|
for( var testCase in module.exports.tests ){ |
|
module.exports.tests[testCase](test, common); |
|
} |
|
};
|
|
|