{-# LANGUAGE OverloadedLists #-}
-- |

module Test.Sandwich.WebDriver.Internal.Capabilities (
  -- * Chrome
  chromeCapabilities
  , headlessChromeCapabilities

  -- * Firefox
  , firefoxCapabilities
  , headlessFirefoxCapabilities
  ) where

import qualified Data.Aeson as A
import Data.Default
import qualified Data.HashMap.Strict as HM
import qualified Data.Text as T
import Test.WebDriver

loggingPrefs :: A.Value
loggingPrefs :: Value
loggingPrefs = [Pair] -> Value
A.object [(Text
"browser", Value
"ALL")
                        , (Text
"client", Value
"WARNING")
                        , (Text
"driver", Value
"WARNING")
                        , (Text
"performance", Value
"ALL")
                        , (Text
"server", Value
"WARNING")
                        ]

-- * Chrome

-- | Default capabilities for regular Chrome.
-- Has the "browser" log level to "ALL" so that tests can collect browser logs.
chromeCapabilities :: Capabilities
chromeCapabilities :: Capabilities
chromeCapabilities =
  Capabilities
forall a. Default a => a
def {browser :: Browser
browser=Maybe String
-> Maybe String
-> [String]
-> [ChromeExtension]
-> Object
-> Browser
Chrome Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing [String]
args [] Object
chromePrefs
      , additionalCaps :: [Pair]
additionalCaps=[(Text
"loggingPrefs", Value
loggingPrefs)
                       , (Text
"goog:loggingPrefs", Value
loggingPrefs)]
      }
  where args :: [String]
args = [Item [String]
"--verbose"]

-- | Default capabilities for headless Chrome.
headlessChromeCapabilities :: Capabilities
headlessChromeCapabilities :: Capabilities
headlessChromeCapabilities =
  Capabilities
forall a. Default a => a
def {browser :: Browser
browser=Maybe String
-> Maybe String
-> [String]
-> [ChromeExtension]
-> Object
-> Browser
Chrome Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing [String]
args [] Object
chromePrefs
      , additionalCaps :: [Pair]
additionalCaps=[(Text
"loggingPrefs", Value
loggingPrefs)
                       , (Text
"goog:loggingPrefs", Value
loggingPrefs)]
      }
  where args :: [String]
args = [Item [String]
"--verbose", Item [String]
"--headless"]

chromePrefs :: HM.HashMap T.Text A.Value
chromePrefs :: Object
chromePrefs = [Pair] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList [
  (Text
"prefs", [Pair] -> Value
A.object [(Text
"profile.default_content_setting_values.automatic_downloads", Scientific -> Value
A.Number Scientific
1)
                     , (Text
"profile.content_settings.exceptions.automatic_downloads.*.setting", Scientific -> Value
A.Number Scientific
1)
                     , (Text
"download.prompt_for_download", Bool -> Value
A.Bool Bool
False)
                     , (Text
"download.directory_upgrade", Bool -> Value
A.Bool Bool
True)
                     , (Text
"download.default_directory", Value
"/tmp")])
  ]

-- * Firefox

-- | Default capabilities for regular Firefox.
firefoxCapabilities :: Capabilities
firefoxCapabilities :: Capabilities
firefoxCapabilities = Capabilities
forall a. Default a => a
def { browser :: Browser
browser=Browser
ff }
  where
    ff :: Browser
ff = Firefox :: Maybe (PreparedProfile Firefox)
-> LogLevel -> Maybe String -> Maybe Bool -> Browser
Firefox { ffProfile :: Maybe (PreparedProfile Firefox)
ffProfile = Maybe (PreparedProfile Firefox)
forall a. Maybe a
Nothing
                 , ffLogPref :: LogLevel
ffLogPref = LogLevel
LogAll
                 , ffBinary :: Maybe String
ffBinary = Maybe String
forall a. Maybe a
Nothing
                 , ffAcceptInsecureCerts :: Maybe Bool
ffAcceptInsecureCerts = Maybe Bool
forall a. Maybe a
Nothing
                 }

-- | Default capabilities for headless Firefox.
headlessFirefoxCapabilities :: Capabilities
headlessFirefoxCapabilities :: Capabilities
headlessFirefoxCapabilities = Capabilities
forall a. Default a => a
def { browser :: Browser
browser=Browser
ff, additionalCaps :: [Pair]
additionalCaps=[Pair]
additionalCaps }
  where
    ff :: Browser
ff = Firefox :: Maybe (PreparedProfile Firefox)
-> LogLevel -> Maybe String -> Maybe Bool -> Browser
Firefox { ffProfile :: Maybe (PreparedProfile Firefox)
ffProfile = Maybe (PreparedProfile Firefox)
forall a. Maybe a
Nothing
                 , ffLogPref :: LogLevel
ffLogPref = LogLevel
LogAll
                 , ffBinary :: Maybe String
ffBinary = Maybe String
forall a. Maybe a
Nothing
                 , ffAcceptInsecureCerts :: Maybe Bool
ffAcceptInsecureCerts = Maybe Bool
forall a. Maybe a
Nothing
                 }

    additionalCaps :: [Pair]
additionalCaps = [(Text
"moz:firefoxOptions", [Pair] -> Value
A.object [(Text
"args", Array -> Value
A.Array [Item Array
"-headless"])])]