packages feed

nostr-1.3.0.0: test/Test/Nostr/Nip57Spec.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Nostr.Nip57Spec (spec) where

import Test.Hspec
import Nostr.Nip57
import Nostr.Event
import qualified Data.Text as T

dummyEvent :: Kind -> [Tag] -> Event
dummyEvent k tags = Event
  { eventId = EventId "id"
  , eventPubkey = PubKey "pubkey"
  , eventCreatedAt = 123456
  , eventKind = k
  , eventTags = tags
  , eventContent = ""
  , eventSig = Signature "sig"
  }

spec :: Spec
spec = do
  describe "Nostr.Nip57" $ do
    
    describe "Zap Request" $ do
      it "parses a valid Zap Request" $ do
        let tags = [ ["relays", "wss://relay1.com", "wss://relay2.com"]
                   , ["amount", "1000"]
                   , ["lnurl", "lnurl1..."]
                   , ["p", "recipient_pubkey"]
                   , ["e", "event_id"]
                   ]
        let ev = dummyEvent 9734 tags
        let parsed = parseZapRequest ev
        parsed `shouldBe` Just (ZapRequest 
          { zrRelays = ["wss://relay1.com", "wss://relay2.com"]
          , zrAmount = Just "1000"
          , zrLnurl = Just "lnurl1..."
          , zrP = "recipient_pubkey"
          , zrE = Just "event_id"
          })
          
      it "fails on wrong kind" $ do
        let ev = dummyEvent 1 []
        parseZapRequest ev `shouldBe` Nothing

    describe "Zap Receipt" $ do
      it "parses a valid Zap Receipt" $ do
        let tags = [ ["bolt11", "lnbc10n..."]
                   , ["preimage", "1234567890abcdef"]
                   , ["description", "{\"kind\":9734}"]
                   , ["p", "recipient_pubkey"]
                   , ["e", "event_id"]
                   ]
        let ev = dummyEvent 9735 tags
        let parsed = parseZapReceipt ev
        parsed `shouldBe` Just (ZapReceipt
          { zrpBolt11 = "lnbc10n..."
          , zrpPreimage = Just "1234567890abcdef"
          , zrpDescription = "{\"kind\":9734}"
          , zrpP = "recipient_pubkey"
          , zrpE = Just "event_id"
          })