63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
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();
|
|
}
|
|
});
|