oauthenticated-0.2.1.0: test/SigningSpec.hs
{-# LANGUAGE RecordWildCards #-}
module SigningSpec where
import Control.Monad
import Data.List (nub)
import Network.HTTP.Client (httpLbs, parseRequest, requestHeaders, responseStatus)
import Network.HTTP.Types (status200)
import Network.OAuth (oauth)
import Test.Hspec (Spec, describe, example, it)
import Test.Hspec.Expectations (shouldBe)
import Config (Config (Config, cred, man, ser, url))
spec :: Config -> Spec
spec Config {..} = describe "signing" $ do
it "authorizes a request" $ do
req <- parseRequest url
signedReq <- oauth cred ser req
resp <- httpLbs signedReq man
responseStatus resp `shouldBe` status200
it "authorizes many requests" $ do
req <- parseRequest url
resps <- foldM (\ acc next -> do
signedReq <- oauth cred ser next
resp <- httpLbs signedReq man
pure $ resp:acc
) [] (replicate 100 req)
forM_ resps $ \ resp ->
example $ responseStatus resp `shouldBe` status200
it "generates a unique nonce for each repeated request" $ do
req <- parseRequest url
headers <- replicateM 100 (requestHeaders <$> oauth cred ser req)
let uniqueHeaders = nub headers
length headers `shouldBe` length uniqueHeaders