wai/warp/test/FileSpec.hs
2015-12-04 15:00:47 +09:00

46 lines
1.7 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module FileSpec (main, spec) where
import Network.HTTP.Types
import Network.Wai.Handler.Warp.File
import Network.Wai.Handler.Warp.FileInfoCache
import Network.Wai.Handler.Warp.Header
import Test.Hspec
main :: IO ()
main = hspec spec
testFileRange :: String
-> RequestHeaders -> FilePath
-> RspFileInfo
-> Spec
testFileRange desc reqhs file ans = it desc $ do
finfo <- getInfo file
let WithBody s hs off len = ans
hs' = ("Last-Modified",fileInfoDate finfo) : hs
ans' = WithBody s hs' off len
conditionalRequest finfo [] (indexRequestHeader reqhs) `shouldBe` ans'
spec :: Spec
spec = do
describe "conditionalRequest" $ do
testFileRange
"gets a file size from file system"
[] "attic/hex"
$ WithBody ok200 [("Content-Length","16"),("Accept-Ranges","bytes")] 0 16
testFileRange
"gets a file size from file system and handles Range and returns Partical Content"
[("Range","bytes=2-14")] "attic/hex"
$ WithBody status206 [("Content-Range","bytes 2-14/16"),("Content-Length","13"),("Accept-Ranges","bytes")] 2 13
testFileRange
"truncates end point of range to file size"
[("Range","bytes=10-20")] "attic/hex"
$ WithBody status206 [("Content-Range","bytes 10-15/16"),("Content-Length","6"),("Accept-Ranges","bytes")] 10 6
testFileRange
"gets a file size from file system and handles Range and returns OK if Range means the entire"
[("Range:","bytes=0-15")] "attic/hex"
$ WithBody status200 [("Content-Length","16"),("Accept-Ranges","bytes")] 0 16