// @ts-nocheck import test from 'node:test'; import assert from 'node:assert/strict'; import { makePagedData } from '../src/classes/CommandRegistry'; test('makePagedData packs many small items into one page up to the count cap', () => { const items = Array.from({ length: 1500 }, (_, i) => ({ id: i, url: 'chrome://newtab/' })); const page = makePagedData(items, { offset: 0, limit: 1000 }); assert.equal(page.items.length, 1000); // count cap, well under the byte budget assert.equal(page.nextOffset, 1000); assert.equal(page.total, 1500); }); test('makePagedData splits on the byte budget for oversized items', () => { // Each item ~200KB; only a few fit under the 768KB budget per page. const big = 'x'.repeat(200 * 1024); const items = Array.from({ length: 10 }, (_, i) => ({ id: i, favIconUrl: big })); const page = makePagedData(items, { offset: 0, limit: 1000 }); assert.ok(page.items.length >= 1 && page.items.length < 10, `expected partial page, got ${page.items.length}`); assert.equal(page.nextOffset, page.items.length); }); test('makePagedData always advances by at least one item', () => { // A single item larger than the whole budget must still be returned alone. const huge = 'x'.repeat(2 * 1024 * 1024); const items = [{ id: 0, favIconUrl: huge }, { id: 1 }]; const page = makePagedData(items, { offset: 0, limit: 1000 }); assert.equal(page.items.length, 1); assert.equal(page.nextOffset, 1); }); test('makePagedData reports null nextOffset on the final page', () => { const items = [{ id: 0 }, { id: 1 }, { id: 2 }]; const page = makePagedData(items, { offset: 2, limit: 1000 }); assert.equal(page.items.length, 1); assert.equal(page.nextOffset, null); });