packages feed

amqp-0.24.0: test/ExchangeDeclareSpec.hs

{-# OPTIONS -XOverloadedStrings #-}

module ExchangeDeclareSpec (main, spec) where

import Test.Hspec
import Network.AMQP

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
    describe "declareExchange" $ do
        context "client-named, fanout, durable, non-autodelete" $ do
            it "declares the exchange" $ do
                let eName = "haskell-amqp.fanout.d.na"

                conn <- openConnection "127.0.0.1" "/" "guest" "guest"
                ch   <- openChannel conn

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


                _    <- declareExchange ch (newExchange {exchangeName    = eName,
                                                         exchangePassive = True})

                closeConnection conn

        context "client-named, topic, non-durable, non-autodelete" $ do
            it "declares the exchange" $ do
                let eName = "haskell-amqp.topic.nd.na"

                conn <- openConnection "127.0.0.1" "/" "guest" "guest"
                ch   <- openChannel conn

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


                _    <- declareExchange ch (newExchange {exchangeName    = eName,
                                                         exchangePassive = True})

                closeConnection conn

        context "passive declaration when the 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 x  = "haskell-amqp.exchanges.Xiz2mQozyYcFrQgGmN8r"
                    ex = ChannelClosedException Abnormal "NOT_FOUND - no exchange 'haskell-amqp.exchanges.Xiz2mQozyYcFrQgGmN8r' in vhost '/'"
                (declareExchange ch $ newExchange {exchangeName = x, exchangePassive = True}) `shouldThrow` (== ex)

                closeConnection conn