opentok-0.0.5: test/Token.hs
{-# LANGUAGE OverloadedStrings #-}
module Token(spec) where
import qualified Codec.Binary.Base64.String as B64
import Control.Arrow
import Control.Lens
import Control.Lens.Extras ( is )
import Data.Either.Combinators ( fromRight )
import Data.List.Split
import Test.Hspec
import Config
import OpenTok
import OpenTok.Session
import OpenTok.Types
ot :: OpenTok
ot = opentok testKey testSecret
sessionRequest :: IO (Either OTError Session)
sessionRequest = createSession ot sessionOpts
tokenParts :: Either OTError Token -> [String]
tokenParts et = fromRight [] (right (splitOn "&" . B64.decode . drop 4) et)
extractValue :: String -> Maybe String
extractValue p = splitOn "=" p ^? element 1
spec :: Spec
spec = do
defaultTokenSpec
customTokenSpec
defaultTokenSpec :: Spec
defaultTokenSpec = describe "A token created with default options" $ do
it "should have default connection properties" $ do
eSession <- sessionRequest
eToken <- generateToken ot (fromRight "" (right sessionId eSession)) tokenOpts
let parts = tokenParts eToken
let role = (parts ^? element 5) >>= extractValue
let connectionData = (parts ^? element 6) >>= extractValue
role `shouldBe` Just "publisher"
connectionData `shouldBe` Nothing
customTokenSpec :: Spec
customTokenSpec = describe "A token created with custom options" $ do
it "should have those properties encoded" $ do
let opts = tokenOpts { _role = Moderator, _connectionData = Just ("foo" :: String) }
eSession <- sessionRequest
eToken <- generateToken ot (fromRight "" (right sessionId eSession)) opts
let parts = tokenParts eToken
let role = (parts ^? element 5) >>= extractValue
let connectionData = (parts ^? element 6) >>= extractValue
role `shouldBe` Just "moderator"
connectionData `shouldBe` Just "foo"