altair-graphql-core
Version:
Several of the core logic for altair graphql client
36 lines • 1.71 kB
JavaScript
import { describe, expect, it } from '@jest/globals';
import { setByDotNotation } from './dot-notation';
describe('setByDotNotation', () => {
it('should correctly set value by dot notation', () => {
const obj = {};
const existingObj = { a: 1, b: { c: 2 } };
// set to empty path
setByDotNotation(obj, 'a.b', 3);
expect(obj).toEqual({ a: { b: 3 } });
// set to existing object in path
setByDotNotation(obj, 'a.c', 4);
expect(obj).toEqual({ a: { b: 3, c: 4 } });
// set to new array
setByDotNotation(obj, 'a.d.1', 5);
expect(obj).toEqual({ a: { b: 3, c: 4, d: [undefined, 5] } });
// set to existing array
setByDotNotation(obj, 'a.d.0', 6);
expect(obj).toEqual({ a: { b: 3, c: 4, d: [6, 5] } });
// set existing value
setByDotNotation(obj, 'a.c', 7);
expect(obj).toEqual({ a: { b: 3, c: 7, d: [6, 5] } });
// set new object inside array
setByDotNotation(obj, 'a.d.2.x', 8);
expect(obj).toEqual({ a: { b: 3, c: 7, d: [6, 5, { x: 8 }] } });
// set new object inside existing object
setByDotNotation(existingObj, 'b.e.f', 9);
expect(existingObj).toEqual({ a: 1, b: { c: 2, e: { f: 9 } } });
// set object inside existing object
setByDotNotation(existingObj, 'b.e', { g: 10 });
expect(existingObj).toEqual({ a: 1, b: { c: 2, e: { g: 10 } } });
// set object inside existing object with merge
setByDotNotation(existingObj, 'b.e', { h: 11 }, true);
expect(existingObj).toEqual({ a: 1, b: { c: 2, e: { g: 10, h: 11 } } });
});
});
//# sourceMappingURL=dot-notation.spec.js.map