UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

58 lines 2.27 kB
import { vi } from 'vitest'; import { batchExecute } from './batchExecute.js'; vi.useFakeTimers(); describe('batchExecute', () => { let mockExecuteFn; beforeEach(() => { mockExecuteFn = vi.fn(); }); afterEach(() => { vi.clearAllTimers(); vi.clearAllMocks(); }); it('should process each item in batches of the specified size', async () => { const items = Array.from({ length: 25 }, (_, i) => i); const batchSize = 10; const delayMs = 1000; batchExecute(items, batchSize, delayMs, mockExecuteFn); for (let i = 0; i < 2; i++) { vi.advanceTimersByTime(delayMs); await Promise.resolve(); } expect(mockExecuteFn).toHaveBeenCalledTimes(items.length); items.forEach((item, index) => { expect(mockExecuteFn).toHaveBeenNthCalledWith(index + 1, item); }); }); it('should delay between each batch', async () => { const items = Array.from({ length: 15 }, (_, i) => i); const batchSize = 5; const delayMs = 1000; batchExecute(items, batchSize, delayMs, mockExecuteFn); expect(mockExecuteFn).toHaveBeenCalledTimes(5); vi.advanceTimersByTime(delayMs); await Promise.resolve(); expect(mockExecuteFn).toHaveBeenCalledTimes(10); vi.advanceTimersByTime(delayMs); await Promise.resolve(); expect(mockExecuteFn).toHaveBeenCalledTimes(15); }); it('should handle empty items array without calling executeFn', async () => { const items = []; const batchSize = 10; const delayMs = 1000; await batchExecute(items, batchSize, delayMs, mockExecuteFn); expect(mockExecuteFn).not.toHaveBeenCalled(); }); it('should handle a batch size larger than the number of items', async () => { const items = [1, 2, 3]; const batchSize = 10; const delayMs = 1000; batchExecute(items, batchSize, delayMs, mockExecuteFn); expect(mockExecuteFn).toHaveBeenCalledTimes(items.length); items.forEach((item, index) => { expect(mockExecuteFn).toHaveBeenNthCalledWith(index + 1, item); }); }); }); //# sourceMappingURL=batchExecute.test.js.map