packages feed

oauthenticated-0.2.0.0: test/SigningSpec.hs

{-# LANGUAGE RecordWildCards #-}

module SigningSpec where

import Control.Monad
import Network.HTTP.Client (httpLbs, parseRequest, 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, rng, ser, url))

spec :: Config -> Spec
spec Config {..} = describe "signing" $ do
  it "authorizes a request" $ do
    req <- parseRequest url
    (signedReq, _) <- oauth cred ser req rng
    resp <- httpLbs signedReq man
    responseStatus resp `shouldBe` status200

  it "authorizes many requests" $ do
    req <- parseRequest url
    (_, resps) <- foldM (\ (gen, acc) next -> do
                            (signedReq, newGen) <- oauth cred ser next gen
                            resp <- httpLbs signedReq man
                            pure (newGen, resp:acc)
                        ) (rng, []) (replicate 100 req)
    forM_ resps $ \ resp ->
      example $ responseStatus resp `shouldBe` status200