{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Headroom.SerializationSpec
  ( spec
  )
where

import           Headroom.Serialization
import           RIO
import qualified RIO.Map                       as M
import           Test.Hspec


spec :: Spec
spec = do
  describe "dropFieldPrefix" $ do
    it "removes prefix and lowercases first letter for 'prSomeField'" $ do
      dropFieldPrefix "prSomeField" `shouldBe` "someField"

    it "removes prefix and keeps case for 'prURLField'" $ do
      dropFieldPrefix "prURLField" `shouldBe` "URLField"


  describe "symbolCase" $ do
    it "replaces camel cased string into symbol cased" $ do
      let input    = "camelCasedValue"
          expected = "camel-cased-value"
      symbolCase '-' input `shouldBe` expected


  describe "prettyPrintYAML" $ do
    it "pretty prints YAML" $ do
      let input    = M.fromList [("foo" :: Text, ["bar"] :: [Text])]
          expected = "foo:\n- bar\n"
      prettyPrintYAML input `shouldBe` expected