object.spec.js 1.69 KB
import { pick, omit, mergeDeep } from './object'

describe('utils/object', () => {
  it('pick() works', async () => {
    const obj = { a: 1, b: 2, c: 3, d: null, e: [] }

    expect(pick(obj, ['a', 'b', 'c'])).toEqual({ a: 1, b: 2, c: 3 })
    expect(pick(obj, Object.keys(obj))).toEqual(obj)
    expect(pick(obj, [])).toEqual({})
  })

  it('omit() works', async () => {
    const obj = { a: 1, b: 2, c: 3, d: null, e: [] }

    expect(omit(obj, ['a', 'b', 'c'])).toEqual({ d: null, e: [] })
    expect(omit(obj, Object.keys(obj))).toEqual({})
    expect(omit(obj, [])).toEqual(obj)
  })

  it('mergeDeep() works', async () => {
    const A = {
      a: {
        loc: 'Earth',
        title: 'Hello World',
        type: 'Planet',
        deeper: {
          map: new Map([['a', 'AAA'], ['b', 'BBB']]),
          mapId: 15473
        }
      }
    }
    const B = {
      a: {
        type: 'Star',
        deeper: {
          mapId: 9999,
          alt_map: new Map([['x', 'XXXX'], ['y', 'YYYY']])
        }
      }
    }

    const C = mergeDeep(A, B)
    const D = mergeDeep({ a: 1 }, { b: { c: { d: { e: 12345 } } } })
    const E = mergeDeep({ b: { c: 'hallo' } }, { b: { c: { d: { e: 12345 } } } })
    const F = mergeDeep(
      { b: { c: { d: { e: 12345 } }, d: 'dag', f: 'one' } },
      { b: { c: 'hallo', e: 'ok', f: 'two' } }
    )

    expect(C.a.type).toEqual('Star')
    expect(C.a.deeper.alt_map.get('x')).toEqual('XXXX')
    expect(C.a.deeper.map.get('b')).toEqual('BBB')
    expect(D.a).toEqual(1)
    expect(D.b.c.d.e).toEqual(12345)
    expect(E.b.c.d.e).toEqual(12345)
    expect(F.b.c).toEqual('hallo')
    expect(F.b.d).toEqual('dag')
    expect(F.b.e).toEqual('ok')
    expect(F.b.f).toEqual('two')
  })
})