packages feed

sandwich-slack-0.2.0.0: app/Main.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-}

module Main where

import Control.Concurrent
import Control.Monad.IO.Class
import GHC.Stack
import Test.Sandwich
import Test.Sandwich.Formatters.Print
import Test.Sandwich.Formatters.Slack
import Test.Sandwich.Formatters.TerminalUI


simple :: TopSpec
simple = parallel $ do
  it "does the thing 1" sleepThenSucceed
  it "does the thing 2" sleepThenSucceed
  it "does the thing 3" deepSleepThenFail
  describe "should happen sequentially" $ do
    it "sequential 1" sleepThenSucceed
    it "sequential 2" sleepThenFail
    it "sequential 3" sleepThenSucceed
  it "does the thing 4" deepSleepThenFail
  it "does the thing 5" sleepThenSucceed
  it "does the thing 6" sleepThenSucceed


slackFormatter = defaultSlackFormatter {
  slackFormatterSlackConfig = SlackConfig ""
  , slackFormatterTopMessage = Just "Top message"
  , slackFormatterChannel = "test-channel"

  , slackFormatterMaxFailures = Just 2
  , slackFormatterMaxFailureReasonLines = Just 1
  , slackFormatterMaxCallStackLines = Just 3

  , slackFormatterVisibilityThreshold = Just 50
  }

main :: IO ()
main = runSandwich options simple
  where
    options = defaultOptions {
      optionsTestArtifactsDirectory = defaultTestArtifactsDirectory
      , optionsFormatters = [SomeFormatter defaultTerminalUIFormatter, SomeFormatter slackFormatter]
      }

-- * Util

sleepThenSucceed :: (HasCallStack) => ExampleM context ()
sleepThenSucceed = do
  -- liftIO $ threadDelay (2 * 10^1)
  liftIO $ threadDelay (2 * 10^5)
  -- liftIO $ threadDelay (1 * 10^6)
  -- liftIO $ threadDelay (3 * 10^6)

sleepThenFail :: (HasCallStack) => ExampleM context ()
sleepThenFail = do
  -- liftIO $ threadDelay (2 * 10^1)
  liftIO $ threadDelay (2 * 10^5)
  -- liftIO $ threadDelay (1 * 10^6)
  -- liftIO $ threadDelay (3 * 10^6)
  2 `shouldBe` 3


deepSleepThenFail :: (HasCallStack) => ExampleM context ()
deepSleepThenFail = deepSleepThenFail2

deepSleepThenFail2 :: (HasCallStack) => ExampleM context ()
deepSleepThenFail2 = deepSleepThenFail3

deepSleepThenFail3 :: (HasCallStack) => ExampleM context ()
deepSleepThenFail3 = sleepThenFail