fradrive/test/Handler/Utils/RatingSpec.hs
2019-11-04 11:55:07 +01:00

31 lines
1.3 KiB
Haskell

module Handler.Utils.RatingSpec where
import TestImport
import Handler.Utils.Rating
import ModelSpec ()
import Model.RatingSpec ()
import Data.Time.Clock.System (systemEpochDay)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Text as Text
import Utils (assertM)
spec :: Spec
spec = describe "Rating file parsing/pretty-printing" $ do
it "roundtrips" . property $ \(_ :: SubmissionId, subId) (mRating -> rating) ->
parseRating' (formatRating subId rating) === Just (ratingValues rating)
it "has idempotent formatting" . property $ \(_ :: SubmissionId, subId) (mRating -> rating) ->
fmap (\r' -> formatRating subId $ rating { ratingValues = r' }) (parseRating' $ formatRating subId rating) === Just (formatRating subId rating)
where
parseRating' :: LBS.ByteString -> Maybe Rating'
parseRating' = parseRating . flip (File "bewertung.txt") time . Just . LBS.toStrict
time = UTCTime systemEpochDay 0
mRating rating = rating { ratingValues = mRating' $ ratingValues rating }
mRating' rating' = rating' { ratingTime = Just time -- There is no field for ratingTime so we just always expect file modification time
, ratingComment = assertM (not . Text.null) $ Text.strip <$> ratingComment rating'
}