Files
RedditBot/tests/dashboard/realtime-fallback.test.ts
T

39 lines
1.2 KiB
TypeScript

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);
});
});