packages feed

cabal-cache-1.0.6.0: test/HaskellWorks/CabalCache/AwsSpec.hs

{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications    #-}

{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}

module HaskellWorks.CabalCache.AwsSpec
  ( spec
  ) where

import Control.Lens
import Control.Monad
import Control.Monad.Except             (runExceptT)
import Control.Monad.IO.Class
import Data.Maybe                       (isJust)
import HaskellWorks.CabalCache.AppError (AwsError(..))
import HaskellWorks.CabalCache.Error    (UnsupportedUri)
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec

import qualified Control.Monad.Oops               as OO
import qualified Data.ByteString.Lazy.Char8       as LBSC
import qualified Data.Variant                     as OO
import qualified HaskellWorks.CabalCache.AWS.Env  as AWS
import qualified HaskellWorks.CabalCache.AWS.S3   as AWS
import qualified Hedgehog                         as H
import qualified Network.AWS                      as AWS
import qualified Network.HTTP.Types               as HTTP
import qualified Network.URI                      as URI
import qualified System.Environment               as IO

{- HLINT ignore "Redundant do"        -}
{- HLINT ignore "Reduce duplication"  -}
{- HLINT ignore "Redundant bracket"   -}

spec :: Spec
spec = describe "HaskellWorks.CabalCache.QuerySpec" do
  it "stub" $ requireTest do
    ci <- liftIO $ IO.lookupEnv "CI" <&> isJust
    unless ci do
      envAws <- liftIO $ AWS.mkEnv AWS.Oregon (const LBSC.putStrLn)
      let Just uri = URI.parseURI "s3://jky-mayhem/hjddhd"
      result :: Either (OO.Variant '[AwsError, UnsupportedUri]) ()
        <- liftIO $ runExceptT $ OO.suspend AWS.runResourceT $ void (AWS.headS3Uri envAws uri)

      case result of
        Right _ -> H.failure
        Left e -> OO.toEithers e === Left AwsError
          { status = HTTP.Status { HTTP.statusCode = 404 , HTTP.statusMessage = "Not Found" }
          }