branch: main
cache.spec.ts
2080 bytesRaw
import { describe, test, expect } from "vitest";
import { mf, mfUrl } from "./mf";

describe("cache", () => {
  test("cache example", async () => {
    const resp = await mf.dispatchFetch(`${mfUrl}cache-example`);
    const { timestamp } = (await resp.json()) as { timestamp: unknown };

    for (let i = 0; i < 5; i++) {
      const resp = await mf.dispatchFetch(`${mfUrl}cache-example`);
      const data = (await resp.json()) as { timestamp: unknown };

      expect(data.timestamp).toBe(timestamp);
    }
  });

  test("cache stream", async () => {
    const resp = await mf.dispatchFetch(`${mfUrl}cache-stream`);
    const body = await resp.text();

    for (let i = 0; i < 5; i++) {
      const resp = await mf.dispatchFetch(`${mfUrl}cache-stream`);
      const cachedBody = await resp.text();

      expect(cachedBody).toBe(body);
    }
  });

  test("cache api", async () => {
    const key = "example.org";
    const getEndpoint = `${mfUrl}cache-api/get/${key}`;
    const putEndpoint = `${mfUrl}cache-api/put/${key}`;
    const deleteEndpoint = `${mfUrl}cache-api/delete/${key}`;

    // First time should result in cache miss
    let resp = await mf.dispatchFetch(getEndpoint);
    expect(await resp.text()).toBe("cache miss");

    // Add key to cache
    resp = await mf.dispatchFetch(putEndpoint, { method: "put" });
    const { timestamp: expectedTimestamp } = (await resp.json()) as {
      timestamp: unknown;
    };

    // Should now be cache hit
    resp = await mf.dispatchFetch(getEndpoint);
    let data = (await resp.json()) as { timestamp: unknown };
    expect(data.timestamp).toBe(expectedTimestamp);

    // Delete key from cache
    resp = await mf.dispatchFetch(deleteEndpoint, { method: "post" });
    expect(await resp.text()).toBe('"Success"');

    // Delete key from cache
    resp = await mf.dispatchFetch(getEndpoint);
    expect(await resp.text()).toBe("cache miss");

    // Another delete should fail
    resp = await mf.dispatchFetch(deleteEndpoint, { method: "post" });
    expect(await resp.text()).toBe('"ResponseNotFound"');
  });
});