import { describe, expect, mock, test } from "bun:test";
mock.module("cloudflare:workers", () => ({ DurableObject: class {}, env: {} }));
const { JobDoorbell } = await import("./job-doorbell-do");
function doorbell() {
return Reflect.construct(JobDoorbell, [{}, {}]) as InstanceType<typeof JobDoorbell>;
}
describe("JobDoorbell", () => {
test("a fresh doorbell rings so a cold start never strands queued jobs", async () => {
expect((await doorbell().check()).ringing).toBe(true);
});
test("silencing stops polling until the next ring", async () => {
const bell = doorbell();
const first = await bell.check();
await bell.silence(first.version);
expect((await bell.check()).ringing).toBe(false);
await bell.ring();
expect((await bell.check()).ringing).toBe(true);
});
test("a ring between check and silence is not lost", async () => {
const bell = doorbell();
const seen = await bell.check();
await bell.ring();
await bell.silence(seen.version);
expect((await bell.check()).ringing).toBe(true);
});
});