import { describe, expect, it, vi } from 'vitest'; import { createVisibilityAwarePollingFallback } from '../../apps/dashboard/src/features/operations/realtime-fallback.js'; describe('visibility-aware realtime fallback', () => { it('polls only while stale and visible, including immediately on returning visible', () => { let visible = false; let interval: (() => void) | undefined; let visibilityListener: (() => void) | undefined; const poll = vi.fn(); const fallback = createVisibilityAwarePollingFallback({ intervalMs: 5_000, poll, scheduler: { setInterval(callback) { interval = callback; return 'timer'; }, clearInterval: vi.fn(), }, visibility: { isVisible: () => visible, subscribe(listener) { visibilityListener = listener; return vi.fn(); }, }, }); fallback.start(); fallback.setStale(true); interval?.(); expect(poll).not.toHaveBeenCalled(); visible = true; visibilityListener?.(); expect(poll).toHaveBeenCalledOnce(); interval?.(); expect(poll).toHaveBeenCalledTimes(2); fallback.setStale(false); interval?.(); expect(poll).toHaveBeenCalledTimes(2); }); });