fix logic bug, extend test coverage

This commit is contained in:
Martin Raifer
2022-10-27 17:07:32 +02:00
parent 96bac0650b
commit dd30a39d74
2 changed files with 27 additions and 2 deletions
+1 -1
View File
@@ -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];
}
});
+26 -1
View File
@@ -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'});