natskell-0.1.0.0: test/Unit/SubSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module SubSpec (spec) where
import Control.Monad
import Data.ByteString
import qualified Data.ByteString.Lazy as LBS
import Subscription.Types
import Test.Hspec
import Text.Printf
import Transformers.Transformers
import Types.Sub
import Validators.Validators
spec :: Spec
spec = do
subscribeOptionCases
transformerCases
validateCases
subscribeOptionCases = parallel $ do
describe "subscribe config" $ do
it "stores the queue group" $ do
subscribeQueueGroup (SubscribeConfig Nothing (Just "WORKERS"))
`shouldBe` Just "WORKERS"
explicitTransformerCases :: [(Sub, ByteString)]
explicitTransformerCases = [
(Sub "SOME.SUBJ" Nothing "uuid", "SUB SOME.SUBJ uuid\r\n"),
(Sub "SOME.SUBJ" (Just "QUEUE.GROUP.A") "uuid", "SUB SOME.SUBJ QUEUE.GROUP.A uuid\r\n")
]
transformerCases = parallel $ do
describe "SUB transformer" $ do
forM_ explicitTransformerCases $ \(input, want) ->
it (printf "correctly transforms %s" (show input)) $ do
LBS.toStrict (transform input) `shouldBe` want
explicitValidaterCases :: [(Sub, Either ByteString ())]
explicitValidaterCases = [
(Sub ">" Nothing "a", Right ()),
(Sub ">" (Just "1") "a", Right ()),
(Sub "" Nothing "a", Left "explicit empty subject"),
(Sub ">" (Just "") "a", Left "explicit empty queue group"),
(Sub ">" Nothing "", Left "explicit empty sid")
]
validateCases = parallel $ do
describe "SUB validater" $ do
forM_ explicitValidaterCases $ \(input, want) ->
it (printf "correctly validates %s" (show input)) $ do
validate input `shouldBe` want