UNPKG

pelias-openaddresses

Version:

Pelias import pipeline for OpenAddresses.

65 lines (55 loc) 2.41 kB
const _ = require('lodash'); const path = require('path'); const tape = require('tape'); const map = require('through2-map'); const proxyquire = require('proxyquire'); const stream_mock = require('stream-mock'); const expectedPath = path.join(__dirname, 'data/expected.json'); const expected = require(expectedPath); tape('functional test of importing four small OA files', function(t) { // expect two assertions, one for the error and one for the data t.plan(2); const assert = (err, actual) => { // uncomment this to write the actual results to the expected file // make sure they look ok though. comma left off so jshint reminds you // not to commit this line // require('fs').writeFileSync(expectedPath, JSON.stringify(actual, null, 2)) t.error(err); t.deepEquals(actual, expected); t.end(); }; const importPipeline = proxyquire('../lib/importPipeline', { 'pelias-dbclient': () => { const dbclient = new stream_mock.ObjectWritableMock(); dbclient.on('error', (e) => assert(e)); dbclient.on('finish', () => assert(null, dbclient.data)); return dbclient; } }); // mock admin lookup stream to show that input file admin values are ignored // and replaced with overrides from adminLookup const adminLookupStream = map.obj((record) => { // we're only concerned about one record being modified if (_.isEqual(record.center_point, { lat: 12.121212, lon: 21.212121})) { record.addParent('country', 'override country', '1'); record.addParent('macroregion', 'override macroregion', '2'); record.addParent('region', 'override region', '3'); record.addParent('macrocounty', 'override macrocounty', '4'); record.addParent('county', 'override county', '5'); record.addParent('borough', 'override borough', '6'); record.addParent('locality', 'override locality', '7'); record.addParent('localadmin', 'override localadmin', '8'); record.addParent('neighbourhood', 'override neighbourhood', '9'); } return record; }); // test fixtures const dirPath = path.join(__dirname, 'data'); const inputFiles = [ path.join(dirPath, 'input_file_1.csv'), path.join(dirPath, 'input_file_2.csv'), path.join(dirPath, 'au/input_file_3.csv'), path.join(dirPath, 'au/input_file_4.csv') ]; importPipeline.create(inputFiles, dirPath, adminLookupStream); });