packages feed

amqp-0.24.0: test/ExchangeDeleteSpec.hs

{-# OPTIONS -XOverloadedStrings #-}

module ExchangeDeleteSpec (main, spec) where

import Test.Hspec
import Network.AMQP

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
     describe "deleteExchange" $ do
         context "when exchange exists" $ do
             it "deletes the exchange" $ do
                 let eName = "haskell-amqp.exchanges.to-be-deleted"

                 conn <- openConnection "127.0.0.1" "/" "guest" "guest"
                 ch   <- openChannel conn
                 -- silence error messages
                 addChannelExceptionHandler ch $ return . const ()


                 _    <- declareExchange ch (newExchange {exchangeName    = eName,
                                                          exchangeType    = "topic",
                                                          exchangeDurable = False})

                 _    <- deleteExchange ch eName

                 let ex = ChannelClosedException Abnormal "NOT_FOUND - no exchange 'haskell-amqp.exchanges.to-be-deleted' in vhost '/'"
                 (declareExchange ch $ newExchange {exchangeName = eName, exchangePassive = True}) `shouldThrow` (== ex)

                 closeConnection conn

         context "when exchange DOES NOT exist" $ do
             it "throws an exception" $ do
                 conn <- openConnection "127.0.0.1" "/" "guest" "guest"
                 ch   <- openChannel conn
                 -- silence error messages
                 addChannelExceptionHandler ch $ return . const ()

                 let q  = "haskell-amqp.exchanges.GmN8rozyXiz2mQYcFrQg"
                     ex = ChannelClosedException Abnormal "NOT_FOUND - no exchange 'haskell-amqp.exchanges.GmN8rozyXiz2mQYcFrQg' in vhost '/'"
                 (declareExchange ch $ newExchange {exchangeName = q, exchangePassive = True}) `shouldThrow` (== ex)

                 closeConnection conn