content: {-# LANGUAGE OverloadedStrings #-}
  module Kubernetes.Client.Auth.BasicSpec where
  
  import           Test.Hspec
  import           Data.Typeable
  import           Data.Maybe                     ( isJust
                                                  , isNothing
                                                  , fromJust
                                                  )
  import           Kubernetes.Client.Auth.Basic
  import           Kubernetes.Client.KubeConfig
  import           Kubernetes.OpenAPI
  import           Network.TLS                    ( defaultParamsClient )
  
  emptyAuthInfo :: AuthInfo
  emptyAuthInfo = AuthInfo Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
                           Nothing
  
  spec :: Spec
  spec = do
    let testTLSParams  = defaultParamsClient "" ""
        testUsername   = Just "testuser"
        testPassword   = Just "testpassword"
        basicAuthInfo  = emptyAuthInfo { username = testUsername, password = testPassword}
    describe "Basic Authentication" $ do
      it "should return Nothing if the username an d/or password is not provided" $ do
        testConfig <- newConfig
        isNothing (basicAuth emptyAuthInfo (testTLSParams, testConfig))
          `shouldBe` True
        isNothing (basicAuth emptyAuthInfo { username = testUsername} (testTLSParams, testConfig))
          `shouldBe` True
        isNothing (basicAuth emptyAuthInfo { password = testUsername} (testTLSParams, testConfig))
          `shouldBe` True
  
      context "when username and password are provided" $ do
        it "should return a configuration provider io" $ do
          testConfig <- newConfig
          isJust (basicAuth basicAuthInfo (testTLSParams, testConfig)) `shouldBe` True
        
        it "should configure basic auth" $ do
          testConfig <- newConfig
          (_, (KubernetesClientConfig { configAuthMethods = AnyAuthMethod (a) : as })) <- 
            fromJust $ basicAuth basicAuthInfo (testTLSParams, testConfig)
          null as `shouldBe` True
          isJust (cast a :: Maybe BasicAuth) `shouldBe` True
  