all files / src/__tests__/ fieldValue.spec.js

100% Statements 36/36
100% Branches 4/4
100% Functions 10/10
100% Lines 34/34
1 branch Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                      
import expect from 'expect';
import {makeFieldValue, isFieldValue} from '../fieldValue';
 
describe('fieldValue', () => {
  describe('makeFieldValue', () => {
    it('should be okay with non-objects', () => {
      expect(makeFieldValue()).toBe(undefined);
      expect(makeFieldValue(null)).toBe(null);
      expect(makeFieldValue([1, 2])).toEqual([1, 2]);
      expect(makeFieldValue('not an object')).toEqual('not an object');
    });
 
    it('should return the same object back', () => {
      const someObject = {b: 1};
      expect(makeFieldValue(someObject)).toBe(someObject);
    });
 
    it('should not affect deep equal', () => {
      const someObject = {b: 1};
      expect(someObject).toEqual({b: 1});
      makeFieldValue(someObject);
      expect(someObject).toEqual(Object.defineProperties({b: 1}, {
        _isFieldValue: {value: true, enumerable: false} // hide property
      }));
    });
 
    it('should set the field value flag', () => {
      const someObject = {b: 1};
      expect(isFieldValue(someObject)).toBe(false);
      makeFieldValue(someObject);
      expect(isFieldValue(someObject)).toBe(true);
    });
 
    it('should be still field value after object recreation', () => {
      const someObject = makeFieldValue({b: 1});
      expect(isFieldValue(someObject)).toBe(true);
 
      const recreatedObject = JSON.parse(JSON.stringify(someObject));
      expect(isFieldValue(recreatedObject)).toBe(true);
    });
  });
 
  describe('isFieldValue', () => {
    it('should be okay with non-objects', () => {
      expect(isFieldValue()).toBe(false);
      expect(isFieldValue(null)).toBe(false);
      expect(isFieldValue([1, 2])).toBe(false);
      expect(isFieldValue('not an object')).toBe(false);
    });
  });
});