swagger2-2.5: test/Data/Swagger/ParamSchemaSpec.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Swagger.ParamSchemaSpec where
import Data.Aeson
import Data.Aeson.QQ.Simple
import Data.Char
import Data.Proxy
import GHC.Generics
import Data.Swagger
import Data.Swagger.Internal (SwaggerKind(..))
import Data.Swagger.CommonTestTypes
import SpecCommon
import Test.Hspec
import Data.Time.LocalTime
import qualified Data.HashMap.Strict as HM
checkToParamSchema :: ToParamSchema a => Proxy a -> Value -> Spec
checkToParamSchema proxy js = (toParamSchema proxy :: ParamSchema ('SwaggerKindNormal Param)) <=> js
spec :: Spec
spec = do
describe "Generic ToParamSchema" $ do
context "Unit" $ checkToParamSchema (Proxy :: Proxy Unit) unitSchemaJSON
context "Color (bounded enum)" $ checkToParamSchema (Proxy :: Proxy Color) colorSchemaJSON
context "Status (constructorTagModifier)" $ checkToParamSchema (Proxy :: Proxy Status) statusSchemaJSON
context "Unary records" $ do
context "Email (unary record)" $ checkToParamSchema (Proxy :: Proxy Email) emailSchemaJSON
context "UserId (non-record newtype)" $ checkToParamSchema (Proxy :: Proxy UserId) userIdSchemaJSON
context "TimeOfDay" $ checkToParamSchema (Proxy :: Proxy Data.Time.LocalTime.TimeOfDay) timeOfDayParamSchemaJSON
main :: IO ()
main = hspec spec