@@ -10,6 +10,7 @@ module Servant.ServerSpec where
11import Control.Monad.Trans.Either
11import Control.Monad.Trans.Either
12import Data.Aeson
12import Data.Aeson
13import Data.Proxy
14import Data.Proxy
14import Data.String
15import Data.String
15import Data.String.Conversions
16import Data.String.Conversions
@@ -118,28 +119,64 @@ getSpec = do
120type QueryParamApi = QueryParam "name" String :> Get Person
121type QueryParamApi = QueryParam "name" String :> Get Person
122+ :<|> "a" :> QueryParams "names" String :> Get Person
123+ :<|> "b" :> QueryFlag "capitalize" :> Get Person
121queryParamApi :: Proxy QueryParamApi
125queryParamApi :: Proxy QueryParamApi
122queryParamApi = Proxy
126queryParamApi = Proxy
124−queryParamServer :: Server QueryParamApi
128+qpServer :: Server QueryParamApi
129+qpServer = queryParamServer :<|> qpNames :<|> qpCapitalize
131+ where qpNames (_:name2:_) = return alice { name = name2 }
132+ qpNames _ = return alice
134+ qpCapitalize False = return alice
135+ qpCapitalize True = return alice { name = map toUpper (name alice) }
125−queryParamServer (Just name) = return alice{name = name}
137+ queryParamServer (Just name) = return alice{name = name}
126−queryParamServer Nothing = return alice
138+ queryParamServer Nothing = return alice
128queryParamSpec :: Spec
140queryParamSpec :: Spec
129queryParamSpec = do
141queryParamSpec = do
130 describe "Servant.API.QueryParam" $ do
142 describe "Servant.API.QueryParam" $ do
131− it "allows to retrieve GET parameters" $ do
143+ it "allows to retrieve simple GET parameters" $
132− (flip runSession) (serve queryParamApi queryParamServer) $ do
144+ (flip runSession) (serve queryParamApi qpServer) $ do
133− let params = "?name=bob"
145+ let params1 = "?name=bob"
134− response <- Network.Wai.Test.request defaultRequest{
146+ response1 <- Network.Wai.Test.request defaultRequest{
135− rawQueryString = params,
147+ rawQueryString = params1,
136− queryString = parseQuery params
148+ queryString = parseQuery params1
139− decode' (simpleBody response) `shouldBe` Just alice{
151+ decode' (simpleBody response1) `shouldBe` Just alice{
155+ it "allows to retrieve lists in GET parameters" $
156+ (flip runSession) (serve queryParamApi qpServer) $ do
157+ let params2 = "?names[]=bob&names[]=john"
158+ response2 <- Network.Wai.Test.request defaultRequest{
159+ rawQueryString = params2,
160+ queryString = parseQuery params2,
164+ decode' (simpleBody response2) `shouldBe` Just alice{
168+ it "allows to retrieve value-less GET parameters" $
169+ (flip runSession) (serve queryParamApi qpServer) $ do
170+ let params3 = "?capitalize"
171+ response3 <- Network.Wai.Test.request defaultRequest{
172+ rawQueryString = params3,
173+ queryString = parseQuery params3,
177+ decode' (simpleBody response3) `shouldBe` Just alice{
144type PostApi = ReqBody Person :> Post Integer
181type PostApi = ReqBody Person :> Post Integer
145postApi :: Proxy PostApi
182postApi :: Proxy PostApi