Be stricter about partial content response

This commit is contained in:
Joe Nelson
2014-09-07 10:47:57 -07:00
parent 7802fa5b7e
commit 63e3d69f4d
3 changed files with 34 additions and 19 deletions
+23 -5
View File
@@ -4,19 +4,37 @@ module Feature.RangeSpec where
import Test.Hspec
import Test.Hspec.Wai
import Network.HTTP.Types
import Network.Wai.Test (SResponse(simpleHeaders,simpleStatus))
import SpecHelper
spec :: Spec
spec = around appWithFixture $
describe "GET /items" $ do
context "without range headers" $
context "with response under server size limit" $
it "returns whole range with status 200" $
get "/items" `shouldRespondWith` 200
context "with range headers" $
context "of acceptable range" $
it "succeeds with partial content" $
context "with range headers" $ do
context "of acceptable range" $ do
it "succeeds with partial content" $ do
r <- request methodGet "/items"
(rangeHdrs $ ByteRangeFromTo 0 1) ""
liftIO $ do
simpleHeaders r `shouldSatisfy`
matchHeader "Content-Range" "0-1/[0-9]+"
simpleStatus r `shouldBe` partialContent206
it "understands open-ended ranges" $
request methodGet "/items"
(rangeHdrs $ ByteRangeFrom 0) ""
`shouldRespondWith` 200
context "of invalid range" $
it "fails with 416 for offside range" $
request methodGet "/items"
(rangeHdrs $ ByteRangeFromTo 0 1) ""
`shouldRespondWith` 206
(rangeHdrs $ ByteRangeFromTo 1 0) ""
`shouldRespondWith` 416