import { compareKeys } from './compareKeys';

describe('compareKeys', () => {
  it('should return an empty array for two identical objects', () => {
    const obj1 = { a: 1, b: 2, c: { d: 3 } };
    const obj2 = { a: 1, b: 2, c: { d: 3 } };

    expect(compareKeys(obj1, obj2)).toEqual([]);
  });

  it('should return missing keys when the second object is missing keys', () => {
    const obj1 = { a: 1, b: 2, c: { d: 3 } };
    const obj2 = { a: 1, c: { d: 3 } };

    expect(compareKeys(obj1, obj2)).toEqual(['b']);
  });

  it('should return missing keys at nested levels', () => {
    const obj1 = { a: { b: 2, c: { d: 3 } }, e: 4 };
    const obj2 = { a: { b: 2 } };

    expect(compareKeys(obj1, obj2)).toEqual(['a.c', 'e']);
  });

  it('should return missing keys at very deep nested levels', () => {
    const obj1 = { a: { b: 2, c: { d: 3, e: 5, f: 6, k: { l: 4 } } }, e: 4 };
    const obj2 = { a: { b: 2 } };

    expect(compareKeys(obj1, obj2)).toEqual(['a.c', 'e']);
  });
  it('should return an empty array if both objects are empty', () => {
    const obj1 = {};
    const obj2 = {};

    expect(compareKeys(obj1, obj2)).toEqual([]);
  });
});
