packages feed

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

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

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

module HaskellWorks.CabalCache.AwsSpec
  ( spec
  ) where

import HaskellWorks.CabalCache.AppError (AwsError(..))
import HaskellWorks.CabalCache.Error    (UnsupportedUri)
import HaskellWorks.Hspec.Hedgehog
import HaskellWorks.Prelude
import Hedgehog
import Test.Hspec

import qualified Amazonka                         as AWS
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.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://cache.haskellworks.io/test/cabal-cache/ci"
      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" }
          }