{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Kubernetes.Client.KubeConfigSpec where

import           Data.Aeson                   (decode, encode, parseJSON,
                                               toJSON)
import           Data.Maybe                   (fromJust)
import           Data.Yaml                    (decodeFile)
import           Kubernetes.Client.KubeConfig (AuthInfo (..), Cluster (..),
                                               Config, Context (..),
                                               getAuthInfo, getCluster,
                                               getContext)
import           Test.Hspec

spec :: Spec
spec = do
  let getConfig :: IO Config
      getConfig = fromJust <$> decodeFile "test/testdata/kubeconfig.yaml"
  describe "FromJSON and ToJSON instances" $ do
    it "roundtrips successfully" $ do
      config <- getConfig
      decode (encode (toJSON config)) `shouldBe` Just config
  describe "getContext" $ do
    it "returns the correct context" $ do
      config <- getConfig
      getContext config `shouldBe` (Right (Context "cluster-aaa" "user-aaa" Nothing))

  describe "getCluster" $ do
    it "returns the correct cluster" $ do
      config <- getConfig
      server <$> getCluster config `shouldBe` (Right "https://aaa.example.com")

  describe "getAuthInfo" $ do
    it "returns the correct authInfo" $ do
      config <- getConfig
      fst <$> getAuthInfo config `shouldBe` (Right "user-aaa")