From d1ee5c7a6307ca1fc02905d4fa9593ed735142ec Mon Sep 17 00:00:00 2001 From: Philipp Kant Date: Tue, 16 Jun 2015 22:38:14 +0200 Subject: [PATCH] Added test for docsWith. Make sure that no information is lost when providing additional information via docsWith. With the current left-biased implementation of combineAction, this can happen if the function arguments are in the wrong order. --- servant-docs/servant-docs.cabal | 1 + servant-docs/test/Servant/DocsSpec.hs | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/servant-docs/servant-docs.cabal b/servant-docs/servant-docs.cabal index afa44525..e95251ec 100644 --- a/servant-docs/servant-docs.cabal +++ b/servant-docs/servant-docs.cabal @@ -70,6 +70,7 @@ test-suite spec base , aeson , hspec + , lens , servant , servant-docs , string-conversions diff --git a/servant-docs/test/Servant/DocsSpec.hs b/servant-docs/test/Servant/DocsSpec.hs index 8e6cb201..9da66448 100644 --- a/servant-docs/test/Servant/DocsSpec.hs +++ b/servant-docs/test/Servant/DocsSpec.hs @@ -7,7 +7,9 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Servant.DocsSpec where +import Control.Lens import Data.Aeson +import Data.Monoid import Data.Proxy import Data.String.Conversions (cs) import GHC.Generics @@ -21,7 +23,27 @@ spec = describe "Servant.Docs" $ do describe "markdown" $ do let md = markdown (docs (Proxy :: Proxy TestApi1)) + tests md + describe "markdown with extra info" $ do + let + extra = extraInfo + (Proxy :: Proxy (Get '[JSON, PlainText] Int)) + (defAction & notes <>~ [DocNote "Get an Integer" ["get an integer in Json or plain text"]]) + <> + extraInfo + (Proxy :: Proxy (ReqBody '[JSON] String :> Post '[JSON] Datatype1)) + (defAction & notes <>~ [DocNote "Post data" ["Posts some Json data"]]) + md = markdown (docsWith [] extra (Proxy :: Proxy TestApi1)) + tests md + it "contains the extra info provided" $ do + md `shouldContain` "Get an Integer" + md `shouldContain` "Post data" + md `shouldContain` "get an integer in Json or plain text" + md `shouldContain` "Posts some Json data" + + where + tests md = do it "mentions supported content-types" $ do md `shouldContain` "application/json" md `shouldContain` "text/plain;charset=utf-8" @@ -34,10 +56,11 @@ spec = describe "Servant.Docs" $ do md `shouldContain` "POST" md `shouldContain` "GET" - it "contains response samples" $ do + it "contains response samples" $ md `shouldContain` "{\"dt1field1\":\"field 1\",\"dt1field2\":13}" - it "contains request body samples" $ do + it "contains request body samples" $ md `shouldContain` "17" + -- * APIs data Datatype1 = Datatype1 { dt1field1 :: String