aboutsummaryrefslogblamecommitdiffstats
path: root/actionpack/test/dispatch/test_request_test.rb
blob: e56537d80bfa99cde760ff4a71e404476a88eb9f (plain) (tree)
1
2
3
4
5
6
7
8
9

                             
                       


                                               
                                                

                                                    
                                           











                                                               
                                                   




                                                      
     

                      
                                                

                                 
                                     
 
                                         
                                                              
 
                                      
                                                                                   
 
                            
                                   
                                                                                
       
 
                                 
                                                              



                                      
                                             
                                                              
     
 
                                                                 
                                                


                                      
                                             
                                                
                                           


                                                  

                                                                          


                                     
                                                
                                      


                                        

                                                                              


                                                 
                                                
                                                


                                              

                                                                              

     






                                                               

                                                
               

     

                                                                                                  




                           












                                                                 

     



                                                                          
   
# frozen_string_literal: true

require "abstract_unit"

class TestRequestTest < ActiveSupport::TestCase
  test "sane defaults" do
    env = ActionDispatch::TestRequest.create.env

    assert_equal "GET", env.delete("REQUEST_METHOD")
    assert_equal "off", env.delete("HTTPS")
    assert_equal "http", env.delete("rack.url_scheme")
    assert_equal "example.org", env.delete("SERVER_NAME")
    assert_equal "80", env.delete("SERVER_PORT")
    assert_equal "/", env.delete("PATH_INFO")
    assert_equal "", env.delete("SCRIPT_NAME")
    assert_equal "", env.delete("QUERY_STRING")
    assert_equal "0", env.delete("CONTENT_LENGTH")

    assert_equal "test.host", env.delete("HTTP_HOST")
    assert_equal "0.0.0.0", env.delete("REMOTE_ADDR")
    assert_equal "Rails Testing", env.delete("HTTP_USER_AGENT")

    assert_equal [1, 3], env.delete("rack.version")
    assert_equal "", env.delete("rack.input").string
    assert_kind_of StringIO, env.delete("rack.errors")
    assert_equal true, env.delete("rack.multithread")
    assert_equal true, env.delete("rack.multiprocess")
    assert_equal false, env.delete("rack.run_once")
  end

  test "cookie jar" do
    req = ActionDispatch::TestRequest.create({})

    assert_equal({}, req.cookies)
    assert_nil req.env["HTTP_COOKIE"]

    req.cookie_jar["user_name"] = "david"
    assert_cookies({ "user_name" => "david" }, req.cookie_jar)

    req.cookie_jar["login"] = "XJ-122"
    assert_cookies({ "user_name" => "david", "login" => "XJ-122" }, req.cookie_jar)

    assert_nothing_raised do
      req.cookie_jar["login"] = nil
      assert_cookies({ "user_name" => "david", "login" => nil }, req.cookie_jar)
    end

    req.cookie_jar.delete(:login)
    assert_cookies({ "user_name" => "david" }, req.cookie_jar)

    req.cookie_jar.clear
    assert_cookies({}, req.cookie_jar)

    req.cookie_jar.update(user_name: "david")
    assert_cookies({ "user_name" => "david" }, req.cookie_jar)
  end

  test "does not complain when there is no application config" do
    req = ActionDispatch::TestRequest.create({})
    assert_equal false, req.env.empty?
  end

  test "default remote address is 0.0.0.0" do
    req = ActionDispatch::TestRequest.create({})
    assert_equal "0.0.0.0", req.remote_addr
  end

  test "allows remote address to be overridden" do
    req = ActionDispatch::TestRequest.create("REMOTE_ADDR" => "127.0.0.1")
    assert_equal "127.0.0.1", req.remote_addr
  end

  test "default host is test.host" do
    req = ActionDispatch::TestRequest.create({})
    assert_equal "test.host", req.host
  end

  test "allows host to be overridden" do
    req = ActionDispatch::TestRequest.create("HTTP_HOST" => "www.example.com")
    assert_equal "www.example.com", req.host
  end

  test "default user agent is 'Rails Testing'" do
    req = ActionDispatch::TestRequest.create({})
    assert_equal "Rails Testing", req.user_agent
  end

  test "allows user agent to be overridden" do
    req = ActionDispatch::TestRequest.create("HTTP_USER_AGENT" => "GoogleBot")
    assert_equal "GoogleBot", req.user_agent
  end

  test "request_method getter and setter" do
    req = ActionDispatch::TestRequest.create
    req.request_method # to reproduce bug caused by memoization
    req.request_method = "POST"
    assert_equal "POST", req.request_method
  end

  test "setter methods" do
    req = ActionDispatch::TestRequest.create({})
    get = "GET"

    [
      "request_method=", "host=", "request_uri=", "path=", "if_modified_since=", "if_none_match=",
      "remote_addr=", "user_agent=", "accept="
    ].each do |method|
      req.send(method, get)
    end

    req.port = 8080
    req.accept = "hello goodbye"

    assert_equal(get, req.get_header("REQUEST_METHOD"))
    assert_equal(get, req.get_header("HTTP_HOST"))
    assert_equal(8080, req.get_header("SERVER_PORT"))
    assert_equal(get, req.get_header("REQUEST_URI"))
    assert_equal(get, req.get_header("PATH_INFO"))
    assert_equal(get, req.get_header("HTTP_IF_MODIFIED_SINCE"))
    assert_equal(get, req.get_header("HTTP_IF_NONE_MATCH"))
    assert_equal(get, req.get_header("REMOTE_ADDR"))
    assert_equal(get, req.get_header("HTTP_USER_AGENT"))
    assert_nil(req.get_header("action_dispatch.request.accepts"))
    assert_equal("hello goodbye", req.get_header("HTTP_ACCEPT"))
  end

  private
    def assert_cookies(expected, cookie_jar)
      assert_equal(expected, cookie_jar.instance_variable_get("@cookies"))
    end
end