summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang')
-rw-r--r--lambda-calcul/haskell/test/Minilang/ServerSpec.hs18
1 files changed, 14 insertions, 4 deletions
diff --git a/lambda-calcul/haskell/test/Minilang/ServerSpec.hs b/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
index 6a25ec5..962dcdc 100644
--- a/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
+++ b/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
@@ -3,22 +3,32 @@
module Minilang.ServerSpec where
-import Data.Aeson (eitherDecode, FromJSON)
+import Data.Aeson (FromJSON, eitherDecode)
+import Data.ByteString (isInfixOf, toStrict)
+import Data.Data (Proxy (..))
import Minilang.API (Score)
import Minilang.Server (serveAPI)
import Network.Wai (Application)
import Test.Hspec (Spec, it)
import Test.Hspec.Wai (get, matchBody, shouldRespondWith, with)
import Test.Hspec.Wai.Matcher (MatchBody (..))
-import Data.Data (Proxy (..))
spec :: Spec
-spec = with app $
+spec = with app $ do
+ it "GET / returns 'index.html'" $ do
+ get "/"
+ `shouldRespondWith` 200
+ { matchBody = MatchBody $ \_ actual ->
+ if "<html>" `isInfixOf` toStrict actual
+ then Nothing
+ else Just "Expected HTML content"
+ }
+
it "GET /api/leaderboard returns empty list of scores" $ do
get "/api/leaderboard"
`shouldRespondWith` 200 {matchBody = arrayOfLengthOf (Proxy @Score) 2}
-arrayOfLengthOf :: forall elem proxy . (FromJSON elem) => proxy elem -> Int -> MatchBody
+arrayOfLengthOf :: forall elem proxy. (FromJSON elem) => proxy elem -> Int -> MatchBody
arrayOfLengthOf _ len = MatchBody $ \_ actual ->
case eitherDecode actual of
Right (scores :: [elem]) ->