{-# 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` ""