From f4d93c442ec159e3213031911ea4f08fe9ff7b16 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Thu, 18 Jun 2015 11:45:46 -0400 Subject: [PATCH] Add connection#loadEntityVersion to fetch specific version --- js/id/core/connection.js | 11 ++++++++ test/spec/core/connection.js | 54 +++++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/js/id/core/connection.js b/js/id/core/connection.js index a9957ecbc..1f4c5ba3e 100644 --- a/js/id/core/connection.js +++ b/js/id/core/connection.js @@ -60,6 +60,17 @@ iD.Connection = function() { }); }; + connection.loadEntityVersion = function(id, version, callback) { + var type = iD.Entity.id.type(id), + osmID = iD.Entity.id.toOSM(id); + + connection.loadFromURL( + url + '/api/0.6/' + type + '/' + osmID + '/' + version, + function(err, entities) { + if (callback) callback(err, {data: entities}); + }); + }; + connection.loadMultiple = function(ids, callback) { _.each(_.groupBy(_.uniq(ids), iD.Entity.id.type), function(v, k) { var type = k + 's', diff --git a/test/spec/core/connection.js b/test/spec/core/connection.js index 770b7d981..c538ce5eb 100644 --- a/test/spec/core/connection.js +++ b/test/spec/core/connection.js @@ -75,11 +75,13 @@ describe('iD.Connection', function () { describe('#loadEntity', function () { var server, - nodeXML = '', + nodeXML = '' + + '' + + '', wayXML = '' + - '' + - '' + - ''; + '' + + '' + + ''; beforeEach(function() { server = sinon.fakeServer.create(); @@ -116,6 +118,50 @@ describe('iD.Connection', function () { }); }); + describe('#loadEntityVersion', function () { + var server, + nodeXML = '' + + '' + + '', + wayXML = '' + + '' + + ''; + + beforeEach(function() { + server = sinon.fakeServer.create(); + }); + + afterEach(function() { + server.restore(); + }); + + it('loads a node', function(done) { + var id = 'n1'; + c.loadEntityVersion(id, 1, function(err, result) { + var entity = _.find(result.data, function(e) { return e.id === id; }); + expect(entity).to.be.an.instanceOf(iD.Node); + done(); + }); + + server.respondWith("GET", "http://www.openstreetmap.org/api/0.6/node/1/1", + [200, { "Content-Type": "text/xml" }, nodeXML]); + server.respond(); + }); + + it('loads a way', function(done) { + var id = 'w1'; + c.loadEntityVersion(id, 1, function(err, result) { + var entity = _.find(result.data, function(e) { return e.id === id; }); + expect(entity).to.be.an.instanceOf(iD.Way); + done(); + }); + + server.respondWith("GET", "http://www.openstreetmap.org/api/0.6/way/1/1", + [200, { "Content-Type": "text/xml" }, wayXML]); + server.respond(); + }); + }); + describe('#loadMultiple', function () { beforeEach(function() { server = sinon.fakeServer.create();