packages feed

google-cloud-logging-1.1.0.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}

module Main (main) where

import Data.Aeson (eitherDecode)
import qualified Data.ByteString.Lazy.Char8 as BSL
import Test.Tasty (TestTree, defaultMain, testGroup)
import Test.Tasty.HUnit (assertBool, assertEqual, testCase)

import Google.Cloud.Logging.Logs
  ( ListLogsOps (..)
  , ListLogsResp (..)
  , Resource (..)
  , defaultListLogsOps
  , googleLoggingUrl
  )

main :: IO ()
main = defaultMain tests

tests :: TestTree
tests =
  testGroup
    "google-cloud-logging"
    [ testCase "googleLoggingUrl is v2 endpoint" $ do
        assertEqual "Endpoint" "https://logging.googleapis.com/v2" googleLoggingUrl
    , testCase "defaultListLogsOps has all fields Nothing" $ do
        let d = defaultListLogsOps
        assertEqual "resourceNames" Nothing (resourceNames d)
        assertEqual "pageSize" Nothing (pageSize d)
        assertEqual "pageToken" Nothing (pageToken d)
    , testCase "Decode ListLogsResp with nextPageToken" $ do
        let json =
              BSL.pack
                "{\n  \"logNames\": [\"projects/p/logs/a\", \"projects/p/logs/b\"],\n  \"nextPageToken\": \"tok\"\n}"
        case eitherDecode json of
          Left err -> assertBool ("Failed to decode: " <> err) False
          Right (ListLogsResp names tok) -> do
            assertEqual "names" ["projects/p/logs/a", "projects/p/logs/b"] names
            assertEqual "token" (Just "tok") tok
    , testCase "Resource Show/Eq constructors" $ do
        assertEqual "Projects" (Projects "p") (Projects "p")
        assertEqual "Show Organizations" "Organizations \"o\"" (show (Organizations "o"))
    ]