fradrive/test/Handler/Utils/RatingSpec.hs
Gregor Kleen 2bf484609e feat(rating): pretty-print to new yaml based format
Parsing not implemented yet; tests should fail
2020-06-16 18:23:02 +02:00

35 lines
1.5 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, MsgRendererS(..))
import Text.Shakespeare.I18N (renderMessage)
spec :: Spec
spec = describe "Rating file parsing/pretty-printing" $ do
it "roundtrips" . property $ \(_ :: SubmissionId, subId) (mRating -> rating) ->
parseRating' (formatRating mr' def subId rating) === Just (ratingValues rating)
it "has idempotent formatting" . property $ \(_ :: SubmissionId, subId) (mRating -> rating) ->
fmap (\r' -> formatRating mr' def subId $ rating { ratingValues = r' }) (parseRating' $ formatRating mr' def subId rating) === Just (formatRating mr' def subId rating)
where
mr' :: forall site. MsgRendererS site
mr' = MsgRenderer $ renderMessage (error "foundation inspected" :: site) []
parseRating' :: LBS.ByteString -> Maybe Rating'
parseRating' = either (\(_ :: SomeException) -> Nothing) Just . 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'
}