import {describe, it, expect} from "vitest" import {makeSecret, PROFILE, NOTE} from "@welshman/util" import type {TrustedEvent} from "@welshman/util" import {Nip01Signer} from "@welshman/signer" import {Profile, displayPubkey} from "../src/Profile" const signer = new Nip01Signer(makeSecret()) const pubkey = "ee".repeat(32) const makeEvent = (overrides: Partial = {}): TrustedEvent => ({ id: "ff".repeat(32), pubkey, created_at: 0, kind: PROFILE, tags: [], content: "", sig: "00".repeat(64), ...overrides, }) as TrustedEvent describe("Profile", () => { it("parses and re-signs profile content", async () => { const event = makeEvent({ content: JSON.stringify({name: "alice", about: "hi"}), tags: [["alt", "profile"]], }) const profile = await Profile.parse(event) expect(profile.values.name).toBe("alice") expect(profile.hasName()).toBe(true) expect(profile.display()).toBe("alice") const signed = await profile.toEvent(signer) expect(signed.kind).toBe(PROFILE) expect(JSON.parse(signed.content).name).toBe("alice") // Source tags are preserved. expect(signed.tags).toEqual([["alt", "profile"]]) }) it("derives lnurl from a lud16 address", () => { const profile = Profile.init({lud16: "alice@example.com"}) expect(profile.values.lnurl).toBeTruthy() }) it("gets and sets values by key", () => { const profile = Profile.init({name: "alice"}) profile.set("about", "hello") expect(profile.get("name")).toBe("alice") expect(profile.get("about")).toBe("hello") }) it("display falls back to a shortened npub", async () => { const profile = await Profile.parse(makeEvent({content: "{}"})) expect(profile.display()).toBe(displayPubkey(pubkey)) }) it("throws on the wrong kind", async () => { await expect(Profile.parse(makeEvent({kind: NOTE}))).rejects.toThrow() }) })