Paginate beta history and refresh pages from events
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { afterEach, expect, it, vi } from 'vitest';
|
||||
import { betaUpdates } from '../../src/lib/ui/beta-updates.js';
|
||||
afterEach(() => { vi.useRealTimers(); vi.unstubAllGlobals(); });
|
||||
it('refreshes relevant pushes and reconnects without polling, pauses hidden tabs, and cleans up', async () => {
|
||||
vi.useFakeTimers();
|
||||
const window = new EventTarget(), document = Object.assign(new EventTarget(), { hidden: false });
|
||||
vi.stubGlobal('window', window); vi.stubGlobal('document', document);
|
||||
let finish!: () => void;
|
||||
const load = vi.fn(() => new Promise<void>(resolve => { finish = resolve; }));
|
||||
const stop = betaUpdates(load, () => 7);
|
||||
const change = (id: number) => window.dispatchEvent(Object.assign(new Event('ec:beta-changed'), { detail: { betaId: id } }));
|
||||
try {
|
||||
change(2); await vi.advanceTimersByTimeAsync(1000); expect(load).not.toHaveBeenCalled();
|
||||
change(7); change(7); await vi.advanceTimersByTimeAsync(200); expect(load).toHaveBeenCalledTimes(1);
|
||||
change(7); await vi.advanceTimersByTimeAsync(200); expect(load).toHaveBeenCalledTimes(1);
|
||||
finish(); await vi.advanceTimersByTimeAsync(200); expect(load).toHaveBeenCalledTimes(2);
|
||||
finish(); await vi.advanceTimersByTimeAsync(30000); expect(load).toHaveBeenCalledTimes(2);
|
||||
document.hidden = true; change(7); await vi.advanceTimersByTimeAsync(1000); expect(load).toHaveBeenCalledTimes(2);
|
||||
document.hidden = false; document.dispatchEvent(new Event('visibilitychange'));
|
||||
await vi.advanceTimersByTimeAsync(200); expect(load).toHaveBeenCalledTimes(3); finish();
|
||||
window.dispatchEvent(new Event('ec:pipeline-connected'));
|
||||
await vi.advanceTimersByTimeAsync(200); expect(load).toHaveBeenCalledTimes(4); finish();
|
||||
stop(); change(7); await vi.advanceTimersByTimeAsync(1000); expect(load).toHaveBeenCalledTimes(4);
|
||||
} finally { stop(); }
|
||||
});
|
||||
Reference in New Issue
Block a user