34 lines
931 B
Haskell
34 lines
931 B
Haskell
{-# LANGUAGE NoImplicitPrelude #-}
|
|
{-# LANGUAGE RecordWildCards #-}
|
|
|
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
|
|
module Handler.Utils.Zip.RatingSpec where
|
|
|
|
import TestImport
|
|
|
|
import Handler.Utils.Zip.Rating
|
|
|
|
import qualified Data.ByteString.Lazy as Lazy.ByteString
|
|
|
|
import qualified Data.Text as Text
|
|
|
|
import Database.Persist.Class
|
|
import Database.Persist.Sql
|
|
|
|
|
|
instance Arbitrary Rating where
|
|
arbitrary = do
|
|
ratingCourseName <- arbitrary
|
|
ratingSheetName <- arbitrary
|
|
ratingSubmissionId <- SubmissionKey . SqlBackendKey <$> arbitrary
|
|
ratingComment <- (fmap Text.strip <$> arbitrary) `suchThat` maybe True (not . Text.null)
|
|
ratingPoints <- arbitrary
|
|
return Rating{..}
|
|
|
|
|
|
spec :: Spec
|
|
spec = describe "Rating files" $ do
|
|
it "have compatible formatting/parsing" . property $
|
|
\rating@(Rating{..}) -> parseRating (Lazy.ByteString.toStrict $ formatRating rating) >>= (`shouldBe` (ratingPoints, ratingComment))
|