- Rename 132 *.vitest.mjs -> *.vitest.ts - Rename vitest.setup.mjs -> vitest.setup.ts - Rename helpers/vitestEnvironment.mjs -> vitestEnvironment.ts - Delete settings_store.test.mjs (Node test runner, superseded by .vitest.ts) - Fix .mjs imports in vitest.setup.ts and grid_loader_adaptive_paging.vitest.ts Config updates: - vitest.config.mjs: setupFiles, include, coverage.include -> .ts - tsconfig.test.json: new dedicated config for test files (strict:false) - knip.json: update project pattern for tests - package.json: add typecheck:tests script (audit-only)
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { ref } from "vue";
|
|
|
|
import { useInfiniteTrigger } from "../vue/grid/useInfiniteTrigger.js";
|
|
|
|
describe("useInfiniteTrigger", () => {
|
|
it("loads only when enabled and allowed", async () => {
|
|
const enabled = ref(true);
|
|
const canLoad = ref(true);
|
|
const loadMore = vi.fn(async () => {});
|
|
const trigger = useInfiniteTrigger({
|
|
enabled,
|
|
canLoad,
|
|
loadMore,
|
|
});
|
|
|
|
await trigger.maybeLoad();
|
|
expect(loadMore).toHaveBeenCalledTimes(1);
|
|
|
|
enabled.value = false;
|
|
await trigger.maybeLoad();
|
|
expect(loadMore).toHaveBeenCalledTimes(1);
|
|
|
|
enabled.value = true;
|
|
canLoad.value = false;
|
|
await trigger.maybeLoad();
|
|
expect(loadMore).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("coalesces concurrent load attempts", async () => {
|
|
let resolveLoad;
|
|
const loadMore = vi.fn(
|
|
() =>
|
|
new Promise((resolve) => {
|
|
resolveLoad = resolve;
|
|
}),
|
|
);
|
|
const trigger = useInfiniteTrigger({ loadMore });
|
|
|
|
const first = trigger.maybeLoad();
|
|
const second = trigger.maybeLoad();
|
|
|
|
expect(loadMore).toHaveBeenCalledTimes(1);
|
|
resolveLoad();
|
|
await first;
|
|
await second;
|
|
});
|
|
});
|