{-# LANGUAGE BangPatterns #-} {-# LANGUAGE LambdaCase #-} module ConditionalRestrictionSpec where import ConditionalRestriction ( Result (Err, Ok), Type (TBool, TTime), evaluate, needsData, ) import ConditionalRestriction.Result (Result (Ok), fromResult) import Test.Hspec (Spec, describe, it, shouldBe, shouldMatchList, shouldSatisfy) spec :: Spec spec = do describe "needsData" $ do it "returns an empty list if no information is required" $ needsData "no @ 24/7" `shouldBe` Ok [] describe "evaluate" $ do it "returns an error message when there is a syntax error in the restriction" $ evaluate "no (at) 17:00-18:00" [] `shouldSatisfy` \case Err ([!_], []) -> True _ -> False it "returns an error message when there is a syntax error in the data" $ evaluate "no @ 17:00-18:00" [("time", "2022-05-20 10::15")] `shouldSatisfy` \case Err ([!_], []) -> True _ -> False