packages feed

sydtest-servant-0.2.0.1: test/Test/Syd/ServantWithContextSpec.hs

module Test.Syd.ServantWithContextSpec (spec) where

import Control.Concurrent.STM
import Servant
import Servant.Client
import Test.Syd
import Test.Syd.Servant
import Test.Syd.Servant.ExampleWithContext
import Test.Syd.Wai

exampleSetupFunc :: SetupFunc (Server ExampleAPI)
exampleSetupFunc = SetupFunc $ \func -> do
  var <- newTVarIO 0
  func $ exampleServer var

spec :: Spec
spec = servantSpecWithSetupFuncWithContext exampleAPI exampleContext exampleSetupFunc $ do
  describe "requests with correct credentials" $ do
    it "gets zero at the start" $ do
      r <- clientGetCorrectCredentials
      liftIO $ r `shouldBe` 0
    it "can add 1 to get 1" $ do
      NoContent <- clientAddCorrectCredentials 1
      r <- clientGetCorrectCredentials
      liftIO $ r `shouldBe` 1
  describe "requests with incorrect credentials" $ do
    it "doesn't allow GET requests without correct credentials" $ \clientEnv -> do
      errOrResult <- testClientOrError clientEnv clientGetWrongCredentials
      case errOrResult of
        Left (FailureResponse _ res) -> responseStatusCode res `shouldBe` forbidden403
        res -> expectationFailure $ "Expected a failed request with status 403, but got " <> show res
    it "doesn't allow POST requests without correct credentials" $ \clientEnv -> do
      errOrResult <- testClientOrError clientEnv $ clientAddWrongCredentials 1
      case errOrResult of
        Left (FailureResponse _ res) -> responseStatusCode res `shouldBe` forbidden403
        res -> expectationFailure $ "Expected a failed request with status 403, but got " <> show res