packages feed

nakadi-client-0.4.0.0: tests/Tests.hs

import           ClassyPrelude

import           Network.HTTP.Client
import           Network.Nakadi
import           Network.Nakadi.Config.Test
import           Network.Nakadi.Connection.Test
import           Network.Nakadi.EventTypes.Test
import           Network.Nakadi.Internal.Test
import           Network.Nakadi.Registry.Test
import           Network.Nakadi.Subscriptions.Test
import           System.Environment
import           System.Exit
import           System.IO                         (hFlush)
import           Test.Tasty

main :: IO ()
main = do
  putStrLn ""
  maybeNakadiEndpoint <- lookupEnv "TEST_NAKADI_ENDPOINT"
  (label, runTests) <- case maybeNakadiEndpoint of
    Nothing -> do
      hPut stderr . encodeUtf8 $
        "***************************************************************\n\
        \** The environment variable TEST_NAKADI_ENDPOINT is not set. **\n\
        \**                                                           **\n\
        \**              SKIPPING INTEGRATION TESTS                   **\n\
        \**                                                           **\n\
        \** If you want to run the integration tests contained in     **\n\
        \** this test suite, you need to run a Nakadi server which    **\n\
        \** allows access without authentication. Then, set the       **\n\
        \** environment variable TEST_NAKADI_ENDPOINT to the base     **\n\
        \** endpoint of this Nakadi server.                           **\n\
        \**                                                           **\n\
        \** To run a local Nakadi server clone the repository         **\n\
        \**                                                           **\n\
        \**     https://github.com/zalando/nakadi                     **\n\
        \**                                                           **\n\
        \** and follow the contained instructions; the command        **\n\
        \**                                                           **\n\
        \**     ./gradlew startNakadi                                 **\n\
        \**                                                           **\n\
        \** starts a local Nakadi server at http://localhost:8080.    **\n\
        \**                                                           **\n\
        \** Thus, set TEST_NAKADI_ENDPOINT to http://localhost:8080.  **\n\
        \***************************************************************\n"
      return ("nakadi-client Test Suite (w/o integration tests)", unitTests)
    Just nakadiEndpoint -> do
      let nakadiEndpointT = pack nakadiEndpoint
      case parseRequest nakadiEndpoint of
        Just request -> do
          conf <- newConfig Nothing request
          return ("nakadi-client Test Suite", unitTests ++ integrationTests conf)
        Nothing -> do
          hPut stderr . encodeUtf8 $
            "Failed to parse Nakadi URL in TEST_NAKADI_ENDPOINT (" <> nakadiEndpointT <> ")"
          hFlush stderr
          exitFailure
  defaultMain (testGroup label runTests)

unitTests :: [TestTree]
unitTests =
  [ testInternal
  , testConfig
  , testConnection
  ]

integrationTests :: Config -> [TestTree]
integrationTests conf =
  [ testEventTypes conf
  , testRegistry conf
  , testSubscriptions conf
  ]