|
|
@ -1,13 +1,18 @@ |
|
|
|
const sanitizer = require('../../../sanitizer/_synthesize_analysis'); |
|
|
|
|
|
|
|
const _ = require('lodash'); |
|
|
|
const _ = require('lodash'); |
|
|
|
|
|
|
|
const proxyquire = require('proxyquire').noCallThru(); |
|
|
|
|
|
|
|
|
|
|
|
module.exports.tests = {}; |
|
|
|
module.exports.tests = {}; |
|
|
|
|
|
|
|
|
|
|
|
module.exports.tests.text_parser = function(test, common) { |
|
|
|
module.exports.tests.text_parser = function(test, common) { |
|
|
|
test('all variables should be parsed', function(t) { |
|
|
|
test('all variables should be parsed', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.fail('parse should not have been called'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
const raw = { |
|
|
|
const raw = { |
|
|
|
query: ' \t query \t value \t ', |
|
|
|
query: ' \t query \t value \t ', |
|
|
|
address: ' \t address \t value \t ', |
|
|
|
|
|
|
|
neighbourhood: ' \t neighbourhood \t value \t ', |
|
|
|
neighbourhood: ' \t neighbourhood \t value \t ', |
|
|
|
borough: ' \t borough \t value \t ', |
|
|
|
borough: ' \t borough \t value \t ', |
|
|
|
locality: ' \t locality \t value \t ', |
|
|
|
locality: ' \t locality \t value \t ', |
|
|
@ -21,7 +26,6 @@ module.exports.tests.text_parser = function(test, common) { |
|
|
|
|
|
|
|
|
|
|
|
const expected_clean = { |
|
|
|
const expected_clean = { |
|
|
|
parsed_text: { |
|
|
|
parsed_text: { |
|
|
|
address: 'address value', |
|
|
|
|
|
|
|
neighbourhood: 'neighbourhood value', |
|
|
|
neighbourhood: 'neighbourhood value', |
|
|
|
borough: 'borough value', |
|
|
|
borough: 'borough value', |
|
|
|
city: 'locality value', |
|
|
|
city: 'locality value', |
|
|
@ -42,6 +46,12 @@ module.exports.tests.text_parser = function(test, common) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
test('non-string and blank string values should be treated as not supplied', function(t) { |
|
|
|
test('non-string and blank string values should be treated as not supplied', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.fail('parse should not have been called'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
// helper to return a random value that's considered invalid
|
|
|
|
// helper to return a random value that's considered invalid
|
|
|
|
function getInvalidValue() { |
|
|
|
function getInvalidValue() { |
|
|
|
return _.sample([{}, [], false, '', ' \t ', 17, undefined]); |
|
|
|
return _.sample([{}, [], false, '', ' \t ', 17, undefined]); |
|
|
@ -75,6 +85,12 @@ module.exports.tests.text_parser = function(test, common) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
test('no supplied fields should return error', function(t) { |
|
|
|
test('no supplied fields should return error', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.fail('parse should not have been called'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
const raw = {}; |
|
|
|
const raw = {}; |
|
|
|
|
|
|
|
|
|
|
|
const clean = {}; |
|
|
|
const clean = {}; |
|
|
@ -92,6 +108,12 @@ module.exports.tests.text_parser = function(test, common) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
test('postalcode-only parsed_text should return error', function(t) { |
|
|
|
test('postalcode-only parsed_text should return error', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.fail('parse should not have been called'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
const raw = { |
|
|
|
const raw = { |
|
|
|
postalcode: 'postalcode value' |
|
|
|
postalcode: 'postalcode value' |
|
|
|
}; |
|
|
|
}; |
|
|
@ -113,6 +135,102 @@ module.exports.tests.text_parser = function(test, common) { |
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test('text_analyzer identifying house number should extract it and street', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.equals(query, 'Number Value Street Value Number Value'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
number: 'Number Value' |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const raw = { |
|
|
|
|
|
|
|
address: 'Number Value Street Value Number Value' |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const clean = {}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const expected_clean = { |
|
|
|
|
|
|
|
parsed_text: { |
|
|
|
|
|
|
|
number: 'Number Value', |
|
|
|
|
|
|
|
street: 'Street Value Number Value' |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const messages = sanitizer(raw, clean); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t.deepEquals(clean, expected_clean); |
|
|
|
|
|
|
|
t.deepEquals(messages.errors, [], 'no errors'); |
|
|
|
|
|
|
|
t.deepEquals(messages.warnings, [], 'no warnings'); |
|
|
|
|
|
|
|
t.end(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test('text_analyzer identifying postalcode but not house number should assign to number and remove from address', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.equals(query, 'Number Value Street Value Number Value'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
postalcode: 'Number Value' |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const raw = { |
|
|
|
|
|
|
|
address: 'Number Value Street Value Number Value' |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const clean = {}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const expected_clean = { |
|
|
|
|
|
|
|
parsed_text: { |
|
|
|
|
|
|
|
number: 'Number Value', |
|
|
|
|
|
|
|
street: 'Street Value Number Value' |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const messages = sanitizer(raw, clean); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t.deepEquals(clean, expected_clean); |
|
|
|
|
|
|
|
t.deepEquals(messages.errors, [], 'no errors'); |
|
|
|
|
|
|
|
t.deepEquals(messages.warnings, [], 'no warnings'); |
|
|
|
|
|
|
|
t.end(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test('text_analyzer not revealing possible number should move address to street', function(t) { |
|
|
|
|
|
|
|
var sanitizer = proxyquire('../../../sanitizer/_synthesize_analysis', { |
|
|
|
|
|
|
|
'pelias-text-analyzer': { parse: function(query) { |
|
|
|
|
|
|
|
t.equals(query, 'Street Value'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const raw = { |
|
|
|
|
|
|
|
address: 'Street Value' |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const clean = {}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const expected_clean = { |
|
|
|
|
|
|
|
parsed_text: { |
|
|
|
|
|
|
|
street: 'Street Value' |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const messages = sanitizer(raw, clean); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t.deepEquals(clean, expected_clean); |
|
|
|
|
|
|
|
t.deepEquals(messages.errors, [], 'no errors'); |
|
|
|
|
|
|
|
t.deepEquals(messages.warnings, [], 'no warnings'); |
|
|
|
|
|
|
|
t.end(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
module.exports.all = function (tape, common) { |
|
|
|
module.exports.all = function (tape, common) { |
|
|
|