git.iko.soy/typeable/servant
on master help sign in
test suite: GetParam
commit207f39857222cb953b4a09d66df61c90f1452a4d authorSönke Hahn <soenke.hahn@zalora.com> dateMon 27 Oct 2014, 16:24 (12 years ago) parentc393afa
2 files changed+39−2
src/Servant/Text.hs+10−1 test/Servant/ServerSpec.hs+29−1
src/Servant/Text.hs+10−1
@@ -1,6 +1,9 @@
1+{-# LANGUAGE FlexibleInstances #-}
12{-# LANGUAGE OverloadedStrings #-}
3+{-# LANGUAGE TypeSynonymInstances #-}
24module Servant.Text where
35
6+import Data.String.Conversions
47import Data.Text
58
69class FromText a where
@@ -15,6 +18,12 @@ instance FromText Text where
1518instance ToText Text where
1619 toText = id
1720
21+instance FromText String where
22+ fromText = Just . cs
23+
24+instance ToText String where
25+ toText = cs
26+
1827instance FromText Bool where
1928 fromText "true" = Just True
2029 fromText "false" = Just False
@@ -22,4 +31,4 @@ instance FromText Bool where
2231
2332instance ToText Bool where
2433 toText True = "true"
25− toText False = "false"
34+ toText False = "false"
test/Servant/ServerSpec.hs+29−1
@@ -11,11 +11,14 @@ module Servant.ServerSpec where
1111import Data.Aeson
1212import Data.Proxy
1313import GHC.Generics
14+import Network.HTTP.Types
15+import Network.Wai
1416import Network.Wai.Test
1517import Test.Hspec
16−import Test.Hspec.Wai as Wai
18+import Test.Hspec.Wai
1719
1820import Servant.API.Get
21+import Servant.API.GetParam
1922import Servant.API.Post
2023import Servant.API.RQBody
2124import Servant.API.Sub
@@ -55,6 +58,7 @@ jerry = Animal "Mouse" 4
5558spec :: Spec
5659spec = do
5760 getSpec
61+ getParamSpec
5862 postSpec
5963 unionSpec
6064
@@ -76,6 +80,30 @@ getSpec :: Spec = do
7680 post "/" "" `shouldRespondWith` 404
7781
7882
83+type GetParamApi = GetParam "name" String :> Get Person
84+getParamApi :: Proxy GetParamApi
85+getParamApi = Proxy
86+
87+getParamServer :: Server GetParamApi
88+getParamServer (Just name) = return alice{name = name}
89+getParamServer Nothing = return alice
90+
91+getParamSpec :: Spec
92+getParamSpec = do
93+ describe "Servant.API.GetParam" $ do
94+ it "allows to retrieve GET parameters" $ do
95+ (flip runSession) (serve getParamApi getParamServer) $ do
96+ let params = "?name=bob"
97+ response <- Network.Wai.Test.request defaultRequest{
98+ rawQueryString = params,
99+ queryString = parseQuery params
100+ }
101+ liftIO $ do
102+ decode' (simpleBody response) `shouldBe` Just alice{
103+ name = "bob"
104+ }
105+
106+
79107type PostApi = RQBody Person :> (Post Integer)
80108postApi :: Proxy PostApi
81109postApi = Proxy