|
|
|
const _ = require('lodash');
|
|
|
|
|
|
|
|
const sanitizer = require('../../../sanitizer/_geonames_warnings')();
|
|
|
|
|
|
|
|
const nonAdminProperties = ['number', 'street', 'query', 'category'];
|
|
|
|
const adminProperties = ['neighbourhood', 'borough', 'city', 'county', 'state', 'postalcode', 'country'];
|
|
|
|
|
|
|
|
module.exports.tests = {};
|
|
|
|
|
|
|
|
module.exports.tests.no_errors = (test, common) => {
|
|
|
|
test('undefined clean.parsed_text should exit early', (t) => {
|
|
|
|
const clean = {
|
|
|
|
sources: ['geonames'],
|
|
|
|
};
|
|
|
|
|
|
|
|
const messages = sanitizer.sanitize(undefined, clean);
|
|
|
|
|
|
|
|
t.deepEquals(messages, { errors: [], warnings: [] });
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
test('any non-admin analysis field with only geonames sources should exit early', (t) => {
|
|
|
|
adminProperties.forEach((adminProperty) => {
|
|
|
|
nonAdminProperties.forEach((nonAdminProperty) => {
|
|
|
|
const clean = {
|
|
|
|
sources: ['geonames'],
|
|
|
|
parsed_text: {}
|
|
|
|
};
|
|
|
|
clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`;
|
|
|
|
clean.parsed_text[adminProperty] = `${adminProperty} value`;
|
|
|
|
|
|
|
|
const messages = sanitizer.sanitize(undefined, clean);
|
|
|
|
|
|
|
|
t.deepEquals(messages, { errors: [], warnings: [] });
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
test('any non-admin analysis field with non-geonames sources should exit early', (t) => {
|
|
|
|
adminProperties.forEach((adminProperty) => {
|
|
|
|
nonAdminProperties.forEach((nonAdminProperty) => {
|
|
|
|
const clean = {
|
|
|
|
sources: ['this is not geonames'],
|
|
|
|
parsed_text: {}
|
|
|
|
};
|
|
|
|
clean.parsed_text[nonAdminProperty] = `${nonAdminProperty} value`;
|
|
|
|
clean.parsed_text[adminProperty] = `${adminProperty} value`;
|
|
|
|
|
|
|
|
const messages = sanitizer.sanitize(undefined, clean);
|
|
|
|
|
|
|
|
t.deepEquals(messages, { errors: [], warnings: [] });
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.error_conditions = (test, common) => {
|
|
|
|
test('any admin analysis field and only geonames sources should return error', (t) => {
|
|
|
|
adminProperties.forEach((property) => {
|
|
|
|
const clean = _.set({ sources: ['geonames'] },
|
|
|
|
['parsed_text', property], `${property} value`);
|
|
|
|
|
|
|
|
const messages = sanitizer.sanitize(undefined, clean);
|
|
|
|
|
|
|
|
t.deepEquals(messages.errors, ['input contains only administrative area data, ' +
|
|
|
|
'no results will be returned when sources=geonames']);
|
|
|
|
t.deepEquals(messages.warnings, []);
|
|
|
|
|
|
|
|
});
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.tests.warning_conditions = (test, common) => {
|
|
|
|
test('any admin analysis field and only geonames sources should return warning', (t) => {
|
|
|
|
adminProperties.forEach((property) => {
|
|
|
|
const clean = _.set({ sources: ['source 1', 'geonames', 'source 2'] },
|
|
|
|
['parsed_text', property], `${property} value`);
|
|
|
|
|
|
|
|
const messages = sanitizer.sanitize(undefined, clean);
|
|
|
|
|
|
|
|
t.deepEquals(messages.errors, []);
|
|
|
|
t.deepEquals(messages.warnings, ['input contains only administrative area data, ' +
|
|
|
|
'geonames results will not be returned']);
|
|
|
|
|
|
|
|
});
|
|
|
|
t.end();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.all = (tape, common) => {
|
|
|
|
function test(name, testFunction) {
|
|
|
|
return tape(`SANTIZE _geonames_warnings ${name}`, testFunction);
|
|
|
|
}
|
|
|
|
|
|
|
|
for( var testCase in module.exports.tests ){
|
|
|
|
module.exports.tests[testCase](test, common);
|
|
|
|
}
|
|
|
|
};
|