packages feed

servant-routes-golden-0.1.0.0: test/Servant/API/Routes/GoldenSpec.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskellQuotes #-}

module Servant.API.Routes.GoldenSpec
  ( spec
  )
where

import qualified Data.Text as T
import GHC.Generics
import Servant.API
import Servant.API.Routes.Golden
import Test.Hspec as H

type SubAPI = ReqBody '[JSON] String :> Post '[JSON] Int

type SubAPI2 = Header "h1" T.Text :> "x" :> ("y" :> Put '[JSON] String :<|> SubAPI)

type SubAPI3 =
  Header "h2" T.Text
    :> "x2"
    :> ( "y1" :> Description "desc" :> Put '[JSON] String
          :<|> "z1" :> Header' '[Optional] "h3" Int :> Get '[JSON] [Integer]
       )

#if MIN_VERSION_servant(0,19,0)
data API mode = API
  { ep1 :: mode :- "sub1" :> SubAPI
  , ep2 :: mode :- "sub2" :> SubAPI2
  , ep3 :: mode :- "sub3" :> SubAPI3
  } deriving Generic
#endif

spec :: H.Spec
spec = do
  it "SubAPI" $ goldenRoutes @SubAPI (show ''SubAPI)
  it "SubAPI2" $ goldenRoutes @SubAPI2 (show ''SubAPI2)
  it "SubAPI3" $ goldenRoutes @SubAPI3 (show ''SubAPI3)
#if MIN_VERSION_servant(0,19,0)
  it "NamedRoutes API" $ goldenRoutes @(NamedRoutes API) (show ''API)
#endif