packages feed

bluesky-tools-0.6.0.0: test/Did.hs

module Did where

import Data.Text (Text)

import Bluesky.Did

testAccept :: Text -> IO ()
testAccept t = case makeDid t of
  Left err -> error $ "Did not accept " <> show t <> ": " <> show err
  Right _ -> pure ()

testReject :: DidError -> Text -> IO ()
testReject expectedErr t = case makeDid t of
  Left actualErr
    | expectedErr == actualErr -> pure ()
    | otherwise -> error $ "Wrong error for " <> show t <> ": " <> show actualErr
  Right _ -> error $ "Incorrectly accepted " <> show t

main :: IO ()
main = do
  -- examples from the docs
  mapM_ testAccept
    [ -- valid and usable
      "did:plc:z72i7hdynmk6r22z27h6tvur"
    , "did:web:blueskyweb.xyz"
    , -- syntactically valid but invalid method
      "did:method:val:two"
    , "did:m:v"
    , "did:method::::val"
    , "did:method:-:_:."
    , "did:key:zQ3shZc2QzApp2oymGvQbzP8eKheVshBHbU4ZYjeXqwSKEn6N"
    ]
  -- invalid syntax
  testReject BadMethod "did:METHOD:val"
  testReject BadMethod "did:m123:val"
  testReject NoDidPrefix "DID:method:val"
  testReject EndsWithColon "did:method:"
  testReject BadIdentifierCharacters "did:method:val/two"
  testReject BadIdentifierCharacters "did:method:val?two"
  testReject BadIdentifierCharacters "did:method:val#two"

  -- my own examples
  testAccept "did:method:A:b"
  -- percent encoding verification
  testAccept "did:plc:%ff"
  testAccept "did:plc:%F0"
  testReject BadPercentEncoding "did:plc:%FG"