packages feed

conditional-restriction-parser-0.1.0.4: test/ConditionalRestriction/Parse/OpeningHoursParserSpec.hs

module ConditionalRestriction.Parse.OpeningHoursParserSpec where

import ConditionalRestriction (Result (Ok))
import ConditionalRestriction.Internal.Parse.OpeningHoursParser
  ( pOpeningHours,
    pRuleModifier,
    pRuleSequence,
    pSelectorSequence,
    pWeekdaySelector,
  )
import ConditionalRestriction.Parse
  ( Parser (parse),
    pOpeningHours,
  )
import ConditionalRestriction.Parse.AST
  ( OpeningHours (OpeningHours),
    RuleSequence (RuleSequence),
    RuleType (Normal),
    SelectorSequence (TwentyFourSeven, WeekdaySel),
    WeekdayRange (SingleDay, WdayRange),
  )
import Data.Hourglass (WeekDay (Monday, Saturday, Thursday))
import Test.Hspec (Spec, describe, it, shouldBe)

spec :: Spec
spec = do
  describe "pOpeningHours" $ do
    it "can parse 'Mo'" $
      parse pOpeningHours "Mo" `shouldBe` Ok (OpeningHours [RuleSequence Normal (WeekdaySel [SingleDay Monday]) (Just True)], "")
  describe "pRuleSequence" $ do
    it "can parse 'Mo'" $
      parse (pRuleSequence Normal) "Mo" `shouldBe` Ok (RuleSequence Normal (WeekdaySel [SingleDay Monday]) (Just True), "")
  describe "pRuleModfier" $ do
    it "can parse 'closed'" $
      parse pRuleModifier "closed" `shouldBe` Ok (Just False, "")
    it "can parse closed plus a comment" $
      parse pRuleModifier "closed \"comment\"" `shouldBe` Ok (Just False, "")
  describe "pSelectorSequence" $ do
    it "can parse '24/7'" $
      parse pSelectorSequence "24/7" `shouldBe` Ok (TwentyFourSeven, "")
  describe "pWeekdaySelector" $ do
    it "can parse 'Mo - Th, Sa'" $
      parse pWeekdaySelector "Mo - Th, Sa" `shouldBe` Ok ([WdayRange Monday Thursday, SingleDay Saturday], "")