aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch/response_test.rb
blob: fb593a6c315066f325b833165de53469d5c64615 (plain) (blame)
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
require 'abstract_unit'

class ResponseTest < ActiveSupport::TestCase
  def setup
    @response = ActionDispatch::Response.new
  end

  test "simple output" do
    @response.body = "Hello, World!"
    @response.prepare!

    status, headers, body = @response.to_a
    assert_equal 200, status
    assert_equal({
      "Content-Type" => "text/html; charset=utf-8",
      "Cache-Control" => "private, max-age=0, must-revalidate",
      "ETag" => '"65a8e27d8879283831b664bd8b7f0ad4"',
      "Set-Cookie" => "",
      "Content-Length" => "13"
    }, headers)

    parts = []
    body.each { |part| parts << part }
    assert_equal ["Hello, World!"], parts
  end

  test "utf8 output" do
    @response.body = [1090, 1077, 1089, 1090].pack("U*")
    @response.prepare!

    status, headers, body = @response.to_a
    assert_equal 200, status
    assert_equal({
      "Content-Type" => "text/html; charset=utf-8",
      "Cache-Control" => "private, max-age=0, must-revalidate",
      "ETag" => '"ebb5e89e8a94e9dd22abf5d915d112b2"',
      "Set-Cookie" => "",
      "Content-Length" => "8"
    }, headers)
  end

  test "streaming block" do
    @response.body = Proc.new do |response, output|
      5.times { |n| output.write(n) }
    end
    @response.prepare!

    status, headers, body = @response.to_a
    assert_equal 200, status
    assert_equal({
      "Content-Type" => "text/html; charset=utf-8",
      "Cache-Control" => "no-cache",
      "Set-Cookie" => ""
    }, headers)

    parts = []
    body.each { |part| parts << part.to_s }
    assert_equal ["0", "1", "2", "3", "4"], parts
  end

  test "content type" do
    [204, 304].each do |c|
      @response.status = c.to_s
      @response.prepare!
      status, headers, body = @response.to_a
      assert !headers.has_key?("Content-Type"), "#{c} should not have Content-Type header"
    end

    [200, 302, 404, 500].each do |c|
      @response.status = c.to_s
      @response.prepare!
      status, headers, body = @response.to_a
      assert headers.has_key?("Content-Type"), "#{c} did not have Content-Type header"
    end
  end

  test "does not include Status header" do
    @response.status = "200 OK"
    @response.prepare!
    status, headers, body = @response.to_a
    assert !headers.has_key?('Status')
  end
end