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 +3/−1
- test/HaskellWorks/Polysemy/TestContainers/LocalStackSpec.hs +10/−7
- test/Test/Polysemy/Env.hs +2/−2
- testcontainers-localstack/HaskellWorks/Polysemy/Amazonka/LocalStack.hs +31/−6
- testcontainers-localstack/HaskellWorks/TestContainers/LocalStack.hs +13/−7
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