UNPKG

@indielayer/ui

Version:

Indielayer UI Components with Tailwind CSS build for Vue 3

142 lines (117 loc) 3.45 kB
import { describe, expect, test, vi } from 'vitest' import { scanForUnloadedIndices } from './scanForUnloadedIndices' describe('scanForUnloadedIndices', () => { test('should return an empty array for a range of rows that have all been loaded', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(2) return true }) expect( scanForUnloadedIndices({ minimumBatchSize: 0, isRowLoaded, rowCount: 3, startIndex: 0, stopIndex: 2, }), ).toEqual([]) expect(isRowLoaded).toHaveBeenCalledTimes(3) }) test('return a range of only 1 unloaded row', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(2) return index !== 1 }) expect( scanForUnloadedIndices({ minimumBatchSize: 0, isRowLoaded, rowCount: 3, startIndex: 0, stopIndex: 2, }), ).toEqual([{ startIndex: 1, stopIndex: 1 }]) expect(isRowLoaded).toHaveBeenCalledTimes(3) }) test('return a range of multiple unloaded rows', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(2) return index === 2 }) expect( scanForUnloadedIndices({ minimumBatchSize: 0, isRowLoaded, rowCount: 3, startIndex: 0, stopIndex: 2, }), ).toEqual([{ startIndex: 0, stopIndex: 1 }]) expect(isRowLoaded).toHaveBeenCalledTimes(3) }) test('return multiple ranges of unloaded rows', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(6) switch (index) { case 0: case 3: case 5: { return true } } return false }) expect( scanForUnloadedIndices({ minimumBatchSize: 0, isRowLoaded, rowCount: 7, startIndex: 0, stopIndex: 6, }), ).toEqual([ { startIndex: 1, stopIndex: 2 }, { startIndex: 4, stopIndex: 4 }, { startIndex: 6, stopIndex: 6 }, ]) expect(isRowLoaded).toHaveBeenCalledTimes(7) }) test('return respect the minimum batch size param when fetching rows ahead', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(9) return index < 4 }) expect( scanForUnloadedIndices({ minimumBatchSize: 4, isRowLoaded, rowCount: 10, startIndex: 0, stopIndex: 4, }), ).toEqual([{ startIndex: 4, stopIndex: 7 }]) expect(isRowLoaded).toHaveBeenCalledTimes(8) }) test('return respect the minimum batch size param when fetching rows behind', () => { const isRowLoaded = vi.fn((index: number) => { expect(index).toBeGreaterThanOrEqual(0) expect(index).toBeLessThanOrEqual(9) return index > 6 }) expect( scanForUnloadedIndices({ minimumBatchSize: 4, isRowLoaded, rowCount: 10, startIndex: 6, stopIndex: 9, }), ).toEqual([{ startIndex: 3, stopIndex: 6 }]) expect(isRowLoaded).toHaveBeenCalledTimes(7) }) })