27 lines · 883 B
import { beforeEach, describe, expect, mock, test } from "bun:test";
import { fakeD1 } from "../metering/fake-d1.test-helper";

let d1 = fakeD1();
const fakeEnv: Record<string, unknown> = {
  get DB() {
    return d1.binding;
  },
  CACHE_BYTES_PER_REPO: "1000",
};
mock.module("cloudflare:workers", () => ({ DurableObject: class {}, env: fakeEnv, waitUntil: () => undefined }));

const { assertCacheFits } = await import("./cache-api");

beforeEach(() => {
  d1 = fakeD1();
});

describe("cache quota", () => {
  test("in-flight reservations count, so concurrent saves can't overshoot", async () => {
    d1.db.exec("INSERT INTO action_caches VALUES ('r1', 600, 'a'), ('r1', -300, 'b')");
    await assertCacheFits("r1");
    d1.db.exec("INSERT INTO action_caches VALUES ('r1', -200, 'c')");
    await expect(assertCacheFits("r1")).rejects.toMatchObject({ status: 413 });
  });
});