on master help sign in
Include the request that failed in FailureResponse.
b8de9c8Stevan Andjelkovic
servant-client/src/Servant/Common/Req.hs+7−6
@@ -48,7 +48,8 @@ import Web.HttpApiData
48
48
49data ServantError
49data ServantError
50 = FailureResponse
50 = FailureResponse
51+ { failingRequest :: Request
51− { responseStatus :: Status
52+ , responseStatus :: Status
52 , responseContentType :: MediaType
53 , responseContentType :: MediaType
53 , responseBody :: ByteString
54 , responseBody :: ByteString
54 }
55 }
@@ -71,8 +72,8 @@ data ServantError
71 deriving (Show, Typeable)
72 deriving (Show, Typeable)
72
73
73instance Eq ServantError where
74instance Eq ServantError where
74− FailureResponse a b c == FailureResponse x y z =
75+ FailureResponse a b c d == FailureResponse w x y z =
75− (a, b, c) == (x, y, z)
76+ (show a, b, c, d) == (show w, x, y, z)
76 DecodeFailure a b c == DecodeFailure x y z =
77 DecodeFailure a b c == DecodeFailure x y z =
77 (a, b, c) == (x, y, z)
78 (a, b, c) == (x, y, z)
78 UnsupportedContentType a b == UnsupportedContentType x y =
79 UnsupportedContentType a b == UnsupportedContentType x y =
@@ -224,7 +225,7 @@ runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)
224runClientM cm env = runExceptT $ (flip runReaderT env) $ runClientM' cm
225runClientM cm env = runExceptT $ (flip runReaderT env) $ runClientM' cm
225
226
226
227
227−performRequest :: Method -> Req
228+performRequest :: Method -> Req
228 -> ClientM ( Int, ByteString, MediaType
229 -> ClientM ( Int, ByteString, MediaType
229 , [HTTP.Header], Response ByteString)
230 , [HTTP.Header], Response ByteString)
230performRequest reqMethod req = do
231performRequest reqMethod req = do
@@ -250,10 +251,10 @@ performRequest reqMethod req = do
250 Nothing -> throwError $ InvalidContentTypeHeader (cs t) body
251 Nothing -> throwError $ InvalidContentTypeHeader (cs t) body
251 Just t' -> pure t'
252 Just t' -> pure t'
252 unless (status_code >= 200 && status_code < 300) $
253 unless (status_code >= 200 && status_code < 300) $
253− throwError $ FailureResponse status ct body
254+ throwError $ FailureResponse request status ct body
254 return (status_code, body, ct, hdrs, response)
255 return (status_code, body, ct, hdrs, response)
255
256
256−performRequestCT :: MimeUnrender ct result => Proxy ct -> Method -> Req
257+performRequestCT :: MimeUnrender ct result => Proxy ct -> Method -> Req
257 -> ClientM ([HTTP.Header], result)
258 -> ClientM ([HTTP.Header], result)
258performRequestCT ct reqMethod req = do
259performRequestCT ct reqMethod req = do
259 let acceptCTS = contentTypes ct
260 let acceptCTS = contentTypes ct
servant-client/test/Servant/ClientSpec.hs+3−3
@@ -122,9 +122,9 @@ getBody :: Person -> SCR.ClientM Person
122getQueryParam :: Maybe String -> SCR.ClientM Person
122getQueryParam :: Maybe String -> SCR.ClientM Person
123getQueryParams :: [String] -> SCR.ClientM [Person]
123getQueryParams :: [String] -> SCR.ClientM [Person]
124getQueryFlag :: Bool -> SCR.ClientM Bool
124getQueryFlag :: Bool -> SCR.ClientM Bool
125−getRawSuccess :: HTTP.Method
125+getRawSuccess :: HTTP.Method
126 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
126 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
127−getRawFailure :: HTTP.Method
127+getRawFailure :: HTTP.Method
128 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
128 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
129getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
129getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
130 -> SCR.ClientM (String, Maybe Int, Bool, [(String, [Rational])])
130 -> SCR.ClientM (String, Maybe Int, Bool, [(String, [Rational])])
@@ -372,7 +372,7 @@ failSpec = beforeAll (startWaiApp failServer) $ afterAll endWaiApp $ do
372 let (_ :<|> getDeleteEmpty :<|> _) = client api
372 let (_ :<|> getDeleteEmpty :<|> _) = client api
373 Left res <- runClientM getDeleteEmpty (ClientEnv manager baseUrl)
373 Left res <- runClientM getDeleteEmpty (ClientEnv manager baseUrl)
374 case res of
374 case res of
375− FailureResponse (HTTP.Status 404 "Not Found") _ _ -> return ()
375+ FailureResponse _ (HTTP.Status 404 "Not Found") _ _ -> return ()
376 _ -> fail $ "expected 404 response, but got " <> show res
376 _ -> fail $ "expected 404 response, but got " <> show res
377
377
378 it "reports DecodeFailure" $ \(_, baseUrl) -> do
378 it "reports DecodeFailure" $ \(_, baseUrl) -> do