nirum-0.2.0: test/Nirum/Constructs/ServiceSpec.hs
{-# LANGUAGE OverloadedLists #-}
module Nirum.Constructs.ServiceSpec where
import Test.Hspec.Meta
import Nirum.Constructs.Annotation (Annotation (Annotation)
, empty
, fromList
, union
)
import Nirum.Constructs.Docs (toCode)
import Nirum.Constructs.Service (Method(Method), Parameter(Parameter))
import Nirum.Constructs.TypeExpression ( TypeExpression ( ListModifier
, OptionModifier
)
)
import Util (singleDocs)
spec :: Spec
spec = do
let Right methodAnno = fromList [Annotation "http-get" (Just "/ping/")]
let docsAnno = singleDocs "docs..."
describe "Parameter" $
specify "toCode" $ do
toCode (Parameter "dob" "date" empty) `shouldBe` "date dob,"
toCode (Parameter "dob" "date" docsAnno) `shouldBe`
"date dob,\n# docs..."
describe "Method" $
specify "toCode" $ do
toCode (Method "ping" [] "bool"
Nothing
empty) `shouldBe`
"bool ping (),"
toCode (Method "ping" [] "bool"
Nothing
methodAnno) `shouldBe`
"@http-get(\"/ping/\")\nbool ping (),"
toCode (Method "ping" [] "bool"
Nothing
docsAnno) `shouldBe`
"bool ping (\n # docs...\n),"
toCode (Method "ping" [] "bool"
(Just "ping-error")
empty) `shouldBe`
"bool ping () throws ping-error,"
toCode (Method "ping" [] "bool"
(Just "ping-error")
docsAnno) `shouldBe`
"bool ping (\n # docs...\n) throws ping-error,"
toCode (Method "ping" [] "bool"
Nothing
methodAnno) `shouldBe`
"@http-get(\"/ping/\")\nbool ping (),"
toCode (Method "ping" [] "bool"
(Just "ping-error")
methodAnno) `shouldBe`
"@http-get(\"/ping/\")\nbool ping () throws ping-error,"
toCode (Method "get-user"
[Parameter "user-id" "uuid" empty]
(OptionModifier "user")
Nothing
empty) `shouldBe`
"user? get-user (uuid user-id),"
toCode (Method "get-user"
[Parameter "user-id" "uuid" empty]
(OptionModifier "user")
Nothing
docsAnno) `shouldBe`
"user? get-user (\n # docs...\n uuid user-id,\n),"
toCode (Method "get-user"
[Parameter "user-id" "uuid" empty]
(OptionModifier "user")
(Just "get-user-error")
empty) `shouldBe`
"user? get-user (uuid user-id) throws get-user-error,"
toCode (Method "get-user"
[Parameter "user-id" "uuid" empty]
(OptionModifier "user")
(Just "get-user-error")
docsAnno) `shouldBe`
"user? get-user (\n\
\ # docs...\n\
\ uuid user-id,\n\
\) throws get-user-error,"
toCode (Method "get-user"
[Parameter "user-id" "uuid" $ singleDocs "param docs..."]
(OptionModifier "user")
Nothing
empty) `shouldBe`
"user? get-user (\n uuid user-id,\n # param docs...\n),"
toCode (Method "get-user"
[Parameter "user-id" "uuid" $ singleDocs "param docs..."]
(OptionModifier "user")
Nothing
docsAnno) `shouldBe`
"user? get-user (\n\
\ # docs...\n\
\ uuid user-id,\n\
\ # param docs...\n\
\),"
toCode (Method "get-user"
[Parameter "user-id" "uuid" $ singleDocs "param docs..."]
(OptionModifier "user")
(Just "get-user-error")
empty) `shouldBe`
"user? get-user (\n\
\ uuid user-id,\n\
\ # param docs...\n\
\) throws get-user-error,"
toCode (Method "get-user"
[Parameter "user-id" "uuid" $ singleDocs "param docs..."]
(OptionModifier "user")
(Just "get-user-error")
docsAnno) `shouldBe`
"user? get-user (\n\
\ # docs...\n\
\ uuid user-id,\n\
\ # param docs...\n\
\) throws get-user-error,"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" empty
, Parameter "keyword" "text" empty
]
(ListModifier "post")
Nothing
empty) `shouldBe`
"[post] search-posts (\n uuid blog-id,\n text keyword,\n),"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" empty
, Parameter "keyword" "text" empty
]
(ListModifier "post")
Nothing
docsAnno) `shouldBe`
"[post] search-posts (\n\
\ # docs...\n\
\ uuid blog-id,\n\
\ text keyword,\n\
\),"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" empty
, Parameter "keyword" "text" empty
]
(ListModifier "post")
(Just "search-posts-error")
empty) `shouldBe`
"[post] search-posts (\n\
\ uuid blog-id,\n\
\ text keyword,\n\
\) throws search-posts-error,"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" empty
, Parameter "keyword" "text" empty
]
(ListModifier "post")
(Just "search-posts-error")
docsAnno) `shouldBe`
"[post] search-posts (\n\
\ # docs...\n\
\ uuid blog-id,\n\
\ text keyword,\n\
\) throws search-posts-error,"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" $ singleDocs "blog id..."
, Parameter "keyword" "text" $ singleDocs "keyword..."
]
(ListModifier "post")
Nothing
empty) `shouldBe`
"[post] search-posts (\n\
\ uuid blog-id,\n\
\ # blog id...\n\
\ text keyword,\n\
\ # keyword...\n\
\),"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" $ singleDocs "blog id..."
, Parameter "keyword" "text" $ singleDocs "keyword..."
]
(ListModifier "post")
Nothing
docsAnno) `shouldBe`
"[post] search-posts (\n\
\ # docs...\n\
\ uuid blog-id,\n\
\ # blog id...\n\
\ text keyword,\n\
\ # keyword...\n\
\),"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" $ singleDocs "blog id..."
, Parameter "keyword" "text" $ singleDocs "keyword..."
]
(ListModifier "post")
(Just "search-posts-error")
empty) `shouldBe`
"[post] search-posts (\n\
\ uuid blog-id,\n\
\ # blog id...\n\
\ text keyword,\n\
\ # keyword...\n\
\) throws search-posts-error,"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" $ singleDocs "blog id..."
, Parameter "keyword" "text" $ singleDocs "keyword..."
]
(ListModifier "post")
(Just "search-posts-error")
docsAnno) `shouldBe`
"[post] search-posts (\n\
\ # docs...\n\
\ uuid blog-id,\n\
\ # blog id...\n\
\ text keyword,\n\
\ # keyword...\n\
\) throws search-posts-error,"
toCode (Method "search-posts"
[ Parameter "blog-id" "uuid" $ singleDocs "blog id..."
, Parameter "keyword" "text" $ singleDocs "keyword..."
]
(ListModifier "post")
(Just "search-posts-error")
(docsAnno `union` methodAnno)) `shouldBe`
"@http-get(\"/ping/\")\n\
\[post] search-posts (\n\
\ # docs...\n\
\ uuid blog-id,\n\
\ # blog id...\n\
\ text keyword,\n\
\ # keyword...\n\
\) throws search-posts-error,"