1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00
sinatra/test/response_test.rb
Eloy Pérez f10e571f4d
Minor cleaning setting up tests (#1875)
We use minitest for Sinatra's test suite but we weren't using its rake task. I've updated the Rakefile to require and use Minitest default rake task to simplify.

Another change is to rename the `helper.rb` file to `test_helper.rb` because I think that name is used more in the community and require it directly without calling `File.expand_path`
2023-02-12 19:09:35 +01:00

74 lines
2.3 KiB
Ruby

require_relative 'test_helper'
class ResponseTest < Minitest::Test
setup { @response = Sinatra::Response.new([], 200, { 'Content-Type' => 'text/html' }) }
def assert_same_body(a, b)
assert_equal a.to_enum(:each).to_a, b.to_enum(:each).to_a
end
it "initializes with 200, text/html, and empty body" do
assert_equal 200, @response.status
assert_equal 'text/html', @response['Content-Type']
assert_equal [], @response.body
end
it 'uses case insensitive headers' do
@response['content-type'] = 'application/foo'
assert_equal 'application/foo', @response['Content-Type']
assert_equal 'application/foo', @response['CONTENT-TYPE']
end
it 'writes to body' do
@response.body = 'Hello'
@response.write ' World'
assert_equal 'Hello World', @response.body.join
end
[204, 304].each do |status_code|
it "removes the Content-Type header and body when response status is #{status_code}" do
@response.status = status_code
@response.body = ['Hello World']
assert_equal [status_code, {}, []], @response.finish
end
end
[200, 201, 202, 301, 302, 400, 401, 403, 404, 500].each do |status_code|
it "will not removes the Content-Type header and body when response status
is #{status_code}" do
@response.status = status_code
@response.body = ['Hello World']
assert_equal [
status_code,
{ 'Content-Type' => 'text/html', 'Content-Length' => '11' },
['Hello World']
], @response.finish
end
end
it 'Calculates the Content-Length using the bytesize of the body' do
@response.body = ['Hello', 'World!', '✈']
_, headers, body = @response.finish
assert_equal '14', headers['Content-Length']
assert_same_body @response.body, body
end
it 'does not call #to_ary or #inject on the body' do
object = Object.new
def object.inject(*) fail 'called' end
def object.to_ary(*) fail 'called' end
def object.each(*) end
@response.body = object
assert @response.finish
end
it 'does not nest a Sinatra::Response' do
@response.body = Sinatra::Response.new ["foo"]
assert_same_body @response.body, ["foo"]
end
it 'does not nest a Rack::Response' do
@response.body = Rack::Response.new ["foo"]
assert_same_body @response.body, ["foo"]
end
end