File: content_encoding.rb

package info (click to toggle)
ruby-protocol-http 0.55.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 840 kB
  • sloc: ruby: 6,904; makefile: 4
file content (99 lines) | stat: -rw-r--r-- 3,077 bytes parent folder | download
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