@@ -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