@@ -79,7 +79,8 @@ type TestHeaders = '[Header "X-Example1" Int, Header "X-Example2" String]
81 "get" :> Get '[JSON] Person
81 "get" :> Get '[JSON] Person
82− :<|> "delete" :> Delete
82+ :<|> "delete" :> Delete '[JSON] ()
83+ :<|> "deleteString" :> Delete '[JSON] String
83 :<|> "capture" :> Capture "name" String :> Get '[JSON,FormUrlEncoded] Person
84 :<|> "capture" :> Capture "name" String :> Get '[JSON,FormUrlEncoded] Person
84 :<|> "body" :> ReqBody '[FormUrlEncoded,JSON] Person :> Post '[JSON] Person
85 :<|> "body" :> ReqBody '[FormUrlEncoded,JSON] Person :> Post '[JSON] Person
85 :<|> "param" :> QueryParam "name" String :> Get '[FormUrlEncoded,JSON] Person
86 :<|> "param" :> QueryParam "name" String :> Get '[FormUrlEncoded,JSON] Person
@@ -104,6 +105,7 @@ server :: Application
104server = serve api (
105server = serve api (
105 return alice
106 return alice
106 :<|> return ()
107 :<|> return ()
107 :<|> (\ name -> return $ Person name 0)
109 :<|> (\ name -> return $ Person name 0)
108 :<|> return
110 :<|> return
109 :<|> (\ name -> case name of
111 :<|> (\ name -> case name of
@@ -129,6 +131,7 @@ withServer action = withWaiDaemon (return server) action
130getGet :: BaseUrl -> EitherT ServantError IO Person
132getGet :: BaseUrl -> EitherT ServantError IO Person
131getDelete :: BaseUrl -> EitherT ServantError IO ()
133getDelete :: BaseUrl -> EitherT ServantError IO ()
134+getDeleteString :: BaseUrl -> EitherT ServantError IO String
132getCapture :: String -> BaseUrl -> EitherT ServantError IO Person
135getCapture :: String -> BaseUrl -> EitherT ServantError IO Person
133getBody :: Person -> BaseUrl -> EitherT ServantError IO Person
136getBody :: Person -> BaseUrl -> EitherT ServantError IO Person
134getQueryParam :: Maybe String -> BaseUrl -> EitherT ServantError IO Person
137getQueryParam :: Maybe String -> BaseUrl -> EitherT ServantError IO Person
@@ -147,6 +150,7 @@ getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
147getRespHeaders :: BaseUrl -> EitherT ServantError IO (Headers TestHeaders Bool)
150getRespHeaders :: BaseUrl -> EitherT ServantError IO (Headers TestHeaders Bool)
149 :<|> getDelete
152 :<|> getDelete
153+ :<|> getDeleteString
150 :<|> getCapture
154 :<|> getCapture
151 :<|> getBody
155 :<|> getBody
152 :<|> getQueryParam
156 :<|> getQueryParam
@@ -183,8 +187,12 @@ spec = do
183 it "Servant.API.Get" $ withServer $ \ host -> do
187 it "Servant.API.Get" $ withServer $ \ host -> do
184 (Arrow.left show <$> runEitherT (getGet host)) `shouldReturn` Right alice
188 (Arrow.left show <$> runEitherT (getGet host)) `shouldReturn` Right alice
186− it "Servant.API.Delete" $ withServer $ \ host -> do
190+ context "Servant.API.Delete" $ do
191+ it "return no body" $ withServer $ \ host -> do
187− (Arrow.left show <$> runEitherT (getDelete host)) `shouldReturn` Right ()
192+ (Arrow.left show <$> runEitherT (getDelete host)) `shouldReturn` Right ()
194+ it "return body" $ withServer $ \ host -> do
195+ (Arrow.left show <$> runEitherT (getDeleteString host)) `shouldReturn` Right "ok"
189 it "Servant.API.Capture" $ withServer $ \ host -> do
197 it "Servant.API.Capture" $ withServer $ \ host -> do
190 (Arrow.left show <$> runEitherT (getCapture "Paula" host)) `shouldReturn` Right (Person "Paula" 0)
198 (Arrow.left show <$> runEitherT (getCapture "Paula" host)) `shouldReturn` Right (Person "Paula" 0)
@@ -268,7 +276,7 @@ spec = do
268 Left FailureResponse{..} <- runEitherT (getResponse host)
276 Left FailureResponse{..} <- runEitherT (getResponse host)
269 responseStatus `shouldBe` (Status 500 "error message")
277 responseStatus `shouldBe` (Status 500 "error message")
270 mapM_ test $
278 mapM_ test $
271− (WrappedApi (Proxy :: Proxy Delete), "Delete") :
279+ (WrappedApi (Proxy :: Proxy (Delete '[JSON] ())), "Delete") :
272 (WrappedApi (Proxy :: Proxy (Get '[JSON] ())), "Get") :
280 (WrappedApi (Proxy :: Proxy (Get '[JSON] ())), "Get") :
273 (WrappedApi (Proxy :: Proxy (Post '[JSON] ())), "Post") :
281 (WrappedApi (Proxy :: Proxy (Post '[JSON] ())), "Post") :
274 (WrappedApi (Proxy :: Proxy (Put '[JSON] ())), "Put") :
282 (WrappedApi (Proxy :: Proxy (Put '[JSON] ())), "Put") :