diff --git a/src/Dbapi.hs b/src/Dbapi.hs index 2c4f69fbb..74d65cacd 100644 --- a/src/Dbapi.hs +++ b/src/Dbapi.hs @@ -111,7 +111,9 @@ respondWithRangedResult rr = from = rrFrom rr to = rrTo rr total = rrTotal rr - status = if (1 + to - from) < total then status206 else status200 + status = if total == 0 then status204 + else if (1 + to - from) < total then status206 + else status200 requestedVersion :: RequestHeaders -> Maybe Int requestedVersion hdrs = diff --git a/test/Feature/RangeSpec.hs b/test/Feature/RangeSpec.hs index 232dfe6a7..790bacb05 100644 --- a/test/Feature/RangeSpec.hs +++ b/test/Feature/RangeSpec.hs @@ -25,7 +25,7 @@ spec = around appWithFixture $ (rangeHdrs $ ByteRangeFromTo 0 1) "" liftIO $ do simpleHeaders r `shouldSatisfy` - matchHeader "Content-Range" "0-1/[0-9]+" + matchHeader "Content-Range" "0-1/15" simpleStatus r `shouldBe` partialContent206 it "understands open-ended ranges" $ @@ -33,6 +33,15 @@ spec = around appWithFixture $ (rangeHdrs $ ByteRangeFrom 0) "" `shouldRespondWith` 200 + it "returns an empty body when there are no results" $ + request methodGet "/menagerie" + (rangeHdrs $ ByteRangeFromTo 0 1) "" + `shouldRespondWith` ResponseMatcher { + matchBody = Nothing + , matchStatus = 204 + , matchHeaders = [] + } + context "of invalid range" $ it "fails with 416 for offside range" $ request methodGet "/items"