{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Servant.JQuerySpec where import Data.Either (isRight) import Data.Proxy import Language.ECMAScript3.Parser (parseFromString) import Test.Hspec import Servant.API import Servant.JQuery type TestAPI = [sitemap| POST /simple String -> Bool GET /has.extension Bool |] type TopLevelRawAPI = "something" :> Get Int :<|> Raw type HeaderHandlingAPI = "something" :> Header "Foo" String :> Get Int headerHandlingProxy :: Proxy HeaderHandlingAPI headerHandlingProxy = Proxy spec :: Spec spec = describe "Servant.JQuery" generateJSSpec generateJSSpec :: Spec generateJSSpec = describe "generateJS" $ do it "should generate valid javascript" $ do let (postSimple :<|> getHasExtension ) = jquery (Proxy :: Proxy TestAPI) parseFromString (generateJS postSimple) `shouldSatisfy` isRight parseFromString (generateJS getHasExtension) `shouldSatisfy` isRight print $ generateJS getHasExtension it "should use non-empty function names" $ do let (_ :<|> topLevel) = jquery (Proxy :: Proxy TopLevelRawAPI) print $ generateJS $ topLevel "GET" parseFromString (generateJS $ topLevel "GET") `shouldSatisfy` isRight it "should handle simple HTTP headers" $ do let jsText = generateJS $ jquery headerHandlingProxy print jsText parseFromString jsText `shouldSatisfy` isRight jsText `shouldContain` "headerFoo" jsText `shouldContain` "headers: { \"Foo\": headerFoo }\n"