const expect = require('expect');
const uniqueElementsBy = require('./uniqueElementsBy.js');

test('uniqueElementsBy is a Function', () => {
  expect(uniqueElementsBy).toBeInstanceOf(Function);
});

test('uniqueElementsBy works for properties', () => {
  expect(
    uniqueElementsBy(
      [
        { id: 0, value: 'a' },
        { id: 1, value: 'b' },
        { id: 2, value: 'c' },
        { id: 1, value: 'd' },
        { id: 0, value: 'e' }
      ],
      (a, b) => a.id === b.id
    )
  ).toEqual([{ id: 0, value: 'a' }, { id: 1, value: 'b' }, { id: 2, value: 'c' }]);
});

test('uniqueElementsBy works for nested properties', () => {
  expect(
    uniqueElementsBy(
      [
        { id: 0, value: 'a', n: { p: 0 } },
        { id: 1, value: 'b', n: { p: 1 } },
        { id: 2, value: 'c', n: { p: 2 } },
        { id: 1, value: 'd', n: { p: 0 } },
        { id: 0, value: 'e', n: { p: 1 } }
      ],
      (a, b) => a.id === b.id
    )
  ).toEqual([
    { id: 0, value: 'a', n: { p: 0 } },
    { id: 1, value: 'b', n: { p: 1 } },
    { id: 2, value: 'c', n: { p: 2 } }
  ]);
});
