1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
# frozen_string_literal: true
# Released under the MIT License.
# Copyright, 2019-2025, by Samuel Williams.
require "protocol/http/accept_encoding"
require "protocol/http/content_encoding"
describe Protocol::HTTP::ContentEncoding do
with "complete text/plain response" do
let(:middleware) {subject.new(Protocol::HTTP::Middleware::HelloWorld)}
let(:accept_encoding) {Protocol::HTTP::AcceptEncoding.new(middleware)}
it "can request resource without compression" do
response = middleware.get("/index")
expect(response).to be(:success?)
expect(response.headers).not.to have_keys("content-encoding")
expect(response.headers["vary"]).to be(:include?, "accept-encoding")
expect(response.read).to be == "Hello World!"
end
it "can request a resource with the identity encoding" do
response = accept_encoding.get("/index", {"accept-encoding" => "identity"})
expect(response).to be(:success?)
expect(response.headers).not.to have_keys("content-encoding")
expect(response.headers["vary"]).to be(:include?, "accept-encoding")
expect(response.read).to be == "Hello World!"
end
it "can request resource with compression" do
response = accept_encoding.get("/index", {"accept-encoding" => "gzip"})
expect(response).to be(:success?)
expect(response.headers["vary"]).to be(:include?, "accept-encoding")
expect(response.body).to be_a(Protocol::HTTP::Body::Inflate)
expect(response.read).to be == "Hello World!"
end
end
with "partial response" do
let(:app) do
proc do |request|
Protocol::HTTP::Response[206, Protocol::HTTP::Headers["content-type" => "text/plain"], ["Hello World!"]]
end
end
let(:client) {subject.new(app)}
it "can request resource with compression" do
response = client.get("/index", {"accept-encoding" => "gzip"})
expect(response).to be(:success?)
expect(response.headers).not.to have_keys("content-encoding")
expect(response.read).to be == "Hello World!"
end
end
with "existing content encoding" do
let(:app) do
app = ->(request){Protocol::HTTP::Response[200, Protocol::HTTP::Headers["content-type" => "text/plain", "content-encoding" => "identity"], ["Hello World!"]]
}
end
let(:client) {subject.new(app)}
it "does not compress response" do
response = client.get("/index", {"accept-encoding" => "gzip"})
expect(response).to be(:success?)
expect(response.headers).to have_keys("content-encoding")
expect(response.headers["content-encoding"]).to be == ["identity"]
expect(response.read).to be == "Hello World!"
end
end
with "nil body" do
let(:app) do
app = ->(request){Protocol::HTTP::Response[200, Protocol::HTTP::Headers["content-type" => "text/plain"], nil]
}
end
let(:client) {subject.new(app)}
it "does not compress response" do
response = client.get("/index", {"accept-encoding" => "gzip"})
expect(response).to be(:success?)
expect(response.headers).not.to have_keys("content-encoding")
expect(response.read).to be == nil
end
end
end
|