webdriver-wrapper-0.1.0.0: src/Test/WebDriverWrapper/Helpers.hs
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Test.WebDriverWrapper.Helpers
Description : Generic functions.
-}
module Test.WebDriverWrapper.Helpers (download, decompress) where
import Test.WebDriverWrapper.Constants (fileFormat, geckoDriverPath)
import Network.HTTP.Simple (setRequestHeader, setRequestMethod, httpLBS)
import Network.HTTP.Types (hUserAgent)
import Network.HTTP.Conduit (Response(..), parseRequest)
import qualified Data.ByteString.Lazy as BS
import Codec.Archive.Zip (toArchive, fromArchive)
import qualified Codec.Compression.GZip as G
import qualified Codec.Archive.Tar as Tar
import System.Posix ( setFileMode, accessModes )
-- | Downloads from @url@ at @output@ filepath.
download :: String -> FilePath -> IO()
download url output = do
requestUrl <- parseRequest url
let
request
= setRequestMethod "GET"
$ setRequestHeader hUserAgent ["cli"]
requestUrl
response <- responseBody <$> httpLBS request
BS.writeFile output response
-- | Decompresses geckodriver's download, which comes in @.zip@ for Windows or @.tar.gz@ for everyone else.
-- Takes in the archive's filepath and the output filepath.
decompress :: FilePath -> FilePath -> IO()
decompress file outputPath = do
case fileFormat of
".zip" -> do
archive <- toArchive <$> BS.readFile file
BS.writeFile outputPath $ fromArchive archive
".tar.gz" -> do
tarball <- G.decompress <$> BS.readFile file
Tar.unpack outputPath $ Tar.read tarball
geckoDriver <- geckoDriverPath
setFileMode geckoDriver accessModes
_ -> error "unknown file"