33 lines · 1.0 KB
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);
  });
});