Files
iD/test/spec/osm/changeset.js
Bryan Housel 4d0ef1bafc Export only the d3 functions we use in tests
(re: #4379)

This trims a bit more off the iD bundle size
2020-02-22 15:07:09 -05:00

123 lines
4.8 KiB
JavaScript

describe('iD.osmChangeset', function () {
it('returns a changeset', function () {
expect(iD.osmChangeset()).to.be.an.instanceOf(iD.osmChangeset);
expect(iD.osmChangeset().type).to.equal('changeset');
});
it('defaults tags to an empty object', function () {
expect(iD.osmChangeset().tags).to.eql({});
});
it('sets tags as specified', function () {
expect(iD.osmChangeset({tags: {foo: 'bar'}}).tags).to.eql({foo: 'bar'});
});
describe('#asJXON', function () {
it('converts a node to jxon', function() {
var node = iD.osmChangeset({tags: {'comment': 'hello'}});
expect(node.asJXON()).to.eql({
osm: {
changeset: {
tag: [{ '@k': 'comment', '@v': 'hello' }],
'@version': 0.6,
'@generator': 'iD'
}
}
});
});
});
describe('#osmChangeJXON', function() {
it('converts change data to JXON', function() {
var changeset = iD.osmChangeset();
var jxon = changeset.osmChangeJXON({ created: [], modified: [], deleted: [] });
expect(jxon).to.eql({
osmChange: {
'@version': 0.6,
'@generator': 'iD',
'create': {},
'modify': {},
'delete': { '@if-unused': true }
}
});
});
it('includes creations ordered by nodes, ways, relations', function() {
var n = iD.osmNode({ loc: [0, 0] });
var w = iD.osmWay();
var r = iD.osmRelation();
var c = iD.osmChangeset({ id: '1234' });
var changes = { created: [r, w, n], modified: [], deleted: [] };
var jxon = c.osmChangeJXON(changes);
var result = jxon.osmChange.create;
expect(result.node).to.eql([n.asJXON('1234').node]);
expect(result.way).to.eql([w.asJXON('1234').way]);
expect(result.relation).to.eql([r.asJXON('1234').relation]);
});
it('includes creations ordered by dependencies', function() {
var n = iD.osmNode({ loc: [0, 0] });
var w = iD.osmWay({nodes: [n.id]});
var r1 = iD.osmRelation({ members: [{ id: w.id, type: 'way' }] });
var r2 = iD.osmRelation({ members: [{ id: r1.id, type: 'relation' }] });
var c = iD.osmChangeset({ id: '1234' });
var changes = { created: [r2, r1, w, n], modified: [], deleted: [] };
var jxon = c.osmChangeJXON(changes);
var result = jxon.osmChange.create;
expect(result.node).to.eql([n.asJXON('1234').node]);
expect(result.way).to.eql([w.asJXON('1234').way]);
expect(result.relation).to.eql([r1.asJXON('1234').relation, r2.asJXON('1234').relation]);
});
it('includes creations ignoring circular dependencies', function() {
var r1 = iD.osmRelation();
var r2 = iD.osmRelation();
var c = iD.osmChangeset({ id: '1234' });
var changes, jxon;
r1.addMember({ id: r2.id, type: 'relation' });
r2.addMember({ id: r1.id, type: 'relation' });
changes = { created: [r1,r2], modified: [], deleted: [] };
jxon = c.osmChangeJXON(changes);
var result = jxon.osmChange.create;
expect(result.relation).to.eql([r1.asJXON('1234').relation, r2.asJXON('1234').relation]);
});
it('includes modifications', function() {
var n = iD.osmNode({ loc: [0, 0] });
var w = iD.osmWay();
var r = iD.osmRelation();
var c = iD.osmChangeset({ id: '1234' });
var changes = { created: [], modified: [r, w, n], deleted: [] };
var jxon = c.osmChangeJXON(changes);
expect(jxon.osmChange.modify).to.eql({
node: [n.asJXON('1234').node],
way: [w.asJXON('1234').way],
relation: [r.asJXON('1234').relation]
});
});
it('includes deletions ordered by relations, ways, nodes', function() {
var n = iD.osmNode({ loc: [0, 0] });
var w = iD.osmWay();
var r = iD.osmRelation();
var c = iD.osmChangeset({ id: '1234' });
var changes = { created: [], modified: [], deleted: [n, w, r] };
var jxon = c.osmChangeJXON(changes);
var result = jxon.osmChange.delete;
expect(result.node).to.eql([n.asJXON('1234').node]);
expect(result.way).to.eql([w.asJXON('1234').way]);
expect(result.relation).to.eql([r.asJXON('1234').relation]);
expect(result['@if-unused']).to.eql(true);
});
});
});