Skip to content

Commit 8e670ea

Browse files
committed
If test client encounters ASCII_8BIT data, mark it as binary
Do not display binary data in generated documentation. Closes #199.
1 parent 8dfea47 commit 8e670ea

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

lib/rspec_api_documentation/client_base.rb

+10-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def document_example(method, path)
6868
request_metadata[:request_content_type] = request_content_type
6969
request_metadata[:response_status] = status
7070
request_metadata[:response_status_text] = Rack::Utils::HTTP_STATUS_CODES[status]
71-
request_metadata[:response_body] = response_body.empty? ? nil : response_body
71+
request_metadata[:response_body] = record_response_body(response_body)
7272
request_metadata[:response_headers] = response_headers
7373
request_metadata[:response_content_type] = response_content_type
7474
request_metadata[:curl] = Curl.new(method, path, request_body, request_headers)
@@ -85,6 +85,15 @@ def headers(method, path, params, request_headers)
8585
request_headers || {}
8686
end
8787

88+
def record_response_body(response_body)
89+
return nil if response_body.empty?
90+
if response_body.encoding == Encoding::ASCII_8BIT
91+
"[binary data]"
92+
else
93+
response_body
94+
end
95+
end
96+
8897
def clean_out_uploaded_data(params, request_body)
8998
params.each do |_, value|
9099
if value.is_a?(Hash)

spec/rack_test_client_spec.rb

+6
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@
9393
expect(metadata[:curl]).to eq(RspecApiDocumentation::Curl.new("POST", "/greet?query=test+query", post_data, {"Content-Type" => "application/json;charset=utf-8", "X-Custom-Header" => "custom header value", "Host" => "example.org", "Cookie" => ""}))
9494
end
9595

96+
specify "fetching binary data" do |example|
97+
test_client.get "/binary"
98+
metadata = example.metadata[:requests].last
99+
expect(metadata[:response_body]).to eq("[binary data]")
100+
end
101+
96102
context "when post data is not json" do
97103
let(:post_data) { { :target => "nurse", :email => "[email protected]" } }
98104

spec/support/stub_app.rb

+5
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,9 @@ class StubApp < Sinatra::Base
2323

2424
"<hello>World</hello>"
2525
end
26+
27+
get '/binary' do
28+
content_type 'application/octet-stream'
29+
"\x01\x02\x03".force_encoding(Encoding::ASCII_8BIT)
30+
end
2631
end

0 commit comments

Comments
 (0)