diff --git a/js/id/actions/change_preset.js b/js/id/actions/change_preset.js
index dbebf2890..7688b8c10 100644
--- a/js/id/actions/change_preset.js
+++ b/js/id/actions/change_preset.js
@@ -4,8 +4,8 @@ iD.actions.ChangePreset = function(entityId, oldPreset, newPreset) {
geometry = entity.geometry(graph),
tags = entity.tags;
- tags = oldPreset.removeTags(tags, geometry);
- tags = newPreset.applyTags(tags, geometry);
+ if (oldPreset) tags = oldPreset.removeTags(tags, geometry);
+ if (newPreset) tags = newPreset.applyTags(tags, geometry);
return graph.replace(entity.update({tags: tags}));
};
diff --git a/test/index.html b/test/index.html
index 4d1ecd030..ebca79ffd 100644
--- a/test/index.html
+++ b/test/index.html
@@ -105,6 +105,7 @@
+
@@ -189,6 +190,7 @@
+
diff --git a/test/index_packaged.html b/test/index_packaged.html
index a7a482f51..45996b56a 100644
--- a/test/index_packaged.html
+++ b/test/index_packaged.html
@@ -28,6 +28,7 @@
+
diff --git a/test/spec/actions/change_preset.js b/test/spec/actions/change_preset.js
new file mode 100644
index 000000000..915182fe5
--- /dev/null
+++ b/test/spec/actions/change_preset.js
@@ -0,0 +1,25 @@
+describe("iD.actions.ChangePreset", function() {
+ var oldPreset = iD.presets.Preset('old', {tags: {old: 'true'}}),
+ newPreset = iD.presets.Preset('new', {tags: {new: 'true'}});
+
+ it("changes from one preset's tags to another's", function() {
+ var entity = iD.Node({tags: {old: 'true'}}),
+ graph = iD.Graph([entity]),
+ action = iD.actions.ChangePreset(entity.id, oldPreset, newPreset);
+ expect(action(graph).entity(entity.id).tags).to.eql({new: 'true'});
+ });
+
+ it("adds the tags of a new preset to an entity without an old preset", function() {
+ var entity = iD.Node(),
+ graph = iD.Graph([entity]),
+ action = iD.actions.ChangePreset(entity.id, null, newPreset);
+ expect(action(graph).entity(entity.id).tags).to.eql({new: 'true'});
+ });
+
+ it("removes the tags of an old preset from an entity without a new preset", function() {
+ var entity = iD.Node({tags: {old: 'true'}}),
+ graph = iD.Graph([entity]),
+ action = iD.actions.ChangePreset(entity.id, oldPreset, null);
+ expect(action(graph).entity(entity.id).tags).to.eql({});
+ });
+});