mirror of https://github.com/pelias/api.git
Stephen Hess
8 years ago
3 changed files with 191 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
const url = require('url'); |
||||||
|
|
||||||
|
const _ = require('lodash'); |
||||||
|
|
||||||
|
const ServiceConfiguration = require('pelias-microservice-wrapper').ServiceConfiguration; |
||||||
|
|
||||||
|
class Language extends ServiceConfiguration { |
||||||
|
constructor(o) { |
||||||
|
super('placeholder.language', o); |
||||||
|
} |
||||||
|
|
||||||
|
getParameters(req, res) { |
||||||
|
// find all the values for all keys with names that end with '_id'
|
||||||
|
const ids = _.get(res, 'data', []).reduce((acc, doc) => { |
||||||
|
Array.prototype.push.apply(acc, _.values(_.pickBy(doc.parent, (v, k) => _.endsWith(k, '_id') ) ) ); |
||||||
|
return acc; |
||||||
|
}, []); |
||||||
|
|
||||||
|
return { |
||||||
|
ids: _.uniq(ids) |
||||||
|
}; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
getUrl(req) { |
||||||
|
return url.resolve(this.baseUrl, 'parser/findbyid'); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
module.exports = Language; |
@ -0,0 +1,157 @@ |
|||||||
|
module.exports.tests = {}; |
||||||
|
|
||||||
|
const Language = require('../../../../service/configurations/Language'); |
||||||
|
|
||||||
|
module.exports.tests.all = (test, common) => { |
||||||
|
test('getName should return \'placeholder.language\'', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.equals(language.getName(), 'placeholder.language'); |
||||||
|
t.equals(language.getBaseUrl(), 'http://localhost:1234/'); |
||||||
|
t.equals(language.getTimeout(), 17); |
||||||
|
t.equals(language.getRetries(), 19); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('getUrl should return value passed to constructor', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.equals(language.getUrl(), 'http://localhost:1234/parser/findbyid'); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('getParameters should return object with all deduped ids extracted from res', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
const res = { |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
parent: { |
||||||
|
layer1_name: 'layer1 name', |
||||||
|
layer1_id: 1, |
||||||
|
layer2_name: 'layer2 name', |
||||||
|
layer2_id: 2 |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
// empty parent
|
||||||
|
parent: {} |
||||||
|
}, |
||||||
|
{ |
||||||
|
// no parent
|
||||||
|
}, |
||||||
|
{ |
||||||
|
parent: { |
||||||
|
layer3_name: 'layer3 name', |
||||||
|
layer3_id: 3, |
||||||
|
layer4_name: 'layer4 name', |
||||||
|
// doesn't end with '_id', will be ignored
|
||||||
|
layer4id: 4 |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
parent: { |
||||||
|
layer1_name: 'layer1 name', |
||||||
|
// this is a duplicate id
|
||||||
|
layer1_id: 1, |
||||||
|
layer5_name: 'layer5 name', |
||||||
|
layer5_id: 5 |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
|
||||||
|
t.deepEquals(language.getParameters(undefined, res), { ids: [1, 2, 3, 5] }); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('getParameters should return empty ids array when res is undefined', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.deepEquals(language.getParameters(undefined, undefined), { ids: [] }); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('getParameters should return empty ids array when res.data is undefined', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const res = { }; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.deepEquals(language.getParameters(undefined, res), { ids: [] }); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('getHeaders should return empty object', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'base url', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.deepEquals(language.getHeaders(), {}); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
test('baseUrl ending in / should not have double /\'s return by getUrl', (t) => { |
||||||
|
const configBlob = { |
||||||
|
url: 'http://localhost:1234/', |
||||||
|
timeout: 17, |
||||||
|
retries: 19 |
||||||
|
}; |
||||||
|
|
||||||
|
const language = new Language(configBlob); |
||||||
|
|
||||||
|
t.deepEquals(language.getUrl(), 'http://localhost:1234/parser/findbyid'); |
||||||
|
t.end(); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
module.exports.all = (tape, common) => { |
||||||
|
function test(name, testFunction) { |
||||||
|
return tape(`SERVICE CONFIGURATION /Language ${name}`, testFunction); |
||||||
|
} |
||||||
|
|
||||||
|
for( var testCase in module.exports.tests ){ |
||||||
|
module.exports.tests[testCase](test, common); |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue