From dd30a39d7487e1084396712ce861f4b6c5a07849 Mon Sep 17 00:00:00 2001 From: Martin Raifer Date: Thu, 27 Oct 2022 17:07:32 +0200 Subject: [PATCH] fix logic bug, extend test coverage --- modules/presets/preset.js | 2 +- test/spec/presets/preset.js | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/modules/presets/preset.js b/modules/presets/preset.js index c7131c25d..fbf3b841f 100644 --- a/modules/presets/preset.js +++ b/modules/presets/preset.js @@ -228,7 +228,7 @@ export function presetPreset(presetID, preset, addable, allFields, allPresets) { _this.fields().forEach(field => { if (field.matchGeometry(geometry) && field.key && field.default === tags[field.key] && - ignoringKeys.indexOf(field.key) !== -1) { + (!ignoringKeys || ignoringKeys.indexOf(field.key) === -1)) { delete tags[field.key]; } }); diff --git a/test/spec/presets/preset.js b/test/spec/presets/preset.js index b8f89c16a..708a065bd 100644 --- a/test/spec/presets/preset.js +++ b/test/spec/presets/preset.js @@ -202,18 +202,43 @@ describe('iD.presetPreset', function() { expect(preset.unsetTags({highway: 'pedestrian', area: 'yes'}, 'area')).to.eql({}); }); - it('preserves tags that do not match field default tags', function() { + it('preserves tags that do not match field default value', function() { var isAddable = true; var field = iD.presetField('field', {key: 'building', geometry: 'area', default: 'yes'}); var preset = iD.presetPreset('test', {fields: ['field']}, isAddable, {field: field}); expect(preset.unsetTags({building: 'yep'}, 'area')).to.eql({ building: 'yep'}); }); + it('preserves tags that do match field default value, but do not match geometry', function() { + var isAddable = true; + var field = iD.presetField('field', {key: 'building', geometry: 'area', default: 'yes'}); + var preset = iD.presetPreset('test', {fields: ['field']}, isAddable, {field: field}); + expect(preset.unsetTags({building: 'yes'}, 'line')).to.eql({ building: 'yes'}); + }); + it('preserves tags that are not listed in removeTags', function() { var preset = iD.presetPreset('test', {tags: {a: 'b'}, removeTags: {}}); expect(preset.unsetTags({a: 'b'}, 'area')).to.eql({a: 'b'}); }); + it('preserves field default tags when "skipFieldDefaults" flag is on', function() { + var isAddable = true; + var field = iD.presetField('field', {key: 'building', geometry: 'area', default: 'yes'}); + var preset = iD.presetPreset('test', {fields: ['field']}, isAddable, {field: field}); + expect(preset.unsetTags({building: 'yes'}, 'area', undefined, true)).to.eql({building: 'yes'}); + }); + + it('preserves "ignoringKeys" tags', function() { + var preset = iD.presetPreset('test', {tags: {a: 'a', b: 'b'}}); + expect(preset.unsetTags({a: 'a', b: 'b'}, 'area', ['b'])).to.eql({b: 'b'}); + }); + + it('preserves "ignoringKeys" tags from default fields', function() { + var field = iD.presetField('field', {key: 'b', geometry: 'area', default: 'default'}); + var preset = iD.presetPreset('test', {fields: ['field']}, true, {field: field}); + expect(preset.unsetTags({b: 'default'}, 'area', ['b'])).to.eql({b: 'default'}); + }); + it('uses tags from addTags if removeTags is not defined', function() { var preset = iD.presetPreset('test', {tags: {a: 'b'}, addTags: {remove: 'me'}}); expect(preset.unsetTags({a: 'b', remove: 'me'}, 'area')).to.eql({a: 'b'});