34 lines
1.1 KiB
Haskell
34 lines
1.1 KiB
Haskell
{-# LANGUAGE NoImplicitPrelude #-}
|
|
{-# LANGUAGE RecordWildCards #-}
|
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
|
|
module Handler.ZipSpec where
|
|
|
|
import TestImport
|
|
|
|
import Handler.Zip
|
|
|
|
import System.FilePath
|
|
|
|
import Data.Conduit
|
|
import qualified Data.Conduit.List as Conduit
|
|
import Data.Conduit.Binary (sourceLbs, sinkLbs)
|
|
|
|
instance Arbitrary ZipEntry where
|
|
arbitrary = do
|
|
zipEntryName <- joinPath <$> arbitrary
|
|
zipEntryTime <- arbitrary
|
|
zipEntryContents <- arbitrary
|
|
return ZipEntry{..}
|
|
|
|
spec :: Spec
|
|
spec = describe "Zip file handling" $ do
|
|
it "has compatible encoding/decoding to/from zip files" . property $
|
|
\zipFiles -> do
|
|
bs <- runConduit $ Conduit.sourceList zipFiles =$= produceZip def =$= sinkLbs
|
|
(_, zipFiles') <- runConduit $ sourceLbs bs =$= consumeZip return
|
|
forM_ (zip zipFiles zipFiles') $ \(file, file') -> do
|
|
(shouldBe `on` normalise . makeValid . dropTrailingPathSeparator) (zipEntryName file') (zipEntryName file)
|
|
-- (zipEntryTime file') `shouldBe` (zipEntryTime file)
|
|
(zipEntryContents file') `shouldBe` (zipEntryContents file)
|