glue-core-0.4.5: test/Glue/SwitchingSpec.hs
{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, ScopedTypeVariables #-}
module Glue.SwitchingSpec where
import Glue.Switching
import Glue.Types
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances()
spec :: Spec
spec = do
describe "switchingService" $ do
it "Requests should be handled by the service used" $ do
property $ \(firstResult :: MultiGetResponse Int Int, secondResult :: MultiGetResponse Int Int, request :: MultiGetRequest Int) -> do
let first _ = return firstResult
let second _ = return secondResult
(switchedService, serviceUpdate) <- switchingService first
actualFirstResult <- switchedService request
expectedFirstResult <- first request
serviceUpdate second
actualSecondResult <- switchedService request
expectedSecondResult <- second request
actualFirstResult `shouldBe` expectedFirstResult
actualSecondResult `shouldBe` expectedSecondResult