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.
		
		
		
		
		
			
		
			
				
					138 lines
				
				5.0 KiB
			
		
		
			
		
	
	
					138 lines
				
				5.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | var _chai = require("chai"); | ||
|  | 
 | ||
|  | var _set = require("./set"); | ||
|  | 
 | ||
|  | describe('module:flat.set', () => { | ||
|  |   let params; | ||
|  |   let newParams; | ||
|  |   beforeEach(() => { | ||
|  |     params = { | ||
|  |       name: 'Wojtek', | ||
|  |       surname: 'Krysiak', | ||
|  |       age: 36, | ||
|  |       'interest.OfMe.0': 'javascript', | ||
|  |       'interest.OfMe.1': 'typescript', | ||
|  |       'interest.OfMe.2': 'brainTumor', | ||
|  |       interests: 'Generally everything', | ||
|  |       'meta.position': 'CTO', | ||
|  |       'meta.workingHours': '9:00-17:00', | ||
|  |       'meta.duties': 'everything', | ||
|  |       'meta.fun': '8/10', | ||
|  |       initiallyNull: null | ||
|  |     }; | ||
|  |   }); | ||
|  |   it('sets regular property when it is default type', () => { | ||
|  |     const age = 37; | ||
|  |     (0, _chai.expect)((0, _set.set)(params, 'age', age)).to.have.property('age', 37); | ||
|  |   }); | ||
|  |   context('passing basic types', () => { | ||
|  |     const newPropertyName = 'newProperty'; | ||
|  |     it('does not change the type when regular file is set', function () { | ||
|  |       const file = new File([], 'amazing.me'); | ||
|  |       newParams = (0, _set.set)(params, newPropertyName, file); | ||
|  |       (0, _chai.expect)(newParams[newPropertyName]).to.equal(file); | ||
|  |     }); | ||
|  |     it('does not change the type when Date is set', () => { | ||
|  |       const date = new Date(); | ||
|  |       newParams = (0, _set.set)(params, newPropertyName, date); | ||
|  |       (0, _chai.expect)(newParams[newPropertyName]).to.equal(date); | ||
|  |     }); | ||
|  |     it('sets null', () => { | ||
|  |       (0, _chai.expect)((0, _set.set)(params, newPropertyName, null)).to.have.property(newPropertyName, null); | ||
|  |     }); | ||
|  |     it('sets empty object', () => { | ||
|  |       (0, _chai.expect)((0, _set.set)(params, newPropertyName, {})).to.deep.include({ | ||
|  |         [newPropertyName]: {} | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('sets empty array', () => { | ||
|  |       (0, _chai.expect)((0, _set.set)(params, newPropertyName, [])).to.deep.include({ | ||
|  |         [newPropertyName]: [] | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('does nothing when setting undefined to some random key', () => { | ||
|  |       (0, _chai.expect)((0, _set.set)(params, newPropertyName, undefined)).to.deep.equal(params); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('passing array', () => { | ||
|  |     const interest = ['js', 'ts']; | ||
|  |     beforeEach(() => { | ||
|  |       newParams = (0, _set.set)(params, 'interest.OfMe', interest); | ||
|  |     }); | ||
|  |     it('replaces sets values for all new arrays items', () => { | ||
|  |       (0, _chai.expect)(newParams).to.include({ | ||
|  |         'interest.OfMe.0': 'js', | ||
|  |         'interest.OfMe.1': 'ts' | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('removes old values', () => { | ||
|  |       (0, _chai.expect)(newParams).not.to.have.property('interest.OfMe.2'); | ||
|  |     }); | ||
|  |     it('leaves other values which name starts the same', () => { | ||
|  |       (0, _chai.expect)(newParams).to.have.property('interests', params.interests); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('value is undefined', () => { | ||
|  |     const property = 'meta'; | ||
|  |     beforeEach(() => { | ||
|  |       newParams = (0, _set.set)(params, property); | ||
|  |     }); | ||
|  |     it('removes all existing properties', () => { | ||
|  |       (0, _chai.expect)(newParams).not.to.have.keys('meta.position', 'meta.workingHours', 'meta.duties', 'meta.fun'); | ||
|  |     }); | ||
|  |     it('does not set any new key', () => { | ||
|  |       (0, _chai.expect)(Object.keys(newParams).length).to.eq(Object.keys(params).length - 4); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('mixed type was inside and should be updated', () => { | ||
|  |     const meta = { | ||
|  |       position: 'adminJSCEO', | ||
|  |       workingHours: '6:00-21:00' | ||
|  |     }; | ||
|  |     beforeEach(() => { | ||
|  |       newParams = (0, _set.set)(params, 'meta', meta); | ||
|  |     }); | ||
|  |     it('clears the previous value for nested string', () => { | ||
|  |       (0, _chai.expect)(newParams).not.to.have.keys('meta.duties', 'meta.fun'); | ||
|  |     }); | ||
|  |     it('sets the new value for nested string', () => { | ||
|  |       (0, _chai.expect)(newParams).to.include({ | ||
|  |         'meta.position': meta.position, | ||
|  |         'meta.workingHours': meta.workingHours | ||
|  |       }); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('user wants to set nested property for already given root property', () => { | ||
|  |     const newNestedNullValue = 'this is not null'; | ||
|  |     beforeEach(() => { | ||
|  |       params = { | ||
|  |         id: '6e264607-ad0b-4480-8e25-1bf54063465b', | ||
|  |         title: 'Your new story', | ||
|  |         status: 'draft', | ||
|  |         postImage: null, | ||
|  |         blogImageKeys: null, | ||
|  |         blogImageMimeTypes: null, | ||
|  |         blogImageBuckets: null, | ||
|  |         blogImageSizes: null, | ||
|  |         postUrl: 'your-new-story' | ||
|  |       }; | ||
|  |     }); | ||
|  |     it('sets value for new nested property', () => { | ||
|  |       const newNestedNullKey = 'blogImageKeys.nested'; | ||
|  |       newParams = (0, _set.set)(params, newNestedNullKey, newNestedNullValue); | ||
|  |       (0, _chai.expect)(newParams[newNestedNullKey]).to.eq(newNestedNullValue); | ||
|  |     }); | ||
|  |     it('removes root property from keys', () => { | ||
|  |       const newNestedNullKey = 'blogImageKeys.nested'; | ||
|  |       newParams = (0, _set.set)(params, newNestedNullKey, newNestedNullValue); | ||
|  |       (0, _chai.expect)(Object.keys(newParams)).not.to.include(newNestedNullKey.split('.')[0]); | ||
|  |     }); | ||
|  |     it('removes value from keys if new value is an array', () => { | ||
|  |       const newNestedNullKey = 'blogImageKeys.0'; | ||
|  |       newParams = (0, _set.set)(params, newNestedNullKey, newNestedNullValue); | ||
|  |       (0, _chai.expect)(Object.keys(newParams)).not.to.include(newNestedNullKey.split('.')[0]); | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |