git.iko.soy/typeable/servant
on master help sign in
test suite: GetParam
207f398Sönke Hahn
src/Servant/Text.hs+10−1
@@ -1,6 +1,9 @@
1+{-# LANGUAGE FlexibleInstances #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3+{-# LANGUAGE TypeSynonymInstances #-}
2module Servant.Text where
4module Servant.Text where
3
5
6+import Data.String.Conversions
4import Data.Text
7import Data.Text
5
8
6class FromText a where
9class FromText a where
@@ -15,6 +18,12 @@ instance FromText Text where
15instance ToText Text where
18instance ToText Text where
16 toText = id
19 toText = id
17
20
21+instance FromText String where
22+ fromText = Just . cs
23+
24+instance ToText String where
25+ toText = cs
26+
18instance FromText Bool where
27instance FromText Bool where
19 fromText "true" = Just True
28 fromText "true" = Just True
20 fromText "false" = Just False
29 fromText "false" = Just False
@@ -22,4 +31,4 @@ instance FromText Bool where
22
31
23instance ToText Bool where
32instance ToText Bool where
24 toText True = "true"
33 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
11import Data.Aeson
11import Data.Aeson
12import Data.Proxy
12import Data.Proxy
13import GHC.Generics
13import GHC.Generics
14+import Network.HTTP.Types
15+import Network.Wai
14import Network.Wai.Test
16import Network.Wai.Test
15import Test.Hspec
17import Test.Hspec
16−import Test.Hspec.Wai as Wai
18+import Test.Hspec.Wai
17
19
18import Servant.API.Get
20import Servant.API.Get
21+import Servant.API.GetParam
19import Servant.API.Post
22import Servant.API.Post
20import Servant.API.RQBody
23import Servant.API.RQBody
21import Servant.API.Sub
24import Servant.API.Sub
@@ -55,6 +58,7 @@ jerry = Animal "Mouse" 4
55spec :: Spec
58spec :: Spec
56spec = do
59spec = do
57 getSpec
60 getSpec
61+ getParamSpec
58 postSpec
62 postSpec
59 unionSpec
63 unionSpec
60
64
@@ -76,6 +80,30 @@ getSpec :: Spec = do
76 post "/" "" `shouldRespondWith` 404
80 post "/" "" `shouldRespondWith` 404
77
81
78
82
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+
79type PostApi = RQBody Person :> (Post Integer)
107type PostApi = RQBody Person :> (Post Integer)
80postApi :: Proxy PostApi
108postApi :: Proxy PostApi
81postApi = Proxy
109postApi = Proxy