Files
openchamber/packages/web/server/lib/notifications/push-runtime.test.js
T

46 lines
1.4 KiB
JavaScript
Raw Normal View History

import { afterEach, describe, expect, it, vi } from 'vitest';
import { createPushRuntime } from './push-runtime.js';
const createRuntime = () => createPushRuntime({
fsPromises: {
mkdir: vi.fn(async () => {}),
readFile: vi.fn(async () => JSON.stringify({ version: 1, subscriptionsBySession: {} })),
writeFile: vi.fn(async () => {}),
},
path: { dirname: () => '/tmp' },
webPush: {
generateVAPIDKeys: vi.fn(() => ({ publicKey: 'public', privateKey: 'private' })),
sendNotification: vi.fn(async () => {}),
setVapidDetails: vi.fn(),
},
PUSH_SUBSCRIPTIONS_FILE_PATH: '/tmp/push-subscriptions.json',
readSettingsFromDiskMigrated: vi.fn(async () => ({})),
writeSettingsToDisk: vi.fn(async () => {}),
});
afterEach(() => {
vi.useRealTimers();
});
describe('push runtime visibility tracking', () => {
it('keeps visible UI state when another client reports hidden', () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'));
const runtime = createRuntime();
runtime.updateUiVisibility('visible-client', true);
runtime.updateUiVisibility('hidden-client', false);
expect(runtime.isAnyUiVisible()).toBe(true);
expect(runtime.isUiVisible('visible-client')).toBe(true);
expect(runtime.isUiVisible('hidden-client')).toBe(false);
vi.advanceTimersByTime(30_001);
expect(runtime.isAnyUiVisible()).toBe(false);
expect(runtime.isUiVisible('visible-client')).toBe(false);
});
});