{-# LANGUAGE OverloadedStrings #-}

module Main where

import           Data.Monoid
import           Data.Text            (Text)
import           Test.Hspec

import           System.Nagios.Plugin

main :: IO ()
main = hspec suite

suite :: Spec
suite = describe "runNagiosPlugin'" $ do
    it "returns default result if no results are specified" $ do
        (_,s) <- runNagiosPlugin' (return ())
        snd (finishState s) `shouldBe` "UNKNOWN: no check result specified"
        fst (finishState s) `shouldBe` Unknown

    it "returns explicitly added result in favor of default" $ do
        (_,s) <- runNagiosPlugin' (universeCheck pi)
        snd (finishState s) `shouldBe` ("OK: " <> universeGoodResult)
        fst (finishState s) `shouldBe` OK

    it "returns result with greatest badness" $ do
        (_,s) <- runNagiosPlugin' (universeCheck 1.0)
        snd (finishState s) `shouldBe` ("CRITICAL: " <> universeBadResult)
        fst (finishState s) `shouldBe` Critical


universeCheck :: Double -> NagiosPlugin ()
universeCheck pi' = do
    addResult OK universeGoodResult
    if (pi' < (3.0 :: Double)) then addResult Critical universeBadResult else return ()

universeGoodResult :: Text
universeGoodResult = "universe passes basic consistency tests"

universeBadResult :: Text
universeBadResult = "universe broken, π < 3"