packages feed

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

{-# LANGUAGE OverloadedStrings #-}

module Test.Nostr.Nip65Spec (spec) where

import Test.Hspec
import Nostr.Nip65

spec :: Spec
spec = do
  describe "Nostr.Nip65" $ do
    
    describe "Tag Parsing and Creation" $ do
      it "creates tag for BothMarker" $ do
        let entry = RelayListEntry "wss://relay.damus.io" BothMarker
        mkRelayListTag entry `shouldBe` ["r", "wss://relay.damus.io"]
        
      it "creates tag for ReadMarker" $ do
        let entry = RelayListEntry "wss://relay.damus.io" ReadMarker
        mkRelayListTag entry `shouldBe` ["r", "wss://relay.damus.io", "read"]
        
      it "creates tag for WriteMarker" $ do
        let entry = RelayListEntry "wss://relay.damus.io" WriteMarker
        mkRelayListTag entry `shouldBe` ["r", "wss://relay.damus.io", "write"]

      it "parses tag for BothMarker" $ do
        let tag = ["r", "wss://relay.damus.io"]
        parseRelayListTag tag `shouldBe` Just (RelayListEntry "wss://relay.damus.io" BothMarker)
        
      it "parses tag for ReadMarker" $ do
        let tag = ["r", "wss://relay.damus.io", "read"]
        parseRelayListTag tag `shouldBe` Just (RelayListEntry "wss://relay.damus.io" ReadMarker)

      it "parses tag for WriteMarker" $ do
        let tag = ["r", "wss://relay.damus.io", "write"]
        parseRelayListTag tag `shouldBe` Just (RelayListEntry "wss://relay.damus.io" WriteMarker)

      it "rejects invalid tags" $ do
        parseRelayListTag ["p", "pubkey"] `shouldBe` Nothing
        parseRelayListTag ["r", "url", "invalid-marker"] `shouldBe` Nothing
        parseRelayListTag ["r"] `shouldBe` Nothing