import * as React from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { useRecordSelection } from './useRecordSelection';
import { StoreSetter, StoreContextProvider, memoryStore } from '../../store';
describe('useRecordSelection', () => {
const wrapper = ({ children }) => (
{children}
);
it('should return empty array by default', () => {
const { result } = renderHook(() => useRecordSelection('foo'), {
wrapper,
});
const [selected] = result.current;
expect(selected).toEqual([]);
});
it('should use the stored value', () => {
const { result } = renderHook(() => useRecordSelection('foo'), {
wrapper: ({ children }) => (
{children}
),
});
const [selected] = result.current;
expect(selected).toEqual([123, 456]);
});
it('should allow to select/unselect a record', () => {
const { result } = renderHook(() => useRecordSelection('foo'), {
wrapper,
});
const [selected1, { select }] = result.current;
expect(selected1).toEqual([]);
select([123, 456]);
const [selected2, { unselect }] = result.current;
expect(selected2).toEqual([123, 456]);
unselect([123]);
const [selected3] = result.current;
expect(selected3).toEqual([456]);
});
it('should allow to toggle a record', () => {
const { result } = renderHook(() => useRecordSelection('foo'), {
wrapper,
});
const [selected1, { toggle }] = result.current;
expect(selected1).toEqual([]);
toggle(123);
const [selected2] = result.current;
expect(selected2).toEqual([123]);
toggle(456);
const [selected3] = result.current;
expect(selected3).toEqual([123, 456]);
toggle(123);
const [selected4] = result.current;
expect(selected4).toEqual([456]);
});
it('should allow to clear the selection', () => {
const { result } = renderHook(() => useRecordSelection('foo'), {
wrapper,
});
const [, { toggle, clearSelection }] = result.current;
toggle(123);
const [selected2] = result.current;
expect(selected2).toEqual([123]);
clearSelection();
const [selected3] = result.current;
expect(selected3).toEqual([]);
});
});