packages feed

hw-polysemy 0.2.12.0 → 0.2.13.0

raw patch · 5 files changed

+59/−23 lines, 5 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- HaskellWorks.TestContainers.LocalStack: [$sel:host:LocalStackEndpoint] :: LocalStackEndpoint -> String
- HaskellWorks.TestContainers.LocalStack: [$sel:port:LocalStackEndpoint] :: LocalStackEndpoint -> Int
+ HaskellWorks.Polysemy.Amazonka.LocalStack: getLocalStackEndpoint :: () => Container -> Sem r LocalStackEndpoint
+ HaskellWorks.Polysemy.Amazonka.LocalStack: inspectContainer :: () => Member (Embed IO) r => Container -> Sem r Value
+ HaskellWorks.TestContainers.LocalStack: data () => Container
- HaskellWorks.Polysemy.Amazonka.LocalStack: runReaderLocalAwsEnvDiscover :: () => Member (Embed IO) r => IO LocalStackEndpoint -> Sem (Reader Env : r) a -> Sem r a
+ HaskellWorks.Polysemy.Amazonka.LocalStack: runReaderLocalAwsEnvDiscover :: () => Member (Embed IO) r => IO Container -> Sem (Reader Env : r) a -> Sem r a
- HaskellWorks.TestContainers.LocalStack: setupContainers :: MonadDocker m => m LocalStackEndpoint
+ HaskellWorks.TestContainers.LocalStack: setupContainers :: MonadDocker m => m Container

Files

