import { renderHook } from '@testing-library/react-hooks';

import useArrayRef from '../hooks/useArrayRef';

describe('useArrayRef hook', () => {
  it('should return an array with ref stored at every index', () => {
    const { rerender, result } = renderHook(({ size }) => useArrayRef(size), {
      initialProps: { size: 3 },
    });
    expect(result.current.length).toBe(3);
    expect(result.current).toEqual(expect.arrayContaining([{ current: null }]));
    rerender({ size: 4 });
    expect(result.current.length).toBe(4);
  });
  it('should return the previous instance after rerender if size is same', () => {
    const { rerender, result } = renderHook(({ size }) => useArrayRef(size), {
      initialProps: { size: 3 },
    });
    const result1 = result.current;
    rerender({ size: 3 });
    expect(result.current).toStrictEqual(result1);
  });
  it('should remove copy the previous refs when size changes after rerender', () => {
    const { rerender, result } = renderHook(({ size }) => useArrayRef(size), {
      initialProps: { size: 3 },
    });
    result.current[0].current = 1;
    rerender({ size: 4 });
    expect(result.current[0].current).toBe(1);
  });
});