import { deepEqual } from '../util'
import { deepMerge } from '../util'

describe('deepMerge', () => {
  test('deepMerge({}, {a: 1}, {b: 2}) should return {a: 1, b: 2}', () => {
    expect(deepMerge({}, { a: 1 }, { b: 2 })).toEqual({ a: 1, b: 2 })
  })
  test('deepMerge(null, [1,2,3]) should equal [1,2,3]', () => {
    expect(deepMerge(null, [1, 2, 3])).toEqual([1, 2, 3])
  })
  test('deepMerge({a: {b: 1, c:2}}, {a: {b: 3}}) should equal {a: {b: 3, c: 2}}', () => {
    expect(deepMerge({ a: { b: 1, c: 2 } }, { a: { b: 3 } })).toEqual({
      a: { b: 3, c: 2 },
    })
  })
  test('deepMerge({a: {b: 1, c:2}}, {a: {b: 3}}) should equal {a: {b: 3, c: 2}} with deep equal', () => {
    expect(
      deepEqual(deepMerge({ a: { b: 1, c: 2 } }, { a: { b: 3 } }), {
        a: { b: 3, c: 2 },
      }),
    ).toBeTruthy()
  })
  test('Test that merging lists has Set semantics', () => {
    const merge = deepMerge(['a', 'b'], ['b', 'c'])
    expect(merge).toHaveLength(3)
    expect(merge).toContain('a')
    expect(merge).toContain('b')
    expect(merge).toContain('c')
  })
})
