import React from 'react' import { Grid } from '.' import type { UseGridReturn } from '../../hooks' import { createGrid, useGrid } from '../../hooks' import { render } from '../../utils/test-utils' import type { GridRowDropInfo } from '../../types' jest.mock('../../hooks', () => { const actual = jest.requireActual('../../hooks') return { ...actual, useGrid: jest.fn(), } }) describe('Grid event binding', () => { let grid: UseGridReturn beforeEach(async () => { grid = createGrid() jest.mocked(useGrid).mockReturnValue(grid) }) describe('event binding', () => { describe('rowDrag.onDrop binding to onRowDrop', () => { it('should clean up subscriptions when changing function', () => { const onDrop = jest.fn() // Using two different function references to test // cleanup of subscription const onDrop1 = (info: GridRowDropInfo) => onDrop(info) const onDrop2 = (info: GridRowDropInfo) => onDrop(info) const { rerender } = render( ) rerender( ) grid.events.emit('onRowDrop', { draggedRowIds: [], draggedRows: [], targetIndex: null, targetParent: null, targetParentId: null, resultIds: null, droppedAfterId: null, }) expect(onDrop).toHaveBeenCalledTimes(1) expect(onDrop).toHaveBeenCalledWith({ draggedRowIds: [], draggedRows: [], targetIndex: null, targetParent: null, targetParentId: null, resultIds: null, droppedAfterId: null, }) }) }) }) })