@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE PolyKinds #-}
23module Servant.QuickCheck.Internal.HasGenRequest where
34
@@ -5,6 +6,7 @@ import Data.Default.Class (def)
56import Data.Monoid ((<>))
67import Data.String (fromString)
78import Data.String.Conversions (cs)
9+import qualified Data.ByteString as BS
810import GHC.TypeLits (KnownSymbol, Nat, symbolVal)
911import Network.HTTP.Client (Request, RequestBody (..), host, method, path,
1012 port, queryString, requestBody, requestHeaders,
@@ -44,6 +46,19 @@ instance (Arbitrary c, HasGenRequest b, ToHttpApiData c )
4446 old = genRequest (Proxy :: Proxy b)
4547 new = arbitrary :: Gen c
4648
49+#if MIN_VERSION_servant(0,8,0)
50+instance (Arbitrary c, HasGenRequest b, ToHttpApiData c )
51+ => HasGenRequest (CaptureAll x c :> b) where
52+ genRequest _ = do
53+ old' <- old
54+ new' <- fmap (cs . toUrlPiece) <$> new
55+ let new'' = BS.intercalate "/" new'
56+ return $ \burl -> let r = old' burl in r { path = new'' <> path r }
57+ where
58+ old = genRequest (Proxy :: Proxy b)
59+ new = arbitrary :: Gen [c]
60+#endif
61+
4762instance (Arbitrary c, KnownSymbol h, HasGenRequest b, ToHttpApiData c)
4863 => HasGenRequest (Header h c :> b) where
4964 genRequest _ = do