git.iko.soy/typeable/servant
on master help sign in
add tests for QueryParams and QueryFlag
commite774af7707ebe1da17420ee8f1708517c4356836 authorAlp Mestanogullari <alpmestan@gmail.com> dateThu 30 Oct 2014, 11:58 (12 years ago) parentbab2bc7
1 file changed+51−14
test/Servant/ServerSpec.hs+51−14
test/Servant/ServerSpec.hs+51−14
@@ -10,6 +10,7 @@ module Servant.ServerSpec where
1010
1111import Control.Monad.Trans.Either
1212import Data.Aeson
13+import Data.Char
1314import Data.Proxy
1415import Data.String
1516import Data.String.Conversions
@@ -118,28 +119,64 @@ getSpec = do
118119
119120
120121type QueryParamApi = QueryParam "name" String :> Get Person
122+ :<|> "a" :> QueryParams "names" String :> Get Person
123+ :<|> "b" :> QueryFlag "capitalize" :> Get Person
124+
121125queryParamApi :: Proxy QueryParamApi
122126queryParamApi = Proxy
123127
124−queryParamServer :: Server QueryParamApi
125−queryParamServer (Just name) = return alice{name = name}
126−queryParamServer Nothing = return alice
128+qpServer :: Server QueryParamApi
129+qpServer = queryParamServer :<|> qpNames :<|> qpCapitalize
130+
131+ where qpNames (_:name2:_) = return alice { name = name2 }
132+ qpNames _ = return alice
133+
134+ qpCapitalize False = return alice
135+ qpCapitalize True = return alice { name = map toUpper (name alice) }
136+
137+ queryParamServer (Just name) = return alice{name = name}
138+ queryParamServer Nothing = return alice
127139
128140queryParamSpec :: Spec
129141queryParamSpec = do
130142 describe "Servant.API.QueryParam" $ do
131− it "allows to retrieve GET parameters" $ do
132− (flip runSession) (serve queryParamApi queryParamServer) $ do
133− let params = "?name=bob"
134− response <- Network.Wai.Test.request defaultRequest{
135− rawQueryString = params,
136− queryString = parseQuery params
137− }
138− liftIO $ do
139− decode' (simpleBody response) `shouldBe` Just alice{
140− name = "bob"
143+ it "allows to retrieve simple GET parameters" $
144+ (flip runSession) (serve queryParamApi qpServer) $ do
145+ let params1 = "?name=bob"
146+ response1 <- Network.Wai.Test.request defaultRequest{
147+ rawQueryString = params1,
148+ queryString = parseQuery params1
141149 }
142−
150+ liftIO $ do
151+ decode' (simpleBody response1) `shouldBe` Just alice{
152+ name = "bob"
153+ }
154+
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,
161+ pathInfo = ["a"]
162+ }
163+ liftIO $
164+ decode' (simpleBody response2) `shouldBe` Just alice{
165+ name = "john"
166+ }
167+
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,
174+ pathInfo = ["b"]
175+ }
176+ liftIO $
177+ decode' (simpleBody response3) `shouldBe` Just alice{
178+ name = "ALICE"
179+ }
143180
144181type PostApi = ReqBody Person :> Post Integer
145182postApi :: Proxy PostApi