describe('iD.actionCopyEntities', function () { it('copies a node', function () { var a = iD.Node({id: 'a'}), base = iD.Graph([a]), head = iD.actionCopyEntities(['a'], base)(base), diff = iD.Difference(base, head), created = diff.created(); expect(head.hasEntity('a')).to.be.ok; expect(created).to.have.length(1); }); it('copies a way', function () { var a = iD.Node({id: 'a'}), b = iD.Node({id: 'b'}), w = iD.Way({id: 'w', nodes: ['a', 'b']}), base = iD.Graph([a, b, w]), action = iD.actionCopyEntities(['w'], base), head = action(base), diff = iD.Difference(base, head), created = diff.created(); expect(head.hasEntity('w')).to.be.ok; expect(created).to.have.length(3); }); it('copies multiple nodes', function () { var base = iD.Graph([ iD.Node({id: 'a'}), iD.Node({id: 'b'}) ]), action = iD.actionCopyEntities(['a', 'b'], base), head = action(base), diff = iD.Difference(base, head), created = diff.created(); expect(head.hasEntity('a')).to.be.ok; expect(head.hasEntity('b')).to.be.ok; expect(created).to.have.length(2); }); it('copies multiple ways, keeping the same connections', function () { var base = iD.Graph([ iD.Node({id: 'a'}), iD.Node({id: 'b'}), iD.Node({id: 'c'}), iD.Way({id: 'w1', nodes: ['a', 'b']}), iD.Way({id: 'w2', nodes: ['b', 'c']}) ]), action = iD.actionCopyEntities(['w1', 'w2'], base), head = action(base), diff = iD.Difference(base, head), created = diff.created(); expect(created).to.have.length(5); expect(action.copies().w1.nodes[1]).to.eql(action.copies().w2.nodes[0]); }); it('obtains source entities from an alternate graph', function () { var a = iD.Node({id: 'a'}), old = iD.Graph([a]), base = iD.Graph(), action = iD.actionCopyEntities(['a'], old), head = action(base), diff = iD.Difference(base, head); diff.created(); expect(head.hasEntity('a')).not.to.be.ok; expect(Object.keys(action.copies())).to.have.length(1); }); });