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
						
					
					
				"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]);
 | 
						|
    });
 | 
						|
  });
 | 
						|
}); |