import { randomBytes } from "node:crypto";
import { describe, expect, it } from "vitest";
import { MessageReferenceCodec } from "../src/mail/reference.js";

describe("message references", () => {
  it("round-trips a reference and rejects tampering", async () => {
    const codec = new MessageReferenceCodec(new Uint8Array(randomBytes(48)));
    const reference = {
      mailbox_id: "mailbox-1",
      folder: "INBOX",
      uid: 42,
      uid_validity: "123456",
    };
    const token = await codec.encode(reference);
    await expect(codec.decode(token)).resolves.toEqual(reference);

    const tampered = `${token.slice(0, -1)}${token.endsWith("a") ? "b" : "a"}`;
    await expect(codec.decode(tampered)).rejects.toThrow("Invalid message_ref");
  });
});
