Files
openwork/apps/app/tests/cloud-provider-sync-triggers.test.ts

40 lines
1.5 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { denSettingsChangedEvent } from "../src/app/lib/den-session-events";
import { subscribeCloudProviderSyncTriggers } from "../src/react-app/domains/cloud/use-cloud-provider-auto-sync";
describe("cloud provider sync triggers", () => {
test("reconciles on settings, focus, online, visible, and coarse interval transitions", async () => {
const windowTarget = new EventTarget();
const documentTarget = new EventTarget();
const reasons: string[] = [];
let visible = false;
const unsubscribe = subscribeCloudProviderSyncTriggers({
windowTarget,
documentTarget,
isDocumentVisible: () => visible,
sync: (reason) => reasons.push(reason),
intervalMs: 10,
});
windowTarget.dispatchEvent(new Event(denSettingsChangedEvent));
windowTarget.dispatchEvent(new Event("focus"));
windowTarget.dispatchEvent(new Event("online"));
documentTarget.dispatchEvent(new Event("visibilitychange"));
visible = true;
documentTarget.dispatchEvent(new Event("visibilitychange"));
expect(reasons).toEqual(["sign_in", "app_resume", "app_resume", "app_resume"]);
await Bun.sleep(25);
expect(reasons.length).toBeGreaterThan(4);
expect(reasons.at(-1)).toBe("app_resume");
unsubscribe();
const reasonCount = reasons.length;
windowTarget.dispatchEvent(new Event("focus"));
await Bun.sleep(15);
expect(reasons).toHaveLength(reasonCount);
});
});