on master help sign in
Include the request that failed in FailureResponse.
commitb8de9c8527881d144532c27bd3e7d8241cf22721 authorStevan Andjelkovic <stevan@advancedtelematic.com> dateFri 5 May 2017, 15:31 (9 years ago) parentc84e650
2 files changed+10−9
servant-client/src/Servant/Common/Req.hs+7−6 servant-client/test/Servant/ClientSpec.hs+3−3
servant-client/src/Servant/Common/Req.hs+7−6
@@ -48,7 +48,8 @@ import Web.HttpApiData
4848
4949data ServantError
5050 = FailureResponse
51− { responseStatus :: Status
51+ { failingRequest :: Request
52+ , responseStatus :: Status
5253 , responseContentType :: MediaType
5354 , responseBody :: ByteString
5455 }
@@ -71,8 +72,8 @@ data ServantError
7172 deriving (Show, Typeable)
7273
7374instance Eq ServantError where
74− FailureResponse a b c == FailureResponse x y z =
75− (a, b, c) == (x, y, z)
75+ FailureResponse a b c d == FailureResponse w x y z =
76+ (show a, b, c, d) == (show w, x, y, z)
7677 DecodeFailure a b c == DecodeFailure x y z =
7778 (a, b, c) == (x, y, z)
7879 UnsupportedContentType a b == UnsupportedContentType x y =
@@ -224,7 +225,7 @@ runClientM :: ClientM a -> ClientEnv -> IO (Either ServantError a)
224225runClientM cm env = runExceptT $ (flip runReaderT env) $ runClientM' cm
225226
226227
227−performRequest :: Method -> Req
228+performRequest :: Method -> Req
228229 -> ClientM ( Int, ByteString, MediaType
229230 , [HTTP.Header], Response ByteString)
230231performRequest reqMethod req = do
@@ -250,10 +251,10 @@ performRequest reqMethod req = do
250251 Nothing -> throwError $ InvalidContentTypeHeader (cs t) body
251252 Just t' -> pure t'
252253 unless (status_code >= 200 && status_code < 300) $
253− throwError $ FailureResponse status ct body
254+ throwError $ FailureResponse request status ct body
254255 return (status_code, body, ct, hdrs, response)
255256
256−performRequestCT :: MimeUnrender ct result => Proxy ct -> Method -> Req
257+performRequestCT :: MimeUnrender ct result => Proxy ct -> Method -> Req
257258 -> ClientM ([HTTP.Header], result)
258259performRequestCT ct reqMethod req = do
259260 let acceptCTS = contentTypes ct
servant-client/test/Servant/ClientSpec.hs+3−3
@@ -122,9 +122,9 @@ getBody :: Person -> SCR.ClientM Person
122122getQueryParam :: Maybe String -> SCR.ClientM Person
123123getQueryParams :: [String] -> SCR.ClientM [Person]
124124getQueryFlag :: Bool -> SCR.ClientM Bool
125−getRawSuccess :: HTTP.Method
125+getRawSuccess :: HTTP.Method
126126 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
127−getRawFailure :: HTTP.Method
127+getRawFailure :: HTTP.Method
128128 -> SCR.ClientM (Int, BS.ByteString, MediaType, [HTTP.Header], C.Response BS.ByteString)
129129getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
130130 -> SCR.ClientM (String, Maybe Int, Bool, [(String, [Rational])])
@@ -372,7 +372,7 @@ failSpec = beforeAll (startWaiApp failServer) $ afterAll endWaiApp $ do
372372 let (_ :<|> getDeleteEmpty :<|> _) = client api
373373 Left res <- runClientM getDeleteEmpty (ClientEnv manager baseUrl)
374374 case res of
375− FailureResponse (HTTP.Status 404 "Not Found") _ _ -> return ()
375+ FailureResponse _ (HTTP.Status 404 "Not Found") _ _ -> return ()
376376 _ -> fail $ "expected 404 response, but got " <> show res
377377
378378 it "reports DecodeFailure" $ \(_, baseUrl) -> do