natskell-1.0.0.1: test/Unit/ErrSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module ErrSpec (spec) where
import Control.Monad
import qualified Data.ByteString as BS
import Fixtures
import Parser.API
( ParseStep (Emit)
, ParsedMessage (ParsedErr)
, parse
)
import Parser.Attoparsec (parserApi)
import Test.Hspec
import Text.Printf
import Types.Err
explicitCases :: [(BS.ByteString, Err)]
explicitCases = [
("-ERR 'Unknown Protocol Operation'\r\n", ErrUnknownOp "Unknown Protocol Operation"),
("-ERR 'Attempted To Connect To Route Port'\r\n", ErrRoutePortConn "Attempted To Connect To Route Port"),
("-ERR 'Authorization Violation'\r\n", ErrAuthViolation "Authorization Violation"),
("-ERR 'Authorization Timeout'\r\n", ErrAuthTimeout "Authorization Timeout"),
("-ERR 'User Authentication Expired: jwt is expired'\r\n", ErrAuthExpired "User Authentication Expired: jwt is expired"),
("-ERR 'User Authentication Revoked'\r\n", ErrAuthRevoked "User Authentication Revoked"),
("-ERR 'Account Authentication Expired'\r\n", ErrAccountAuthExpired "Account Authentication Expired"),
("-ERR 'Invalid Client Protocol'\r\n", ErrInvalidProtocol "Invalid Client Protocol"),
("-ERR 'Maximum Control Line Exceeded'\r\n", ErrMaxControlLineEx "Maximum Control Line Exceeded"),
("-ERR 'Secure Connection - TLS Required'\r\n", ErrTlsRequired "Secure Connection - TLS Required"),
("-ERR 'Stale Connection'\r\n", ErrStaleConn "Stale Connection"),
("-ERR 'Maximum Connections Exceeded'\r\n", ErrMaxConnsEx "Maximum Connections Exceeded"),
("-ERR 'Slow Consumer'\r\n", ErrSlowConsumer"Slow Consumer"),
("-ERR 'Maximum Payload Violation'\r\n", ErrMaxPayload "Maximum Payload Violation"),
("-ERR 'Invalid Subject'\r\n", ErrInvalidSubject "Invalid Subject"),
("-ERR 'Permissions Violation For Subscription To FOO.'\r\n", ErrPermViolation "Permissions Violation For Subscription To FOO."),
("-ERR 'Permissions Violation For Publish To FOO.'\r\n", ErrPermViolation "Permissions Violation For Publish To FOO."),
("-ERR 'A New Server Error'\r\n", ErrErr "A New Server Error")
]
generatedCases =
zip
((\x n-> foldr BS.append "" ["-ERR 'Permissions Violation For ", x, " To ", n, "'\r\n"]) <$> ["Subscription", "Publish"] <*> invalidSubjectCases)
((\x n-> ErrPermViolation $ foldr BS.append "" ["Permissions Violation For ", x, " To ", n]) <$> ["Subscription", "Publish"] <*> invalidSubjectCases)
spec :: Spec
spec = do
cases
cases = parallel $ do
describe "generic parser" $ do
forM_ explicitCases $ \(input, want) ->
it (printf "correctly parses explicit case %s" (show input)) $ do
let output = parse parserApi input
output `shouldBe` Emit (ParsedErr want) ""
forM_ generatedCases $ \(input, want) ->
it (printf "correctly parses generated case %s" (show input)) $ do
let output = parse parserApi input
output `shouldBe` Emit (ParsedErr want) ""