packages feed

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