import { describe, expect, it, vi } from "vitest";
import { resolveRepoViewFromParams } from "#lib/server/repo.ts";
import type { Fetch } from "#lib/fetch.ts";
const OWNER_DID = "did:plc:kelp";
const json = (body: unknown): Response =>
new Response(JSON.stringify(body), { headers: { "content-type": "application/json" } });
const event = (handle: string) => {
const fetchMock = vi.fn<Fetch>().mockImplementation(async (input) => {
const target = String(input);
if (target.includes("resolveMiniDoc")) {
return json({ did: OWNER_DID, handle: "handle.invalid" });
}
if (target.includes("getRepoByName")) {
return json({
uri: "at://did:plc:reef/org.tangled.repo.manifest/self",
value: {
$type: "org.tangled.repo.manifest",
declaration: { owner: OWNER_DID, name: "reef" },
createdAt: "2026-10-01T00:00:00Z"
}
});
}
return json({});
});
return {
url: new URL(`http://web.test/${handle}/reef`),
params: { handle, repo: "reef" },
fetch: fetchMock
};
};
describe("resolveRepoViewFromParams", () => {
it("accepts DID as handle param", async () => {
const { doc, view } = await resolveRepoViewFromParams(event(OWNER_DID) as never);
expect(doc.did).toBe(OWNER_DID);
expect(view.uri).toBe("at://did:plc:reef/org.tangled.repo.manifest/self");
});
it("404 on BS instead of tryna resolve as actors", async () => {
const bare = event("bareword");
await expect(resolveRepoViewFromParams(bare as never)).rejects.toMatchObject({
status: 404
});
expect(bare.fetch).not.toHaveBeenCalled();
});
});