packages feed

hadolint-1.18.2: test/ConfigSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module ConfigSpec where

import Control.Monad (unless)
import qualified Data.ByteString.Char8 as Bytes
import qualified Data.YAML as Yaml
import Hadolint.Config
import Test.HUnit
import Test.Hspec

tests :: SpecWith ()
tests =
  describe "Config" $ do
    it "Parses config with only ignores" $
      let configFile =
            [ "ignored:",
              "- DL3000",
              "- SC1010"
            ]
          expected = ConfigFile (Just ["DL3000", "SC1010"]) Nothing
       in assertConfig expected (Bytes.unlines configFile)

    it "Parses config with only trustedRegistries" $
      let configFile =
            [ "trustedRegistries:",
              "- hub.docker.com",
              "- my.shady.xyz"
            ]
          expected = ConfigFile Nothing (Just ["hub.docker.com", "my.shady.xyz"])
       in assertConfig expected (Bytes.unlines configFile)

    it "Parses full file" $
      let configFile =
            [ "trustedRegistries:",
              "- hub.docker.com",
              "",
              "ignored:",
              "- DL3000"
            ]
          expected = ConfigFile (Just ["DL3000"]) (Just ["hub.docker.com"])
       in assertConfig expected (Bytes.unlines configFile)

assertConfig :: HasCallStack => ConfigFile -> Bytes.ByteString -> Assertion
assertConfig config s =
  case Yaml.decode1Strict s of
    Left (_, err) ->
      assertFailure err
    Right result ->
      checkResult result
  where
    checkResult result =
      unless (result == config) $
        assertFailure ("Config \n\n" ++ show config ++ "\n\n is not \n\n" ++ show result)