haskell-cron-matcher/test/PatternSpec.hs

42 lines
1.1 KiB
Haskell

module PatternSpec
( main
, spec
) where
import Data.Dates
import Data.Maybe
import Pattern
import Test.Hspec
main :: IO ()
main = hspec spec
spec :: Spec
spec =
describe "Cron pattern" $ do
it "createFields" $ length (createFields "* * * * * *") `shouldBe` 6
it "matches fixed time" $
let ptn = "* * * * * *"
date = DateTime 2017 10 11 0 0 0
in match ptn date `shouldBe` Just True
it "matches all minutes" $
let ptn = "* * * * * *"
dates = [DateTime 2017 10 11 0 i 0 | i <- [0 .. 59]]
in countMatches ptn dates `shouldBe` 60
it "matches exactly moment" $
let date = DateTime 2017 10 11 0 0 0
ptn = "0 0 11 10 * 2017"
in match ptn date `shouldBe` Just True
it "matches moment" $
let date = DateTime 2017 10 10 12 10 0
ptn = "* 12 * * * *"
in match ptn date `shouldBe` Just True
countMatches :: String -> [DateTime] -> Int
countMatches p xs = sum $ map (f p) xs
where
f x d =
if isJust $ match x d
then 1
else 0