cabal-cache-1.2.0.0: test/HaskellWorks/CabalCache/AwsSpec.hs
module HaskellWorks.CabalCache.AwsSpec
( spec
) where
import Data.Generics.Product.Any
import Effectful
import Effectful.Concurrent
import Effectful.Resource
import Effectful.Environment
import Effectful.Error.Static (runError)
import Effectful.Zoo.Amazonka.Api.Discover
import Effectful.Zoo.Amazonka.Data.AwsEnv
import Effectful.Zoo.Amazonka.Data.AwsError
import Effectful.Zoo.Amazonka.Data.AwsLogEntry
import Effectful.Zoo.Core
import Effectful.Zoo.Core.Error.Static
import Effectful.Zoo.Hedgehog.Api
import Effectful.Zoo.Hedgehog.Dynamic
import Effectful.Zoo.HUnit
import Effectful.Zoo.Lazy.Dynamic
import HaskellWorks.CabalCache.AppError (AwsStatusError(..))
import HaskellWorks.CabalCache.Error (UnsupportedUri)
import HaskellWorks.Prelude
import Lens.Micro
import Test.Hspec
import qualified HaskellWorks.CabalCache.AWS.S3 as AWS
import qualified Network.URI as URI
{- HLINT ignore "Redundant do" -}
{- HLINT ignore "Reduce duplication" -}
{- HLINT ignore "Redundant bracket" -}
data Success = Success deriving Show
catchSuccess :: forall r. ()
=> r <: Hedgehog
=> r <: IOE
=> Eff (Error Success : r) Void
-> Eff r ()
catchSuccess f = do
result <- f & runError @Success
case result of
Left (_, Success) -> pure ()
Right a -> absurd a
runTestEnv :: forall a r. ()
=> r <: IOE
=> Eff
( Lazy AwsEnv
: Concurrent
: Environment
: Resource
: r
) a
-> Eff r a
runTestEnv f =
f
& runLazy discoverAwsEnv
& runConcurrent
& runEnvironment
& runResource
spec :: Spec
spec = describe "HaskellWorks.CabalCache.QuerySpec" do
it "stub" $ requireTest $ hedgehog $ runTestEnv $ catchSuccess $ do
uri <- URI.parseURI "s3://cache.haskellworks.io/test/cabal-cache/ci"
& onNothingFail
void (AWS.headS3Uri uri)
& jotShowDataLog @AwsLogEntry
& do trap @AwsStatusError \e -> do
assert $ e.status ^. the @"statusCode" == 404 || e.status ^. the @"statusCode" == 301
throw Success
& do trap_ @AwsError failure
& do trap_ @AwsStatusError failure
& do trap_ @UnsupportedUri failure
failure