{-# LANGUAGE TypeApplications #-} module Cursor.FuzzyDaySpec where import Cursor.FuzzyDay import Cursor.FuzzyDay.Gen () import Data.Int import Data.Time import Test.Hspec import Test.QuickCheck import Test.Validity import Test.Validity.Optics spec :: Spec spec = do eqSpec @FuzzyDayCursor genValidSpec @FuzzyDayCursor describe "emptyFuzzyDayCursor" $ do it "produces valid cursors" $ producesValid emptyFuzzyDayCursor it "makes cursors that makes the guessing produce nothing" $ forAllValid $ \today -> fuzzyDayCursorGuessForwards (emptyFuzzyDayCursor today) `shouldBe` Nothing it "makes cursors that makes the guessing produce nothing" $ forAllValid $ \today -> fuzzyDayCursorGuessBackwards (emptyFuzzyDayCursor today) `shouldBe` Nothing describe "makeFuzzyDayCursor" $ do it "produces valid cursors" $ producesValid makeFuzzyDayCursor it "makes cursors that makes the guessing produce the given time for recent days" $ forAll (ModifiedJulianDay . fromIntegral <$> (genValid :: Gen Int16)) $ \d -> fuzzyDayCursorGuessForwards (makeFuzzyDayCursor d) `shouldBe` Just d it "makes cursors that makes the guessing produce the given time for recent days" $ forAll (ModifiedJulianDay . fromIntegral <$> (genValid :: Gen Int16)) $ \d -> fuzzyDayCursorGuessBackwards (makeFuzzyDayCursor d) `shouldBe` Just d describe "rebuildFuzzyDayCursorForwards" $ do it "produces valid days" $ producesValid rebuildFuzzyDayCursorForwards describe "rebuildFuzzyDayCursorBackwards" $ do it "produces valid days" $ producesValid rebuildFuzzyDayCursorBackwards describe "fuzzyDayCursorTextCursorL" $ lensSpec fuzzyDayCursorTextCursorL describe "fuzzyDayCursorGuessForwards" $ it "guesses a valid day" $ producesValid fuzzyDayCursorGuessForwards describe "fuzzyDayCursorGuessBackwards" $ it "guesses a valid day" $ producesValid fuzzyDayCursorGuessBackwards