You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					83 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					83 lines
				
				2.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _chai = require("chai");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _merge = require("./merge");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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'
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    (0, _chai.expect)((0, _merge.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'
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      (0, _chai.expect)((0, _merge.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'
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      (0, _chai.expect)((0, _merge.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', () => {
							 | 
						||
| 
								 | 
							
								      (0, _chai.expect)((0, _merge.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']
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      (0, _chai.expect)((0, _merge.merge)(object1, object2, object3)).to.deep.equal({
							 | 
						||
| 
								 | 
							
								        'status.type': 'status2',
							 | 
						||
| 
								 | 
							
								        'status.age': '1 day',
							 | 
						||
| 
								 | 
							
								        'names.0': 'Wojtek'
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |