git.iko.soy/servant-quickcheck
on master help sign in
Fix QueryFlags too (#23)
77fa490Nick B
src/Servant/QuickCheck/Internal/HasGenRequest.hs+4−2
@@ -119,8 +119,10 @@ instance (KnownSymbol x, HasGenRequest b)
119 => HasGenRequest (QueryFlag x :> b) where
119 => HasGenRequest (QueryFlag x :> b) where
120 genRequest _ = do
120 genRequest _ = do
121 old' <- old
121 old' <- old
122− return $ \burl -> let r = old' burl in r {
122+ return $ \burl -> let r = old' burl
123− queryString = queryString r <> param <> "=" }
123+ newExpr = param <> "="
124+ qs = queryString r in r {
125+ queryString = if BS.null qs then newExpr else newExpr <> "&" <> qs }
124 where
126 where
125 old = genRequest (Proxy :: Proxy b)
127 old = genRequest (Proxy :: Proxy b)
126 param = cs $ symbolVal (Proxy :: Proxy x)
128 param = cs $ symbolVal (Proxy :: Proxy x)
test/Servant/QuickCheck/InternalSpec.hs+18
@@ -33,6 +33,7 @@ spec = do
33 onlyJsonObjectSpec
33 onlyJsonObjectSpec
34 notLongerThanSpec
34 notLongerThanSpec
35 queryParamsSpec
35 queryParamsSpec
36+ queryFlagsSpec
36
37
37serversEqualSpec :: Spec
38serversEqualSpec :: Spec
38serversEqualSpec = describe "serversEqual" $ do
39serversEqualSpec = describe "serversEqual" $ do
@@ -123,6 +124,17 @@ queryParamsSpec = describe "QueryParams" $ do
123 qs = C.unpack $ queryString req
124 qs = C.unpack $ queryString req
124 qs `shouldBe` "one=_&two=_"
125 qs `shouldBe` "one=_&two=_"
125
126
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+
126------------------------------------------------------------------------------
138------------------------------------------------------------------------------
127-- APIs
139-- APIs
128------------------------------------------------------------------------------
140------------------------------------------------------------------------------
@@ -139,6 +151,12 @@ type ParamsAPI = QueryParam "one" () :> QueryParam "two" () :> Get '[JSON] ()
139paramsAPI :: Proxy ParamsAPI
151paramsAPI :: Proxy ParamsAPI
140paramsAPI = Proxy
152paramsAPI = Proxy
141
153
154+type FlagsAPI = QueryFlag "one" :> QueryFlag "two" :> Get '[JSON] ()
155+
156+flagsAPI :: Proxy FlagsAPI
157+flagsAPI = Proxy
158+
159+
142server :: IO (Server API)
160server :: IO (Server API)
143server = do
161server = do
144 mvar <- newMVar ""
162 mvar <- newMVar ""