UNPKG

@nostr-dev-kit/ndk

Version:

NDK - Nostr Development Kit. Includes AI Guardrails to catch common mistakes during development.

142 lines (117 loc) 5.53 kB
import { describe, expect, test } from "vitest"; import { NDKUser } from "../../user/index.js"; import type { NDKTag } from "../index.js"; import { NDKStory, NDKStorySticker, NDKStoryStickerType } from "./story.js"; const sampleUser = new NDKUser({ pubkey: "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", }); const sampleTag: NDKTag = ["sticker", "text", "Hello world!", "540,960", "500x150", "style bold", "rot 15"]; const invalidEvent = { created_at: 1740489132, content: "Very nice track.", tags: [ ["t", "music"], ["title", "Test Track"], ["artist", "Test Artist"], ["file_url", "https://raw.githubusercontent.com/nostrdude9/pay-to-play/main/test.mp3"], ["duration", "43"], ["price", "100"], ["free_seconds", "5"], ["lightning_address", "nostrdude9@coinos.io"], ["album", "Best Album Name"], ["image", "https://i.nostr.build/7AaXpMushYmjKAi1.png"], ["split", "bob111@coinos.io:50"], ], kind: 23, pubkey: "5f3e7e412eb65a638258fcec4f616a7ffe1f94bc929ce1373e63869b81cb07cf", id: "216044a95664b22368f0bf42c794cd5c38b0e553d2fb6c782b3bb316616c3006", sig: "3a0cd8904004a521efce1ca19e8ba4044c66adc077e6edcd538d28963d1c3f8bc682141f47dcf30af60c0ae6a2aecee3771a5e20bcd733cbb8b083e348e9dc37", }; describe("NDKStorySticker", () => { test("should initialize correctly from explicit type", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Pubkey); expect(sticker.type).toBe(NDKStoryStickerType.Pubkey); expect(sticker.value).toBeUndefined(); expect(sticker.position).toEqual({ x: 0, y: 0 }); expect(sticker.dimension).toEqual({ width: 0, height: 0 }); }); test("should initialize correctly from a tag", () => { const sticker = new NDKStorySticker(sampleTag); expect(sticker.type).toBe(NDKStoryStickerType.Text); expect(sticker.value).toBe("Hello world!"); expect(sticker.position).toEqual({ x: 540, y: 960 }); expect(sticker.dimension).toEqual({ width: 500, height: 150 }); expect(sticker.style).toBe("bold"); expect(sticker.rotation).toBe(15); }); test("should correctly set and get properties", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Text); sticker.value = "Test Sticker"; sticker.position = { x: 100, y: 200 }; sticker.dimension = { width: 300, height: 100 }; sticker.style = "italic"; sticker.rotation = 45; expect(sticker.value).toBe("Test Sticker"); expect(sticker.position).toEqual({ x: 100, y: 200 }); expect(sticker.dimension).toEqual({ width: 300, height: 100 }); expect(sticker.style).toBe("italic"); expect(sticker.rotation).toBe(45); }); test("should correctly serialize to tag", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Pubkey); sticker.value = sampleUser; sticker.position = { x: 250, y: 400 }; sticker.dimension = { width: 150, height: 150 }; sticker.style = "highlight"; const expectedTag: NDKTag = [ "sticker", "pubkey", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "250,400", "150x150", "style highlight", ]; expect(sticker.toTag()).toEqual(expectedTag); }); test("fromTag should return null for invalid tags", () => { const invalidTag: NDKTag = ["invalid", "tag"]; const sticker = NDKStorySticker.fromTag(invalidTag); expect(sticker).toBeNull(); }); test("isValid should return true for valid stickers", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Text); sticker.value = "Test Sticker"; sticker.position = { x: 100, y: 200 }; sticker.dimension = { width: 300, height: 100 }; expect(sticker.isValid).toBe(true); }); test("isValid should return false when dimensions are invalid", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Text); sticker.value = "Test Sticker"; sticker.position = { x: 100, y: 200 }; sticker.dimension = { width: Number.NaN, height: 100 }; expect(sticker.isValid).toBe(false); expect(sticker.hasValidDimensions()).toBe(false); expect(sticker.hasValidPosition()).toBe(true); }); test("isValid should return false when position is invalid", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Text); sticker.value = "Test Sticker"; sticker.position = { x: Number.NaN, y: 200 }; sticker.dimension = { width: 300, height: 100 }; expect(sticker.isValid).toBe(false); expect(sticker.hasValidDimensions()).toBe(true); expect(sticker.hasValidPosition()).toBe(false); }); test("toTag should throw an error for invalid stickers", () => { const sticker = new NDKStorySticker(NDKStoryStickerType.Text); sticker.value = "Test Sticker"; sticker.position = { x: Number.NaN, y: 200 }; sticker.dimension = { width: 300, height: 100 }; expect(() => sticker.toTag()).toThrow("Invalid sticker: position is invalid"); }); test("isValid should return false when event is invalid", () => { const story = new NDKStory(undefined, invalidEvent); expect(story.isValid).toBe(false); }); });