git.iko.soy/servant-quickcheck
on master help sign in
Fix QueryFlags too (#23)

* Same logic / testing as for `QueryParam` * There's probably some de-duplication that could be done here one day...

commit77fa490b93f3dac2807662f70a95ffd734951227 authorNick B <nick@declension.net> dateTue 7 Mar 2017, 22:52 (10 years ago) parenta845922
2 files changed+22−2
src/Servant/QuickCheck/Internal/HasGenRequest.hs+4−2 test/Servant/QuickCheck/InternalSpec.hs+18
src/Servant/QuickCheck/Internal/HasGenRequest.hs+4−2
@@ -119,8 +119,10 @@ instance (KnownSymbol x, HasGenRequest b)
119119 => HasGenRequest (QueryFlag x :> b) where
120120 genRequest _ = do
121121 old' <- old
122− return $ \burl -> let r = old' burl in r {
123− queryString = queryString r <> param <> "=" }
122+ return $ \burl -> let r = old' burl
123+ newExpr = param <> "="
124+ qs = queryString r in r {
125+ queryString = if BS.null qs then newExpr else newExpr <> "&" <> qs }
124126 where
125127 old = genRequest (Proxy :: Proxy b)
126128 param = cs $ symbolVal (Proxy :: Proxy x)
test/Servant/QuickCheck/InternalSpec.hs+18
@@ -33,6 +33,7 @@ spec = do
3333 onlyJsonObjectSpec
3434 notLongerThanSpec
3535 queryParamsSpec
36+ queryFlagsSpec
3637
3738serversEqualSpec :: Spec
3839serversEqualSpec = describe "serversEqual" $ do
@@ -123,6 +124,17 @@ queryParamsSpec = describe "QueryParams" $ do
123124 qs = C.unpack $ queryString req
124125 qs `shouldBe` "one=_&two=_"
125126
127+queryFlagsSpec :: Spec
128+queryFlagsSpec = describe "QueryFlags" $ do
129+
130+ it "reduce to an HTTP query string correctly" $ do
131+ let rng = mkQCGen 0
132+ burl = BaseUrl Http "localhost" 80 ""
133+ gen = genRequest flagsAPI
134+ req = (unGen gen rng 0) burl
135+ qs = C.unpack $ queryString req
136+ qs `shouldBe` "one=&two="
137+
126138------------------------------------------------------------------------------
127139-- APIs
128140------------------------------------------------------------------------------
@@ -139,6 +151,12 @@ type ParamsAPI = QueryParam "one" () :> QueryParam "two" () :> Get '[JSON] ()
139151paramsAPI :: Proxy ParamsAPI
140152paramsAPI = Proxy
141153
154+type FlagsAPI = QueryFlag "one" :> QueryFlag "two" :> Get '[JSON] ()
155+
156+flagsAPI :: Proxy FlagsAPI
157+flagsAPI = Proxy
158+
159+
142160server :: IO (Server API)
143161server = do
144162 mvar <- newMVar ""