google-oauth2-0.3.0.0: test/Network/Google/OAuth2Spec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Network.Google.OAuth2Spec
( main
, spec
) where
import Test.Hspec
import qualified Data.ByteString.Lazy.Char8 as L8
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Encoding (encodeUtf8)
import LoadEnv
import Network.Google.OAuth2
import Network.HTTP.Simple
import Network.OAuth.OAuth2 (AccessToken(..), OAuth2Token(..))
import System.Environment
-- | To run in an interactive way
--
-- So you can perform the OAuth2 flow
--
-- > stack exec runghc test/Network/Google/OAuth2Spec.hs
--
main :: IO ()
main = hspec spec
spec :: Spec
spec = describe "Token exchange" $ do
it "grants access to an API" $ do
loadEnv
clientId <- T.pack <$> getEnv "CLIENT_ID"
clientSecret <- T.pack <$> getEnv "CLIENT_SECRET"
scope <- T.pack <$> getEnv "EXAMPLE_SCOPE"
exampleUrl <- getEnv "EXAMPLE_URL"
OAuth2Token{..} <- getAccessToken clientId clientSecret [scope]
$ Just "test/oauth.token"
request <- parseRequest exampleUrl
response <- httpLBS $ authorize (atoken accessToken) request
getResponseBody response `shouldSatisfy` (not . L8.null)
authorize :: Text -> Request -> Request
authorize token = setRequestHeaders
[ ("Authorization", encodeUtf8 $ "Bearer " <> token)
]