{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson (decode)
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.Maybe (isJust)
import Google.Cloud.Common.Core
import Test.Hspec
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "Google.Cloud.Common.Core" $ do
context "RequestMethod Show/Eq" $ do
it "shows constructors as HTTP verbs" $ do
show GET `shouldBe` "GET"
show POST `shouldBe` "POST"
show PATCH `shouldBe` "PATCH"
show DELETE `shouldBe` "DELETE"
show PUT `shouldBe` "PUT"
it "equality works for same constructor" $ do
(GET == GET) `shouldBe` True
(POST == GET) `shouldBe` False
context "AccessTokenResp JSON parsing" $ do
it "successfully parses valid JSON" $ do
let json = "{\"access_token\":\"ya29.a0AfH6SM...\",\"expires_in\":3599,\"token_type\":\"Bearer\"}"
let parsed = decode (BSL.pack json) :: Maybe AccessTokenResp
parsed `shouldSatisfy` isJust
it "fails to parse invalid JSON" $ do
let json = "{\"invalid_json\":\"...\"}"
let parsed = decode (BSL.pack json) :: Maybe AccessTokenResp
parsed `shouldBe` Nothing
context "GoogleApplicationCred JSON parsing" $ do
it "successfully parses valid JSON" $ do
let json =
"{\"type\":\"service_account\",\"project_id\":\"my-project\",\"private_key_id\":\"1234\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n\",\"client_email\":\"my-email@my-project.iam.gserviceaccount.com\",\"client_id\":\"123456789\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/my-email%40my-project.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
let parsed = decode (BSL.pack json) :: Maybe GoogleApplicationCred
parsed `shouldSatisfy` isJust
it "fails to parse invalid JSON" $ do
let json = "{\"invalid_json\":\"...\"}"
let parsed = decode (BSL.pack json) :: Maybe GoogleApplicationCred
parsed `shouldBe` Nothing
context "toPath" $ do
it "concatenates parts with slashes" $ do
toPath ["part1", "part2", "part3"] `shouldBe` "/part1/part2/part3"
it "returns empty string for empty list" $ do
toPath [] `shouldBe` ""