adminjs
Version:
Admin panel for apps written in node.js
79 lines • 2.16 kB
JavaScript
import { expect } from 'chai';
import { merge } from './merge.js';
describe('merge', () => {
it('removes nulled arrays when nested items were found', () => {
const object1 = {
status: 'draft',
postImage: null,
blogImageSizes: null
};
const object2 = {
'blogImageSizes.0': 4130,
'blogImageMimeTypes.0': 'image/jpeg'
};
expect(merge(object1, object2)).to.deep.equal({
status: 'draft',
postImage: null,
'blogImageSizes.0': 4130,
'blogImageMimeTypes.0': 'image/jpeg'
});
});
context('object with nested fields are given in the first argument', () => {
const object1 = {
status: {
type: 'draft',
updated: 'yesterday',
tags: ['super']
}
};
it('flattens everything and changes just nested property when it was given nested', () => {
const object2 = {
'status.type': 'newDraft'
};
expect(merge(object1, object2)).to.deep.equal({
'status.type': object2['status.type'],
'status.updated': 'yesterday',
'status.tags.0': 'super'
});
});
it('changes entire record when 2 objects are given', () => {
const object2 = {
status: {
type: 'newType',
updated: 'today'
}
};
expect(merge(object1, object2)).to.deep.equal({
'status.type': object2.status.type,
'status.updated': 'today'
});
});
});
describe('multiple parameters', () => {
const object1 = {
status: {
type: 'draft'
}
};
it('returns flatten object when one other argument is given', () => {
expect(merge(object1)).to.deep.equal({
'status.type': 'draft'
});
});
it('merges more then 2 arguments', () => {
const object2 = {
'status.type': 'status2',
'status.age': '1 day'
};
const object3 = {
'status.type': 'status3',
names: ['Wojtek']
};
expect(merge(object1, object2, object3)).to.deep.equal({
'status.type': 'status2',
'status.age': '1 day',
'names.0': 'Wojtek'
});
});
});
});