@breautek/merge-change
Version:
Simple library for deep merge of objects and other types (also for patch and immutable updates). Declarative operations to specific merge, for example to remove properties. Customize merging between specific types. Calculating diffs.
90 lines (77 loc) • 1.72 kB
JavaScript
const utils = require('../utils.js');
const methods = require('../methods.js');
describe('Test unset()', () => {
test('unset deep property', () => {
const data = {
prop: {
deep: {
some: 1,
superDeep: 'value',
},
},
};
utils.unset(data, '/prop/deep/superDeep', '/');
expect(utils.plain(data)).toStrictEqual({
prop: {
deep: {
some: 1
},
},
});
});
test('unset for custom object', () => {
class Custom {
constructor(value = {}) {
this.value = value;
}
// [methods.toOperation]() {
// return this.value;
// }
toJSON(){
return this.value;
}
}
let data = new Custom({
name: 'Test',
sub: {
prop: {
inner: 100,
},
},
});
utils.unset(data, '/sub/prop/inner', '/');
expect(utils.plain(data)).toStrictEqual({
name: 'Test',
sub: {
prop: {
},
},
});
});
test('unset all props', () => {
const data = {
prop: 1,
sub: {
name: 2,
list: [1, 2]
},
};
utils.unset(data, '*');
expect(utils.plain(data)).toStrictEqual({ });
});
test('unset array', () => {
const data = {
prop: 1,
list: [1, 2],
};
utils.unset(data, 'list.*');
expect(utils.plain(data)).toStrictEqual({prop: 1, list: [] });
});
test('unset number', () => {
const data = {
prop: 5,
};
utils.unset(data, 'prop.*');
expect(utils.plain(data)).toStrictEqual({prop: undefined });
});
});