packages feed

pgmq-inspect-0.7.0.0: test/ConfigSpec.hs

module ConfigSpec (tests) where

import Data.Either (isLeft)
import Data.List.NonEmpty (NonEmpty (..))
import Pgmq.Inspect.Config
import Test.Tasty
import Test.Tasty.HUnit

tests :: TestTree
tests =
  testGroup
    "Checked configuration"
    [ testCase "defaults are valid" $ validateInspectConfig defaultInspectConfig @?= Right defaultInspectConfig,
      testGroup
        "invalid values rejected before allocation"
        [ testCase label $ assertBool label (isLeft (validateInspectConfig cfg))
        | (label, cfg) <-
            [ ("zero default", defaultInspectConfig {defaultPageLimit = 0}),
              ("negative default", defaultInspectConfig {defaultPageLimit = -1}),
              ("default above max", defaultInspectConfig {defaultPageLimit = 501}),
              ("zero max", defaultInspectConfig {maxPageLimit = 0}),
              ("lookahead overflow", defaultInspectConfig {maxPageLimit = maxBound}),
              ("zero outbox", defaultInspectConfig {wsQueueCapacity = 0}),
              ("zero reads", defaultInspectConfig {maxConcurrentReads = 0}),
              ("negative interval", defaultInspectConfig {pollIntervalUs = -1}),
              ("wildcard", defaultInspectConfig {corsPolicy = CorsAllowOrigins ("*" :| [])}),
              ("wildcard host", defaultInspectConfig {corsPolicy = CorsAllowOrigins ("http://*" :| [])}),
              ("credentials", defaultInspectConfig {corsPolicy = CorsAllowOrigins ("http://user@host" :| [])}),
              ("origin path", defaultInspectConfig {corsPolicy = CorsAllowOrigins ("http://host/path" :| [])}),
              ("bad port", defaultInspectConfig {corsPolicy = CorsAllowOrigins ("http://host:65536" :| [])})
            ]
        ]
    ]