| 12
 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
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 
 | # frozen_string_literal: true
require "abstract_unit"
module RenderPlain
  class MinimalController < ActionController::Metal
    include AbstractController::Rendering
    include ActionController::Rendering
    def index
      render plain: "Hello World!"
    end
  end
  class SimpleController < ActionController::Base
    self.view_paths = [ActionView::FixtureResolver.new]
    def index
      render plain: "hello david"
    end
  end
  class WithLayoutController < ::ApplicationController
    self.view_paths = [ActionView::FixtureResolver.new(
      "layouts/application.text.erb" => "<%= yield %>, I'm here!",
      "layouts/greetings.text.erb"   => "<%= yield %>, I wish thee well.",
      "layouts/ivar.text.erb"        => "<%= yield %>, <%= @ivar %>"
    )]
    def index
      render plain: "hello david"
    end
    def custom_code
      render plain: "hello world", status: 404
    end
    def with_custom_code_as_string
      render plain: "hello world", status: "404 Not Found"
    end
    def with_nil
      render plain: nil
    end
    def with_nil_and_status
      render plain: nil, status: 403
    end
    def with_false
      render plain: false
    end
    def with_layout_true
      render plain: "hello world", layout: true
    end
    def with_layout_false
      render plain: "hello world", layout: false
    end
    def with_layout_nil
      render plain: "hello world", layout: nil
    end
    def with_custom_layout
      render plain: "hello world", layout: "greetings"
    end
    def with_ivar_in_layout
      @ivar = "hello world"
      render plain: "hello world", layout: "ivar"
    end
  end
  class RenderPlainTest < Rack::TestCase
    test "rendering text from a minimal controller" do
      get "/render_plain/minimal/index"
      assert_body "Hello World!"
      assert_status 200
    end
    test "rendering text from an action with default options renders the text with the layout" do
      with_routing do |set|
        set.draw { ActiveSupport::Deprecation.silence { get ":controller", action: "index" } }
        get "/render_plain/simple"
        assert_body "hello david"
        assert_status 200
      end
    end
    test "rendering text from an action with default options renders the text without the layout" do
      with_routing do |set|
        set.draw { ActiveSupport::Deprecation.silence { get ":controller", action: "index" } }
        get "/render_plain/with_layout"
        assert_body "hello david"
        assert_status 200
      end
    end
    test "rendering text, while also providing a custom status code" do
      get "/render_plain/with_layout/custom_code"
      assert_body "hello world"
      assert_status 404
    end
    test "rendering text with nil returns an empty body" do
      get "/render_plain/with_layout/with_nil"
      assert_body ""
      assert_status 200
    end
    test "Rendering text with nil and custom status code returns an empty body and the status" do
      get "/render_plain/with_layout/with_nil_and_status"
      assert_body ""
      assert_status 403
    end
    test "rendering text with false returns the string 'false'" do
      get "/render_plain/with_layout/with_false"
      assert_body "false"
      assert_status 200
    end
    test "rendering text with layout: true" do
      get "/render_plain/with_layout/with_layout_true"
      assert_body "hello world, I'm here!"
      assert_status 200
    end
    test "rendering text with layout: 'greetings'" do
      get "/render_plain/with_layout/with_custom_layout"
      assert_body "hello world, I wish thee well."
      assert_status 200
    end
    test "rendering text with layout: false" do
      get "/render_plain/with_layout/with_layout_false"
      assert_body "hello world"
      assert_status 200
    end
    test "rendering text with layout: nil" do
      get "/render_plain/with_layout/with_layout_nil"
      assert_body "hello world"
      assert_status 200
    end
    test "rendering from minimal controller returns response with text/plain content type" do
      get "/render_plain/minimal/index"
      assert_content_type "text/plain; charset=utf-8"
    end
    test "rendering from normal controller returns response with text/plain content type" do
      get "/render_plain/simple/index"
      assert_content_type "text/plain; charset=utf-8"
    end
  end
end
 |