summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang/ServerSpec.hs')
-rw-r--r--lambda-calcul/haskell/test/Minilang/ServerSpec.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/lambda-calcul/haskell/test/Minilang/ServerSpec.hs b/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
index 6a3b6d5..33fbd69 100644
--- a/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
+++ b/lambda-calcul/haskell/test/Minilang/ServerSpec.hs
@@ -4,6 +4,7 @@
module Minilang.ServerSpec where
import Control.Concurrent.STM (newTVarIO)
+import Control.Monad (void)
import Data.Aeson (FromJSON, eitherDecode, encode)
import Data.ByteString (isInfixOf, toStrict)
import qualified Data.ByteString as BS
@@ -11,7 +12,7 @@ import qualified Data.ByteString.Base64.Lazy as Base64
import Data.ByteString.Lazy (ByteString)
import Data.Data (Proxy (..))
import Minilang.API (Score, User (..), newToken)
-import Minilang.App (Env (..))
+import Minilang.App (Env (..), makeEnv)
import Minilang.Server (serveAPI)
import Network.Wai (Application)
import Network.Wai.Test (SResponse)
@@ -47,6 +48,12 @@ spec = with (app testSeed) $ do
else Just ("Expected token " ++ show token ++ ", but got " ++ show t)
}
+ it "POST /api/register returns 400 given user is already registered" $ do
+ let user = encode $ User "alice"
+ void $ postJSON "/api/register" user
+ postJSON "/api/register" user
+ `shouldRespondWith` 400
+
postJSON :: BS.ByteString -> ByteString -> WaiSession () SResponse
postJSON url = request "POST" url [("Content-Type", "application/json")]
@@ -61,7 +68,7 @@ arrayOfLengthOf _ len = MatchBody $ \_ actual ->
app :: StdGen -> IO Application
app g = do
- env <- Env <$> newTVarIO g
+ env <- makeEnv g
pure $ serveAPI env
testSeed :: StdGen