packages feed

servant-quickcheck 0.0.2.2 → 0.0.2.3

raw patch · 4 files changed

+56/−9 lines, 4 filesdep ~hspec

Dependency ranges changed: hspec

Files

CHANGELOG.yaml view
@@ -2,6 +2,14 @@  releases: +  - version: "0.0.2.3"+    changes:++      - description: Fix QueryParam and QueryFlag requests+        issue: 23+        authors: declension+        date: 2017-03-10+   - version: "0.0.2.2"     changes: 
servant-quickcheck.cabal view
@@ -1,5 +1,5 @@ name:                servant-quickcheck-version:             0.0.2.2+version:             0.0.2.3 synopsis:            QuickCheck entire APIs description:  This packages provides QuickCheck properties that are tested across an entire@@ -38,7 +38,7 @@                      , case-insensitive == 1.2.*                      , clock >= 0.7 && < 0.8                      , data-default-class >= 0.0 && < 0.2-                     , hspec == 2.2.*+                     , hspec >= 2.2 && < 2.4                      , http-client >= 0.4.30 && < 0.6                      , http-media == 0.6.*                      , http-types > 0.8 && < 0.10
src/Servant/QuickCheck/Internal/HasGenRequest.hs view
@@ -15,9 +15,8 @@ import Servant.API.ContentTypes (AllMimeRender (..)) import Servant.Client           (BaseUrl (..), Scheme (..)) import Test.QuickCheck          (Arbitrary (..), Gen, elements, oneof)-#if MIN_VERSION_servant(0,8,0)+ import qualified Data.ByteString as BS-#endif   class HasGenRequest a where@@ -91,9 +90,10 @@     genRequest _ = do       new' <- new       old' <- old-      return $ \burl -> let r = old' burl in r {-          queryString = queryString r-                     <> param <> "=" <> cs (toQueryParam new') }+      return $ \burl -> let r = old' burl+                            newExpr = param <> "=" <> cs (toQueryParam new')+                            qs = queryString r in r {+          queryString = if BS.null qs then newExpr else newExpr <> "&" <> qs }       where         old = genRequest (Proxy :: Proxy b)         param = cs $ symbolVal (Proxy :: Proxy x)@@ -118,8 +118,9 @@     => HasGenRequest (QueryFlag x :> b) where     genRequest _ = do       old' <- old-      return $ \burl -> let r = old' burl in r {-          queryString = queryString r <> param <> "=" }+      return $ \burl -> let r = old' burl+                            qs = queryString r in r {+          queryString = if BS.null qs then param else param <> "&" <> qs }       where         old = genRequest (Proxy :: Proxy b)         param = cs $ symbolVal (Proxy :: Proxy x)
test/Servant/QuickCheck/InternalSpec.hs view
@@ -4,12 +4,16 @@ import           Control.Concurrent.MVar (newMVar, readMVar, swapMVar) import           Control.Monad.IO.Class  (liftIO) import qualified Data.ByteString         as BS+import qualified Data.ByteString.Char8   as C import           Prelude.Compat import           Servant import           Test.Hspec              (Spec, context, describe, it, shouldBe,                                           shouldContain) import           Test.Hspec.Core.Spec    (Arg, Example, Result (..),                                           defaultParams, evaluateExample)+import           Test.QuickCheck.Gen     (unGen)+import           Test.QuickCheck.Random  (mkQCGen)+import           Network.HTTP.Client     (queryString)  #if MIN_VERSION_servant(0,8,0) import Servant.API.Internal.Test.ComprehensiveAPI (comprehensiveAPIWithoutRaw)@@ -28,6 +32,8 @@   isComprehensiveSpec   onlyJsonObjectSpec   notLongerThanSpec+  queryParamsSpec+  queryFlagsSpec  serversEqualSpec :: Spec serversEqualSpec = describe "serversEqual" $ do@@ -107,7 +113,28 @@     let _g = genRequest comprehensiveAPIWithoutRaw     True `shouldBe` True -- This is a type-level check +queryParamsSpec :: Spec+queryParamsSpec = describe "QueryParams" $ do +  it "reduce to an HTTP query string correctly" $ do+    let rng = mkQCGen 0+        burl = BaseUrl Http "localhost" 80 ""+        gen = genRequest paramsAPI+        req = (unGen gen rng 0) burl+        qs = C.unpack $ queryString req+    qs `shouldBe` "one=_&two=_"++queryFlagsSpec :: Spec+queryFlagsSpec = describe "QueryFlags" $ do++  it "reduce to an HTTP query string correctly" $ do+    let rng = mkQCGen 0+        burl = BaseUrl Http "localhost" 80 ""+        gen = genRequest flagsAPI+        req = (unGen gen rng 0) burl+        qs = C.unpack $ queryString req+    qs `shouldBe` "one&two"+ ------------------------------------------------------------------------------ -- APIs ------------------------------------------------------------------------------@@ -118,6 +145,17 @@  api :: Proxy API api = Proxy++type ParamsAPI = QueryParam "one" () :> QueryParam "two" () :> Get '[JSON] ()++paramsAPI :: Proxy ParamsAPI+paramsAPI = Proxy++type FlagsAPI = QueryFlag "one" :> QueryFlag "two" :> Get '[JSON] ()++flagsAPI :: Proxy FlagsAPI+flagsAPI = Proxy+  server :: IO (Server API) server = do