import shared from '../../../common';
import { v4 as generateUUID } from 'uuid';

describe('refPush', () => {
  it('it hashes one object into another by its id', () => {
    let referenceObject = {};
    let objectToHash = {
      a: 1,
      id: generateUUID(),
    };

    shared.refPush(referenceObject, objectToHash);

    expect(referenceObject[objectToHash.id].a).to.equal(objectToHash.a);
    expect(referenceObject[objectToHash.id].id).to.equal(objectToHash.id);
    expect(referenceObject[objectToHash.id].sort).to.equal(0);
  });

  it('it hashes one object into another by a uuid when object does not have an id', () => {
    let referenceObject = {};
    let objectToHash = {
      a: 1,
    };

    shared.refPush(referenceObject, objectToHash);

    let hashedObject = _.find(referenceObject, (hashedItem) => {
      return objectToHash.a === hashedItem.a;
    });

    expect(hashedObject.a).to.equal(objectToHash.a);
    expect(hashedObject.id).to.equal(objectToHash.id);
    expect(hashedObject.sort).to.equal(0);
  });

  it('it hashes one object into another by a id and gives it the highest sort value', () => {
    let referenceObject = {};
    referenceObject[generateUUID()] = { b: 2, sort: 1 };
    let objectToHash = {
      a: 1,
    };

    shared.refPush(referenceObject, objectToHash);

    let hashedObject = _.find(referenceObject, (hashedItem) => {
      return objectToHash.a === hashedItem.a;
    });

    expect(hashedObject.a).to.equal(objectToHash.a);
    expect(hashedObject.id).to.equal(objectToHash.id);
    expect(hashedObject.sort).to.equal(2);
  });
});
