serokell-util-0.9.0: test/Test/Serokell/Util/ByteStringSpec.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Serokell.Util.ByteStringSpec
( spec
) where
import Universum
import Data.Aeson (decode, encode)
import Test.Hspec (Spec, describe)
import Test.Hspec.QuickCheck (prop)
import Test.QuickCheck ((===))
import Test.QuickCheck.Instances ()
import Serokell.Arbitrary ()
import qualified Serokell.Util.Base16 as C16
import qualified Serokell.Util.Base64 as C64
import qualified Universum.Unsafe as Unsafe (fromJust)
spec :: Spec
spec =
describe "Serialization" $
describe "Indentity Properties" $ do
prop "Base16" $
\(a :: ByteString) -> a === base16Mid a
prop "Base64" $
\(a :: ByteString) -> a === base64Mid a
prop "JSON Base64" $
\(a :: C64.JsonByteString) -> a === base64JSONMid a
base16Mid,
base64Mid :: ByteString -> ByteString
base16Mid = fromRightBS . C16.decode . C16.encode
base64Mid = fromRightBS . C64.decode . C64.encode
base64JSONMid :: C64.JsonByteString -> C64.JsonByteString
base64JSONMid = Unsafe.fromJust . decode . encode
fromRightBS :: Either a ByteString -> ByteString
fromRightBS = fromRight (error "failed decoding to ByteString")