40 lines
1.5 KiB
TypeScript
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);
|
|
});
|
|
});
|