54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
|
|
|
|
vi.mock("@/modules/atproto/getAuthor", () => ({
|
|
getAuthor: vi.fn()
|
|
}))
|
|
|
|
import { getAuthor } from "@/modules/atproto/getAuthor"
|
|
|
|
import { getUrl } from "./getUrl"
|
|
|
|
describe("getUrl", () => {
|
|
beforeEach(() => {
|
|
vi.mocked(getAuthor).mockReset()
|
|
})
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
it("returns null when the author cannot be resolved", async () => {
|
|
vi.mocked(getAuthor).mockResolvedValue(null)
|
|
expect(
|
|
await getUrl({ did: "did:plc:abc", rkey: "r1" })
|
|
).toBeNull()
|
|
})
|
|
|
|
it("builds a getRecord URL with the right query params on the author's PDS", async () => {
|
|
vi.mocked(getAuthor).mockResolvedValue({
|
|
handle: "alice.bsky.social",
|
|
pds: "https://pds.example.com"
|
|
})
|
|
|
|
const url = await getUrl({ did: "did:plc:abc", rkey: "rkey1" })
|
|
const parsed = new URL(url as string)
|
|
|
|
expect(parsed.origin).toBe("https://pds.example.com")
|
|
expect(parsed.pathname).toBe("/xrpc/com.atproto.repo.getRecord")
|
|
expect(parsed.searchParams.get("repo")).toBe("did:plc:abc")
|
|
expect(parsed.searchParams.get("collection")).toBe("space.remanso.note")
|
|
expect(parsed.searchParams.get("rkey")).toBe("rkey1")
|
|
})
|
|
|
|
it("passes the did to getAuthor", async () => {
|
|
vi.mocked(getAuthor).mockResolvedValue({
|
|
handle: "h",
|
|
pds: "https://pds.example.com"
|
|
})
|
|
|
|
await getUrl({ did: "did:web:example.com", rkey: "r2" })
|
|
|
|
expect(getAuthor).toHaveBeenCalledWith("did:web:example.com")
|
|
})
|
|
})
|