@@ -1,7 +1,9 @@
1+{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE QuasiQuotes #-}
4{-# LANGUAGE QuasiQuotes #-}
4{-# LANGUAGE ScopedTypeVariables #-}
5{-# LANGUAGE ScopedTypeVariables #-}
6+{-# LANGUAGE TypeOperators #-}
6module Servant.ServerSpec where
8module Servant.ServerSpec where
@@ -14,6 +16,9 @@ import Test.Hspec
14import Test.Hspec.Wai
16import Test.Hspec.Wai
16import Servant.API.Get
18import Servant.API.Get
19+import Servant.API.Post
20+import Servant.API.RQBody
21+import Servant.API.Sub
17import Servant.Server
22import Servant.Server
@@ -27,23 +32,41 @@ instance ToJSON Person
27instance FromJSON Person
32instance FromJSON Person
29alice :: Person
34alice :: Person
30−alice = Person "Alice" 103
35+alice = Person "Alice" 42
33spec :: Spec
38spec :: Spec
38type GetApi = Get Person
44type GetApi = Get Person
39getApi :: Proxy GetApi
45getApi :: Proxy GetApi
40getApi = Proxy
46getApi = Proxy
42−getSpec = do
48+getSpec :: Spec = do
43 describe "Servant.API.Get" $ do
49 describe "Servant.API.Get" $ do
44 with (return (serve getApi (return alice))) $ do
50 with (return (serve getApi (return alice))) $ do
45− it "serves a Person" $ do
51+ it "allows to GET a Person" $ do
46 response <- get "/"
52 response <- get "/"
47 return response `shouldRespondWith` 200
53 return response `shouldRespondWith` 200
48 liftIO $ do
54 liftIO $ do
49 decode' (simpleBody response) `shouldBe` Just alice
55 decode' (simpleBody response) `shouldBe` Just alice
57+ it "throws 404 on POSTs" $ do
58+ post "/" "" `shouldRespondWith` 404
61+type PostApi = RQBody Person :> (Post Integer)
62+postApi :: Proxy PostApi
67+ describe "Servant.API.Post and .RQBody" $ do
68+ with (return (serve postApi (return . age))) $ do
69+ it "allows to POST a Person" $ do
70+ post "/" (encode alice) `shouldRespondWith` "42"{