31 lines
1.3 KiB
Haskell
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'
|
|
}
|