import { describe, expect, it, beforeAll, beforeEach, vi } from 'vitest'; import { createWrapper } from 'app/test/vitest/helper'; import VnTable from 'src/components/VnTable/VnTable.vue'; describe('VnTable', () => { let wrapper; let vm; beforeAll(() => { wrapper = createWrapper(VnTable, { propsData: { columns: [], }, attrs: { 'data-key': 'test', }, }); vm = wrapper.vm; vi.mock('src/composables/useFilterParams', () => { return { useFilterParams: vi.fn(() => ({ params: {}, orders: {}, })), }; }); }); beforeEach(() => (vm.selected = [])); describe('handleSelection()', () => { const rows = [ { $index: 0 }, { $index: 1 }, { $index: 2 }, { $index: 3 }, { $index: 4 }, ]; it('should add rows to selected when shift key is pressed and rows are added in ascending order', () => { const selectedRows = [{ $index: 1 }]; vm.handleSelection( { evt: { shiftKey: true }, added: true, rows: selectedRows }, rows, ); expect(vm.selected).toEqual([{ $index: 0 }]); }); it('should add rows to selected when shift key is pressed and rows are added in descending order', () => { const selectedRows = [{ $index: 3 }]; vm.handleSelection( { evt: { shiftKey: true }, added: true, rows: selectedRows }, rows, ); expect(vm.selected).toEqual([{ $index: 0 }, { $index: 1 }, { $index: 2 }]); }); it('should not add rows to selected when shift key is not pressed', () => { const selectedRows = [{ $index: 1 }]; vm.handleSelection( { evt: { shiftKey: false }, added: true, rows: selectedRows }, rows, ); expect(vm.selected).toEqual([]); }); it('should not add rows to selected when rows are not added', () => { const selectedRows = [{ $index: 1 }]; vm.handleSelection( { evt: { shiftKey: true }, added: false, rows: selectedRows }, rows, ); expect(vm.selected).toEqual([]); }); it('should add all rows between the smallest and largest selected indexes', () => { vm.selected = [{ $index: 1 }, { $index: 3 }]; const selectedRows = [{ $index: 4 }]; vm.handleSelection( { evt: { shiftKey: true }, added: true, rows: selectedRows }, rows, ); expect(vm.selected).toEqual([{ $index: 1 }, { $index: 3 }, { $index: 2 }]); }); }); });