git.iko.soy/typeable/servant
on master help sign in
Merge pull request #850 from phadej/pull-783
e1c46c2Oleg Grenrus
servant-client/test/Servant/ClientSpec.hs+16−7
@@ -106,10 +106,14 @@ instance FromForm Person
106alice :: Person
106alice :: Person
107alice = Person "Alice" 42
107alice = Person "Alice" 42
108
108
109+carol :: Person
110+carol = Person "Carol" 17
111+
109type TestHeaders = '[Header "X-Example1" Int, Header "X-Example2" String]
112type TestHeaders = '[Header "X-Example1" Int, Header "X-Example2" String]
110
113
111type Api =
114type Api =
115+ Get '[JSON] Person
112− "get" :> Get '[JSON] Person
116+ :<|> "get" :> Get '[JSON] Person
113 :<|> "deleteEmpty" :> DeleteNoContent '[JSON] NoContent
117 :<|> "deleteEmpty" :> DeleteNoContent '[JSON] NoContent
114 :<|> "capture" :> Capture "name" String :> Get '[JSON,FormUrlEncoded] Person
118 :<|> "capture" :> Capture "name" String :> Get '[JSON,FormUrlEncoded] Person
115 :<|> "captureAll" :> CaptureAll "names" String :> Get '[JSON] [Person]
119 :<|> "captureAll" :> CaptureAll "names" String :> Get '[JSON] [Person]
@@ -132,6 +136,7 @@ type Api =
132api :: Proxy Api
136api :: Proxy Api
133api = Proxy
137api = Proxy
134
138
139+getRoot :: ClientM Person
135getGet :: ClientM Person
140getGet :: ClientM Person
136getDeleteEmpty :: ClientM NoContent
141getDeleteEmpty :: ClientM NoContent
137getCapture :: String -> ClientM Person
142getCapture :: String -> ClientM Person
@@ -147,7 +152,8 @@ getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
147getRespHeaders :: ClientM (Headers TestHeaders Bool)
152getRespHeaders :: ClientM (Headers TestHeaders Bool)
148getDeleteContentType :: ClientM NoContent
153getDeleteContentType :: ClientM NoContent
149
154
155+getRoot
150−getGet
156+ :<|> getGet
151 :<|> getDeleteEmpty
157 :<|> getDeleteEmpty
152 :<|> getCapture
158 :<|> getCapture
153 :<|> getCaptureAll
159 :<|> getCaptureAll
@@ -164,7 +170,8 @@ getGet
164
170
165server :: Application
171server :: Application
166server = serve api (
172server = serve api (
167− return alice
173+ return carol
174+ :<|> return alice
168 :<|> return NoContent
175 :<|> return NoContent
169 :<|> (\ name -> return $ Person name 0)
176 :<|> (\ name -> return $ Person name 0)
170 :<|> (\ names -> return (zipWith Person names [0..]))
177 :<|> (\ names -> return (zipWith Person names [0..]))
@@ -299,6 +306,8 @@ runClient x baseUrl' = runClientM x (ClientEnv manager' baseUrl')
299
306
300sucessSpec :: Spec
307sucessSpec :: Spec
301sucessSpec = beforeAll (startWaiApp server) $ afterAll endWaiApp $ do
308sucessSpec = beforeAll (startWaiApp server) $ afterAll endWaiApp $ do
309+ it "Servant.API.Get root" $ \(_, baseUrl) -> do
310+ left show <$> runClient getRoot baseUrl `shouldReturn` Right carol
302
311
303 it "Servant.API.Get" $ \(_, baseUrl) -> do
312 it "Servant.API.Get" $ \(_, baseUrl) -> do
304 left show <$> runClient getGet baseUrl `shouldReturn` Right alice
313 left show <$> runClient getGet baseUrl `shouldReturn` Right alice
@@ -390,14 +399,14 @@ failSpec = beforeAll (startWaiApp failServer) $ afterAll endWaiApp $ do
390
399
391 context "client returns errors appropriately" $ do
400 context "client returns errors appropriately" $ do
392 it "reports FailureResponse" $ \(_, baseUrl) -> do
401 it "reports FailureResponse" $ \(_, baseUrl) -> do
393− let (_ :<|> getDeleteEmpty :<|> _) = client api
402+ let (_ :<|> _ :<|> getDeleteEmpty :<|> _) = client api
394 Left res <- runClient getDeleteEmpty baseUrl
403 Left res <- runClient getDeleteEmpty baseUrl
395 case res of
404 case res of
396 FailureResponse r | responseStatusCode r == HTTP.status404 -> return ()
405 FailureResponse r | responseStatusCode r == HTTP.status404 -> return ()
397 _ -> fail $ "expected 404 response, but got " <> show res
406 _ -> fail $ "expected 404 response, but got " <> show res
398
407
399 it "reports DecodeFailure" $ \(_, baseUrl) -> do
408 it "reports DecodeFailure" $ \(_, baseUrl) -> do
400− let (_ :<|> _ :<|> getCapture :<|> _) = client api
409+ let (_ :<|> _ :<|> _ :<|> getCapture :<|> _) = client api
401 Left res <- runClient (getCapture "foo") baseUrl
410 Left res <- runClient (getCapture "foo") baseUrl
402 case res of
411 case res of
403 DecodeFailure _ _ -> return ()
412 DecodeFailure _ _ -> return ()
@@ -411,14 +420,14 @@ failSpec = beforeAll (startWaiApp failServer) $ afterAll endWaiApp $ do
411 _ -> fail $ "expected ConnectionError, but got " <> show res
420 _ -> fail $ "expected ConnectionError, but got " <> show res
412
421
413 it "reports UnsupportedContentType" $ \(_, baseUrl) -> do
422 it "reports UnsupportedContentType" $ \(_, baseUrl) -> do
414− let (getGet :<|> _ ) = client api
423+ let (_ :<|> getGet :<|> _ ) = client api
415 Left res <- runClient getGet baseUrl
424 Left res <- runClient getGet baseUrl
416 case res of
425 case res of
417 UnsupportedContentType ("application/octet-stream") _ -> return ()
426 UnsupportedContentType ("application/octet-stream") _ -> return ()
418 _ -> fail $ "expected UnsupportedContentType, but got " <> show res
427 _ -> fail $ "expected UnsupportedContentType, but got " <> show res
419
428
420 it "reports InvalidContentTypeHeader" $ \(_, baseUrl) -> do
429 it "reports InvalidContentTypeHeader" $ \(_, baseUrl) -> do
421− let (_ :<|> _ :<|> _ :<|> _ :<|> getBody :<|> _) = client api
430+ let (_ :<|> _ :<|> _ :<|> _ :<|> _ :<|> getBody :<|> _) = client api
422 Left res <- runClient (getBody alice) baseUrl
431 Left res <- runClient (getBody alice) baseUrl
423 case res of
432 case res of
424 InvalidContentTypeHeader _ -> return ()
433 InvalidContentTypeHeader _ -> return ()