mirror of
https://github.com/typeable/wai.git
synced 2024-12-29 09:04:33 +03:00
46 lines
1.7 KiB
Haskell
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
|
|
|