hw-polysemy.cabal view
@@ -1,6 +1,6 @@ cabal-version:          3.4 name:                   hw-polysemy-version:                0.2.12.0+version:                0.2.13.0 synopsis:               Opinionated polysemy library description:            Opinionated polysemy library. license:                Apache-2.0@@ -220,6 +220,7 @@  library testcontainers-localstack   import:               base, project-config,+                        aeson,                         amazonka,                         bytestring,                         generic-lens,@@ -233,6 +234,7 @@                         testcontainers,                         text,                         time,+                        yaml,   visibility:           public   exposed-modules:      HaskellWorks.Polysemy.Amazonka.LocalStack                         HaskellWorks.TestContainers.LocalStack
test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs view
@@ -11,23 +11,26 @@  import           HaskellWorks.TestContainers.LocalStack import           Test.Polysemy.Env-import qualified Test.Tasty                             as Tasty-import qualified Test.Tasty.Hedgehog                    as H+import qualified Test.Tasty                                as Tasty+import qualified Test.Tasty.Hedgehog                       as H -import qualified Amazonka.S3                            as AWS+import qualified Amazonka.S3                               as AWS import           HaskellWorks.Polysemy.Amazonka+import           HaskellWorks.Polysemy.Amazonka.LocalStack import           HaskellWorks.Polysemy.Hedgehog import           HaskellWorks.Prelude import           Polysemy-import qualified TestContainers.Tasty                   as TC+import qualified TestContainers.Tasty                      as TC  {- HLINT ignore "Use camelCase" -}  tasty_local_stack :: Tasty.TestTree tasty_local_stack =-  TC.withContainers setupContainers $ \start ->-    H.testProperty "Local stack test" $ propertyOnce $ runLocalTestEnv start $ do-      ep <- embed start+  TC.withContainers setupContainers $ \getContainer ->+    H.testProperty "Local stack test" $ propertyOnce $ runLocalTestEnv getContainer $ do+      container <- embed getContainer+      ep <- getLocalStackEndpoint container+      jotYamlM_ $ inspectContainer container       jotShow_ ep       listBucketsReq <- pure AWS.newListBuckets 
test/Test/Polysemy/Env.hs view
@@ -23,10 +23,10 @@ import           HaskellWorks.Polysemy.Hedgehog import           HaskellWorks.Polysemy.System.Environment import           HaskellWorks.Prelude-import           HaskellWorks.TestContainers.LocalStack import           Polysemy import           Polysemy.Error import           Polysemy.Reader+import qualified TestContainers.Tasty                      as TC  newtype EnvironmentVariableMissing =   EnvironmentVariableMissing String@@ -49,7 +49,7 @@   => HasCallStack   => Member (Embed IO) r   => Member Hedgehog r-  => IO LocalStackEndpoint+  => IO TC.Container   -> Sem         ( Reader AWS.Env         : r)
testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs view
@@ -2,25 +2,32 @@  module HaskellWorks.Polysemy.Amazonka.LocalStack   ( runReaderLocalAwsEnvDiscover+  , getLocalStackEndpoint+  , inspectContainer   ) where -import qualified Amazonka                               as AWS-import qualified Amazonka.Auth                          as AWS-import           Control.Lens                           ((%~), (.~), (^.))+import qualified Amazonka                                     as AWS+import qualified Amazonka.Auth                                as AWS+import           Control.Lens                                 ((%~), (.~), (^.))+import qualified Data.Aeson                                   as J import           Data.Generics.Product.Any import           HaskellWorks.Prelude import           HaskellWorks.TestContainers.LocalStack+import qualified HaskellWorks.TestContainers.LocalStack.Types as Z import           Polysemy import           Polysemy.Reader-import qualified System.IO                              as IO+import qualified System.IO                                    as IO+import qualified TestContainers.Monad                         as TC+import qualified TestContainers.Tasty                         as TC  runReaderLocalAwsEnvDiscover :: ()   => Member (Embed IO) r-  => IO LocalStackEndpoint+  => IO TC.Container   -> Sem (Reader AWS.Env : r) a   -> Sem r a runReaderLocalAwsEnvDiscover mk f = do-  ep <- embed mk+  container <- embed mk+  ep <- getLocalStackEndpoint container    logger' <- embed $ AWS.newLogger AWS.Debug IO.stdout @@ -34,3 +41,21 @@       & the @"overrides" %~ (. AWS.setEndpoint False "localhost" (ep ^. the @"port"))    runReader awsEnv f++getLocalStackEndpoint :: ()+  => TC.Container+  -> Sem r LocalStackEndpoint+getLocalStackEndpoint container = do+  let localStackPort = TC.containerPort container 4566++  pure Z.LocalStackEndpoint+    { Z.host = "0.0.0.0"+    , Z.port = localStackPort+    }++inspectContainer :: ()+  => Member (Embed IO) r+  => TC.Container+  -> Sem r J.Value+inspectContainer container =+  embed $ TC.runTestContainer TC.defaultDockerConfig $ TC.inspect container
testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs view
@@ -1,10 +1,13 @@ {-# LANGUAGE GADTs             #-}+{-# LANGUAGE NamedFieldPuns    #-} {-# LANGUAGE OverloadedStrings #-} + {- HLINT ignore "Use camelCase" -}  module HaskellWorks.TestContainers.LocalStack   ( LocalStackEndpoint(..)+  , TC.Container   , setupContainers   , waitForLocalStack   ) where@@ -15,19 +18,22 @@ import           Control.Exception                            (try) import           Control.Monad                                (when) import           Control.Monad.IO.Class+import qualified Data.ByteString                              as BS import qualified Data.ByteString.Lazy                         as LBS import           Data.Function import qualified Data.Text                                    as T import           Data.Time.Clock.POSIX                        (getPOSIXTime)+import qualified Data.Yaml                                    as Y import           HaskellWorks.TestContainers.LocalStack.Types (LocalStackEndpoint (LocalStackEndpoint))-import qualified HaskellWorks.TestContainers.LocalStack.Types as Z import           Network.HTTP.Conduit                         (HttpException,                                                                simpleHttp) import qualified System.Environment                           as IO+import qualified System.IO                                    as IO+import qualified TestContainers.Monad                         as TC import qualified TestContainers.Tasty                         as TC  -- | Sets up and runs the containers required for this test suite.-setupContainers :: TC.MonadDocker m => m LocalStackEndpoint+setupContainers :: TC.MonadDocker m => m TC.Container setupContainers = do   authToken <- liftIO $ IO.lookupEnv "LOCALSTACK_AUTH_TOKEN"   -- Launch the container based on the postgres image.@@ -38,22 +44,22 @@     & TC.setExpose         ( mconcat             [ [ 4566 ]-            , fmap fromInteger [4510 .. 4559]             ]         )     -- Wait until the container is ready to accept requests. `run` blocks until     -- readiness can be established.     & TC.setWaitingFor (TC.waitUntilMappedPortReachable 4566) +  json <- liftIO $ TC.runTestContainer TC.defaultDockerConfig $ TC.inspect localstackContainer++  liftIO $ BS.hPut IO.stdout $ "Local stack container: " <> Y.encode json+   -- Look up the corresponding port on the host machine for the exposed port 4566.   let localStackPort = TC.containerPort localstackContainer 4566    liftIO $ waitForLocalStack "localhost" localStackPort 8 -  pure $ LocalStackEndpoint-    { Z.host = "0.0.0.0"-    , Z.port = localStackPort-    }+  pure localstackContainer  waitForLocalStack :: String -> Int -> Int -> IO () waitForLocalStack host port timeout = do