@@ -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
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
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
@@ -76,6 +80,30 @@ getSpec :: Spec = do
76 post "/" "" `shouldRespondWith` 404
80 post "/" "" `shouldRespondWith` 404
83+type GetParamApi = GetParam "name" String :> Get Person
84+getParamApi :: Proxy GetParamApi
87+getParamServer :: Server GetParamApi
88+getParamServer (Just name) = return alice{name = name}
89+getParamServer Nothing = return alice
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
102+ decode' (simpleBody response) `shouldBe` Just alice{
79type PostApi = RQBody Person :> (Post Integer)
107type PostApi = RQBody Person :> (Post Integer)
80postApi :: Proxy PostApi
108postApi :: Proxy PostApi
81postApi = Proxy
109postApi = Proxy