module Network.Minio.XmlParser.Test
(
xmlParserTests
) where
import Data.Time (addGregorianYearsClip, fromGregorian, UTCTime(..))
import Test.Tasty
import Test.Tasty.HUnit
import Lib.Prelude
import Network.Minio.Data
import Network.Minio.XmlParser
xmlParserTests :: TestTree
xmlParserTests = testGroup "XML Parser Tests"
[ testCase "Test parseLocation" testParseLocation
, testCase "Test parseNewMultipartUpload" testParseNewMultipartUpload
, testCase "Test parseListObjectsResponse" testParseListObjectsResult
]
testParseLocation :: Assertion
testParseLocation = do
-- 1. Test parsing of an invalid location constraint xml.
parsedLocationE <- runExceptT $ parseLocation "ClearlyInvalidXml"
case parsedLocationE of
Right _ -> assertFailure $ "Parsing should have failed => " ++ show parsedLocationE
Left _ -> return ()
forM_ cases $ \(xmldata, expectedLocation) -> do
parsedLocationE1 <- runExceptT $ parseLocation xmldata
case parsedLocationE1 of
Right parsedLocation -> parsedLocation @?= expectedLocation
_ -> assertFailure $ "Parsing failed => " ++ show parsedLocationE1
where
cases = [
-- 2. Test parsing of a valid location xml.
("\
\EU",
"EU"
)
,
-- 3. Test parsing of a valid, empty location xml.
("",
""
)
]
testParseNewMultipartUpload :: Assertion
testParseNewMultipartUpload = do
forM_ cases $ \(xmldata, expectedUploadId) -> do
parsedUploadIdE <- runExceptT $ parseNewMultipartUpload xmldata
case parsedUploadIdE of
Right upId -> upId @?= expectedUploadId
_ -> assertFailure $ "Parsing failed => " ++ show parsedUploadIdE
where
cases = [
("\
\\
\ example-bucket\
\ example-object\
\ VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA\
\",
"VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA"
),
("\
\\
\ example-bucket\
\ example-object\
\ EXAMPLEJZ6e0YupT2h66iePQCc9IEbYbDUy4RTpMeoSMLPRp8Z5o1u8feSRonpvnWsKKG35tI2LB9VDPiCgTy.Gq2VxQLYjrue4Nq.NBdqI-\
\",
"EXAMPLEJZ6e0YupT2h66iePQCc9IEbYbDUy4RTpMeoSMLPRp8Z5o1u8feSRonpvnWsKKG35tI2LB9VDPiCgTy.Gq2VxQLYjrue4Nq.NBdqI-"
)
]
testParseListObjectsResult :: Assertion
testParseListObjectsResult = do
let
xmldata = "\
\\
\bucket\
\\
\205\
\1000\
\false\
\\
\my-image.jpg\
\2009-10-12T17:50:30.000Z\
\"fba9dede5f27731c9771645a39863328"\
\434234\
\STANDARD\
\\
\"
expectedListResult = ListObjectsResult False Nothing [object1] []
object1 = ObjectInfo "my-image.jpg" modifiedTime1 "\"fba9dede5f27731c9771645a39863328\"" 434234
modifiedTime1 = flip UTCTime 64230 $ fromGregorian 2009 10 12
parsedListObjectsResult <- runExceptT $ parseListObjectsResponse xmldata
case parsedListObjectsResult of
Right listObjectsResult -> listObjectsResult @?= expectedListResult
_ -> assertFailure $ "Parsing failed => " ++ show parsedListObjectsResult