redirect_test.rb 3.3 KB
Newer Older
D
Initial  
David Heinemeier Hansson 已提交
1 2
require File.dirname(__FILE__) + '/../abstract_unit'

3 4 5 6 7 8 9
class RedirectController < ActionController::Base
  def simple_redirect
    redirect_to :action => "hello_world"
  end
  
  def method_redirect
    redirect_to :dashbord_url, 1, "hello"
D
Initial  
David Heinemeier Hansson 已提交
10
  end
11
  
12 13 14 15
  def host_redirect
    redirect_to :action => "other_host", :only_path => false, :host => 'other.test.host'
  end

16 17 18 19
  def module_redirect
    redirect_to :controller => 'module_test/module_redirect', :action => "hello_world"
  end

20 21 22 23 24
  def redirect_with_assigns
    @hello = "world"
    redirect_to :action => "hello_world"
  end

25 26 27 28
  def redirect_to_back
    redirect_to :back
  end

29 30 31 32 33 34 35
  def rescue_errors(e) raise e end
  
  protected
    def dashbord_url(id, message)
      url_for :action => "dashboard", :params => { "id" => id, "message" => message }
    end
end
D
Initial  
David Heinemeier Hansson 已提交
36

37
class RedirectTest < Test::Unit::TestCase
D
Initial  
David Heinemeier Hansson 已提交
38
  def setup
39 40 41
    @controller = RedirectController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
D
Initial  
David Heinemeier Hansson 已提交
42 43 44
  end

  def test_simple_redirect
45 46
    get :simple_redirect
    assert_redirect_url "http://test.host/redirect/hello_world"
D
Initial  
David Heinemeier Hansson 已提交
47 48 49
  end

  def test_redirect_with_method_reference_and_parameters
50
    get :method_redirect
D
David Heinemeier Hansson 已提交
51
    assert_redirect_url "http://test.host/redirect/dashboard/1?message=hello"
D
Initial  
David Heinemeier Hansson 已提交
52
  end
53 54 55 56 57

  def test_simple_redirect_using_options
    get :host_redirect
    assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
  end
58 59 60 61 62 63 64 65 66 67

  def test_module_redirect
    get :module_redirect
    assert_redirect_url "http://test.host/module_test/module_redirect/hello_world"
  end

  def test_module_redirect_using_options
    get :module_redirect
    assert_redirected_to :controller => 'module_test/module_redirect', :action => 'hello_world'
  end
68 69 70 71 72

  def test_redirect_with_assigns
    get :redirect_with_assigns
    assert_equal "world", assigns["hello"]
  end
73 74 75 76 77 78

  def test_redirect_to_back
    @request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
    get :redirect_to_back
    assert_redirect_url "http://www.example.com/coming/from"
  end
79
end
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

module ModuleTest
  class ModuleRedirectController < ::RedirectController
    def module_redirect
      redirect_to :controller => '/redirect', :action => "hello_world"
    end
  end

  class ModuleRedirectTest < Test::Unit::TestCase
    def setup
      @controller = ModuleRedirectController.new
      @request    = ActionController::TestRequest.new
      @response   = ActionController::TestResponse.new
    end
  
    def test_simple_redirect
      get :simple_redirect
      assert_redirect_url "http://test.host/module_test/module_redirect/hello_world"
    end
  
    def test_redirect_with_method_reference_and_parameters
      get :method_redirect
      assert_redirect_url "http://test.host/module_test/module_redirect/dashboard/1?message=hello"
    end
    
    def test_simple_redirect_using_options
      get :host_redirect
      assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
    end

    def test_module_redirect
      get :module_redirect
      assert_redirect_url "http://test.host/redirect/hello_world"
    end

    def test_module_redirect_using_options
      get :module_redirect
      assert_redirected_to :controller => 'redirect', :action => "hello_world"
    end
  end
120
end