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();