servant-client 0.18.1 → 0.18.2
raw patch · 4 files changed
+67/−52 lines, 4 filesdep ~hspecdep ~servant-client-corePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: hspec, servant-client-core
API changes (from Hackage documentation)
Files
- CHANGELOG.md +7/−0
- servant-client.cabal +2/−2
- test/Servant/ClientTestUtils.hs +35/−30
- test/Servant/SuccessSpec.hs +23/−20
CHANGELOG.md view
@@ -1,6 +1,13 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md) [Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md) +0.18.2+------++### Significant changes++- Support `Fragment` combinator.+ 0.18.1 ------
servant-client.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: servant-client-version: 0.18.1+version: 0.18.2 synopsis: Automatic derivation of querying functions for servant category: Servant, Web@@ -58,7 +58,7 @@ -- Strict dependency on `servant-client-core` as we re-export things. build-depends: servant == 0.18.*- , servant-client-core >= 0.18 && <0.18.2+ , servant-client-core >= 0.18.2 && <0.18.3 -- Other dependencies: Lower bound around what is in the latest Stackage LTS. -- Here can be exceptions if we really need features from the newer versions.
test/Servant/ClientTestUtils.hs view
@@ -1,18 +1,18 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PolyKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -freduction-depth=100 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-}@@ -27,20 +27,22 @@ import Control.Monad.Error.Class (throwError) import Data.Aeson-import qualified Data.ByteString.Lazy as LazyByteString+import qualified Data.ByteString.Lazy as LazyByteString import Data.Char (chr, isPrint) import Data.Monoid () import Data.Proxy-import Data.Text (Text)-import qualified Data.Text as Text-import Data.Text.Encoding (encodeUtf8, decodeUtf8)+import Data.Text+ (Text)+import qualified Data.Text as Text+import Data.Text.Encoding+ (decodeUtf8, encodeUtf8) import GHC.Generics (Generic)-import qualified Network.HTTP.Client as C-import qualified Network.HTTP.Types as HTTP+import qualified Network.HTTP.Client as C+import qualified Network.HTTP.Types as HTTP import Network.Socket-import qualified Network.Wai as Wai+import qualified Network.Wai as Wai import Network.Wai.Handler.Warp import System.IO.Unsafe (unsafePerformIO)@@ -50,15 +52,14 @@ import Servant.API ((:<|>) ((:<|>)), (:>), AuthProtect, BasicAuth,- BasicAuthData (..), Capture, CaptureAll,- DeleteNoContent, EmptyAPI, FormUrlEncoded, Get, Header,- Headers, JSON, MimeRender(mimeRender),- MimeUnrender(mimeUnrender), NoContent (NoContent), PlainText,- Post, QueryFlag, QueryParam, QueryParams, Raw, ReqBody,- StdMethod(GET), Union, UVerb, WithStatus(WithStatus),- addHeader)+ BasicAuthData (..), Capture, CaptureAll, DeleteNoContent,+ EmptyAPI, FormUrlEncoded, Fragment, Get, Header, Headers,+ JSON, MimeRender (mimeRender), MimeUnrender (mimeUnrender),+ NoContent (NoContent), PlainText, Post, QueryFlag, QueryParam,+ QueryParams, Raw, ReqBody, StdMethod (GET), UVerb, Union,+ WithStatus (WithStatus), addHeader) import Servant.Client-import qualified Servant.Client.Core.Auth as Auth+import qualified Servant.Client.Core.Auth as Auth import Servant.Server import Servant.Server.Experimental.Auth import Servant.Test.ComprehensiveAPI@@ -109,6 +110,7 @@ :<|> "param" :> QueryParam "name" String :> Get '[FormUrlEncoded,JSON] Person :<|> "params" :> QueryParams "names" String :> Get '[JSON] [Person] :<|> "flag" :> QueryFlag "flag" :> Get '[JSON] Bool+ :<|> "fragment" :> Fragment String :> Get '[JSON] Person :<|> "rawSuccess" :> Raw :<|> "rawSuccessPassHeaders" :> Raw :<|> "rawFailure" :> Raw@@ -141,6 +143,7 @@ getQueryParam :: Maybe String -> ClientM Person getQueryParams :: [String] -> ClientM [Person] getQueryFlag :: Bool -> ClientM Bool+getFragment :: ClientM Person getRawSuccess :: HTTP.Method -> ClientM Response getRawSuccessPassHeaders :: HTTP.Method -> ClientM Response getRawFailure :: HTTP.Method -> ClientM Response@@ -163,6 +166,7 @@ :<|> getQueryParam :<|> getQueryParams :<|> getQueryFlag+ :<|> getFragment :<|> getRawSuccess :<|> getRawSuccessPassHeaders :<|> getRawFailure@@ -188,6 +192,7 @@ Nothing -> throwError $ ServerError 400 "missing parameter" "" []) :<|> (\ names -> return (zipWith Person names [0..])) :<|> return+ :<|> return alice :<|> (Tagged $ \ _request respond -> respond $ Wai.responseLBS HTTP.ok200 [] "rawSuccess") :<|> (Tagged $ \ request respond -> (respond $ Wai.responseLBS HTTP.ok200 (Wai.requestHeaders $ request) "rawSuccess")) :<|> (Tagged $ \ _request respond -> respond $ Wai.responseLBS HTTP.badRequest400 [] "rawFailure")
test/Servant/SuccessSpec.hs view
@@ -1,17 +1,17 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PolyKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -freduction-depth=100 #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-}@@ -34,20 +34,21 @@ import Data.Monoid () import Data.Text (Text)-import qualified Network.HTTP.Client as C-import qualified Network.HTTP.Types as HTTP+import qualified Network.HTTP.Client as C+import qualified Network.HTTP.Types as HTTP import Test.Hspec import Test.Hspec.QuickCheck import Test.HUnit import Test.QuickCheck import Servant.API- (NoContent (NoContent), WithStatus(WithStatus), getHeaders)+ (NoContent (NoContent), WithStatus (WithStatus), getHeaders) import Servant.Client-import qualified Servant.Client.Core.Request as Req-import Servant.Client.Internal.HttpClient (defaultMakeClientRequest)-import Servant.Test.ComprehensiveAPI+import qualified Servant.Client.Core.Request as Req+import Servant.Client.Internal.HttpClient+ (defaultMakeClientRequest) import Servant.ClientTestUtils+import Servant.Test.ComprehensiveAPI -- This declaration simply checks that all instances are in place. _ = client comprehensiveAPIWithoutStreaming@@ -103,6 +104,8 @@ forM_ [False, True] $ \ flag -> it (show flag) $ \(_, baseUrl) -> do left show <$> runClient (getQueryFlag flag) baseUrl `shouldReturn` Right flag + it "Servant.API.Fragment" $ \(_, baseUrl) -> do+ left id <$> runClient getFragment baseUrl `shouldReturn` Right alice it "Servant.API.Raw on success" $ \(_, baseUrl) -> do res <- runClient (getRawSuccess HTTP.methodGet) baseUrl case res of