osm-p2p-server
Version:
Peer-to-peer OpenStreetMap API v0.6 Server
74 lines (64 loc) • 2.43 kB
JavaScript
var test = require('tape')
var osmdb = require('../lib/test_db')
var createGetChanges = require('../../api/get_changes')
var refs2nodes = require('../../lib/util').refs2nodes
var osm = osmdb()
var getChanges = createGetChanges(osm)
var batch0 = [
{ type: 'put', id: 'A', value: { type: 'node', lat: 1.1, lon: 1.1, changeset: 'X' } },
{ type: 'put', id: 'B', value: { type: 'node', lat: 2.1, lon: 2.1, changeset: 'X' } },
{ type: 'put', id: 'C', value: { type: 'node', lat: 1.2, lon: 1.2, changeset: 'X' } },
{ type: 'put', id: 'D', value: { type: 'way', refs: [ 'A', 'B', 'C' ], changeset: 'X' } },
{ type: 'put', id: 'X', value: { type: 'changeset', tags: { created_by: 'osm-p2p test' } } }
]
var batch1 = [
{ type: 'put', id: 'A', value: { type: 'node', lat: 1.5, lon: 1.1, changeset: 'X' } },
{ type: 'del', id: 'B', value: { changeset: 'X' } }
]
var versions0 = {}
var versions1 = {}
test('setup', t => {
osm.batch(batch0, function (err, elms) {
t.error(err)
elms.forEach(n => (versions0[n.id] = n.version))
osm.batch(batch1, function (err, elms) {
t.error(err)
elms.forEach(n => (versions1[n.id] = n.version))
t.end()
})
})
})
test.skip('getChanges', t => {
var expected = batch0.slice(0, 4).map(row => Object.assign({},
row.value, {action: 'create', id: row.key, version: versions0[row.key]})).map(refs2nodes)
expected.push(Object.assign({}, batch1[0].value,
{action: 'modify', id: batch1[0].key, version: versions1[batch1[0].key]}))
expected.push(Object.assign({}, batch0[1].value,
{action: 'delete', id: batch0[1].key, version: versions1[batch0[1].key]}))
getChanges('X', function (err, elements) {
t.error(err)
t.deepEqual(elements.sort(idcmp), expected.sort(idcmp))
t.end()
})
})
test('getChanges no changeset error', t => {
t.plan(6)
getChanges('Y', function (err, elements) {
t.true(err instanceof Error)
t.equal(err.name, 'NotFoundError')
t.equal(err.status, 404)
})
// check for an id actually in db, but not a changeset id
getChanges('B', function (err, elements) {
t.true(err instanceof Error)
t.equal(err.name, 'NotFoundError')
t.equal(err.status, 404)
})
})
function idcmp (a, b) {
return a.action === b.action
? (a.id < b.id ? -1 : 1)
: cmpt(a.action, b.action)
}
var actions = { create: 0, modify: 1, delete: 2 }
function cmpt (a, b) { return actions[a] - actions[b] }