2008-01-05 13:32:06 +00:00
|
|
|
require 'abstract_unit'
|
2004-11-24 01:04:44 +00:00
|
|
|
|
2007-05-12 21:12:31 +00:00
|
|
|
class WorkshopsController < ActionController::Base
|
|
|
|
end
|
|
|
|
|
|
|
|
class Workshop
|
2009-07-21 05:51:57 +00:00
|
|
|
extend ActiveModel::Naming
|
|
|
|
include ActiveModel::Conversion
|
2010-02-21 10:09:21 +00:00
|
|
|
attr_accessor :id
|
2007-05-12 21:12:31 +00:00
|
|
|
|
2010-02-21 10:09:21 +00:00
|
|
|
def initialize(id)
|
|
|
|
@id = id
|
2007-05-12 21:12:31 +00:00
|
|
|
end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2010-02-21 10:09:21 +00:00
|
|
|
def persisted?
|
|
|
|
id.present?
|
2007-05-12 21:12:31 +00:00
|
|
|
end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2007-05-12 21:12:31 +00:00
|
|
|
def to_s
|
|
|
|
id.to_s
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2005-02-23 14:57:08 +00:00
|
|
|
class RedirectController < ActionController::Base
|
|
|
|
def simple_redirect
|
|
|
|
redirect_to :action => "hello_world"
|
|
|
|
end
|
2007-03-13 05:44:18 +00:00
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def redirect_with_status
|
2007-10-09 23:07:36 +00:00
|
|
|
redirect_to({:action => "hello_world", :status => 301})
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
2007-10-09 23:07:36 +00:00
|
|
|
|
|
|
|
def redirect_with_status_hash
|
|
|
|
redirect_to({:action => "hello_world"}, {:status => 301})
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
2007-10-09 23:07:36 +00:00
|
|
|
|
2009-08-08 19:40:08 +00:00
|
|
|
def redirect_with_protocol
|
|
|
|
redirect_to :action => "hello_world", :protocol => "https"
|
|
|
|
end
|
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def url_redirect_with_status
|
2007-10-09 23:07:36 +00:00
|
|
|
redirect_to("http://www.example.com", :status => :moved_permanently)
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def url_redirect_with_status_hash
|
2007-10-09 23:07:36 +00:00
|
|
|
redirect_to("http://www.example.com", {:status => 301})
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
2007-10-09 23:07:36 +00:00
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def relative_url_redirect_with_status
|
2007-10-09 23:07:36 +00:00
|
|
|
redirect_to("/things/stuff", :status => :found)
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
|
|
|
|
2007-10-09 23:07:36 +00:00
|
|
|
def relative_url_redirect_with_status_hash
|
|
|
|
redirect_to("/things/stuff", {:status => 301})
|
2008-07-24 18:41:51 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def redirect_to_back_with_status
|
|
|
|
redirect_to :back, :status => 307
|
2007-10-09 23:07:36 +00:00
|
|
|
end
|
|
|
|
|
2005-04-30 08:34:02 +00:00
|
|
|
def host_redirect
|
|
|
|
redirect_to :action => "other_host", :only_path => false, :host => 'other.test.host'
|
|
|
|
end
|
|
|
|
|
2005-07-02 18:16:38 +00:00
|
|
|
def module_redirect
|
|
|
|
redirect_to :controller => 'module_test/module_redirect', :action => "hello_world"
|
|
|
|
end
|
|
|
|
|
2005-07-31 12:16:21 +00:00
|
|
|
def redirect_with_assigns
|
|
|
|
@hello = "world"
|
|
|
|
redirect_to :action => "hello_world"
|
|
|
|
end
|
|
|
|
|
2008-04-02 12:48:59 +00:00
|
|
|
def redirect_to_url
|
|
|
|
redirect_to "http://www.rubyonrails.org/"
|
|
|
|
end
|
|
|
|
|
|
|
|
def redirect_to_url_with_unescaped_query_string
|
|
|
|
redirect_to "http://dev.rubyonrails.org/query?status=new"
|
|
|
|
end
|
|
|
|
|
2008-10-30 19:03:47 +00:00
|
|
|
def redirect_to_url_with_complex_scheme
|
|
|
|
redirect_to "x-test+scheme.complex:redirect"
|
|
|
|
end
|
|
|
|
|
2005-11-02 14:47:03 +00:00
|
|
|
def redirect_to_back
|
|
|
|
redirect_to :back
|
|
|
|
end
|
|
|
|
|
2007-05-12 21:12:31 +00:00
|
|
|
def redirect_to_existing_record
|
2010-02-21 10:09:21 +00:00
|
|
|
redirect_to Workshop.new(5)
|
2007-05-12 21:12:31 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def redirect_to_new_record
|
2010-02-21 10:09:21 +00:00
|
|
|
redirect_to Workshop.new(nil)
|
2007-05-12 21:12:31 +00:00
|
|
|
end
|
|
|
|
|
2008-01-12 03:09:39 +00:00
|
|
|
def redirect_to_nil
|
|
|
|
redirect_to nil
|
|
|
|
end
|
|
|
|
|
2005-02-23 14:57:08 +00:00
|
|
|
def rescue_errors(e) raise e end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2006-01-22 01:52:23 +00:00
|
|
|
def rescue_action(e) raise end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2005-02-23 14:57:08 +00:00
|
|
|
protected
|
|
|
|
def dashbord_url(id, message)
|
|
|
|
url_for :action => "dashboard", :params => { "id" => id, "message" => message }
|
|
|
|
end
|
|
|
|
end
|
2004-11-24 01:04:44 +00:00
|
|
|
|
2008-11-07 20:42:34 +00:00
|
|
|
class RedirectTest < ActionController::TestCase
|
|
|
|
tests RedirectController
|
2004-11-24 01:04:44 +00:00
|
|
|
|
|
|
|
def test_simple_redirect
|
2005-02-23 14:57:08 +00:00
|
|
|
get :simple_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
|
|
|
assert_equal "http://test.host/redirect/hello_world", redirect_to_url
|
2004-11-24 01:04:44 +00:00
|
|
|
end
|
|
|
|
|
2007-10-09 23:07:36 +00:00
|
|
|
def test_redirect_with_no_status
|
|
|
|
get :simple_redirect
|
|
|
|
assert_response 302
|
|
|
|
assert_equal "http://test.host/redirect/hello_world", redirect_to_url
|
|
|
|
end
|
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def test_redirect_with_status
|
|
|
|
get :redirect_with_status
|
|
|
|
assert_response 301
|
|
|
|
assert_equal "http://test.host/redirect/hello_world", redirect_to_url
|
|
|
|
end
|
2007-10-09 23:07:36 +00:00
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def test_redirect_with_status_hash
|
2007-10-09 23:07:36 +00:00
|
|
|
get :redirect_with_status_hash
|
2008-07-24 18:41:51 +00:00
|
|
|
assert_response 301
|
|
|
|
assert_equal "http://test.host/redirect/hello_world", redirect_to_url
|
|
|
|
end
|
|
|
|
|
2009-08-08 19:40:08 +00:00
|
|
|
def test_redirect_with_protocol
|
|
|
|
get :redirect_with_protocol
|
|
|
|
assert_response 302
|
|
|
|
assert_equal "https://test.host/redirect/hello_world", redirect_to_url
|
|
|
|
end
|
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
def test_url_redirect_with_status
|
|
|
|
get :url_redirect_with_status
|
|
|
|
assert_response 301
|
|
|
|
assert_equal "http://www.example.com", redirect_to_url
|
2007-10-09 23:07:36 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_url_redirect_with_status_hash
|
|
|
|
get :url_redirect_with_status_hash
|
2008-07-24 18:41:51 +00:00
|
|
|
assert_response 301
|
|
|
|
assert_equal "http://www.example.com", redirect_to_url
|
|
|
|
end
|
2007-10-09 23:07:36 +00:00
|
|
|
|
2008-07-24 18:41:51 +00:00
|
|
|
|
|
|
|
def test_relative_url_redirect_with_status
|
|
|
|
get :relative_url_redirect_with_status
|
2007-10-09 23:07:36 +00:00
|
|
|
assert_response 302
|
2008-07-24 18:41:51 +00:00
|
|
|
assert_equal "http://test.host/things/stuff", redirect_to_url
|
|
|
|
end
|
|
|
|
|
2007-10-09 23:07:36 +00:00
|
|
|
def test_relative_url_redirect_with_status_hash
|
|
|
|
get :relative_url_redirect_with_status_hash
|
2008-07-24 18:41:51 +00:00
|
|
|
assert_response 301
|
|
|
|
assert_equal "http://test.host/things/stuff", redirect_to_url
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_redirect_to_back_with_status
|
|
|
|
@request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
|
|
|
|
get :redirect_to_back_with_status
|
|
|
|
assert_response 307
|
|
|
|
assert_equal "http://www.example.com/coming/from", redirect_to_url
|
2007-10-09 23:07:36 +00:00
|
|
|
end
|
|
|
|
|
2005-04-30 08:34:02 +00:00
|
|
|
def test_simple_redirect_using_options
|
|
|
|
get :host_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
2005-04-30 08:34:02 +00:00
|
|
|
assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
|
|
|
|
end
|
2005-07-02 18:16:38 +00:00
|
|
|
|
|
|
|
def test_module_redirect
|
|
|
|
get :module_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
|
|
|
assert_redirected_to "http://test.host/module_test/module_redirect/hello_world"
|
2005-07-02 18:16:38 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_module_redirect_using_options
|
|
|
|
get :module_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
2005-07-02 18:16:38 +00:00
|
|
|
assert_redirected_to :controller => 'module_test/module_redirect', :action => 'hello_world'
|
|
|
|
end
|
2005-07-31 12:16:21 +00:00
|
|
|
|
|
|
|
def test_redirect_with_assigns
|
|
|
|
get :redirect_with_assigns
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
2005-07-31 12:16:21 +00:00
|
|
|
assert_equal "world", assigns["hello"]
|
|
|
|
end
|
2005-11-02 14:47:03 +00:00
|
|
|
|
2008-04-02 12:48:59 +00:00
|
|
|
def test_redirect_to_url
|
|
|
|
get :redirect_to_url
|
|
|
|
assert_response :redirect
|
|
|
|
assert_redirected_to "http://www.rubyonrails.org/"
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_redirect_to_url_with_unescaped_query_string
|
|
|
|
get :redirect_to_url_with_unescaped_query_string
|
|
|
|
assert_response :redirect
|
|
|
|
assert_redirected_to "http://dev.rubyonrails.org/query?status=new"
|
|
|
|
end
|
|
|
|
|
2008-10-30 19:03:47 +00:00
|
|
|
def test_redirect_to_url_with_complex_scheme
|
|
|
|
get :redirect_to_url_with_complex_scheme
|
|
|
|
assert_response :redirect
|
|
|
|
assert_equal "x-test+scheme.complex:redirect", redirect_to_url
|
|
|
|
end
|
|
|
|
|
2005-11-02 14:47:03 +00:00
|
|
|
def test_redirect_to_back
|
|
|
|
@request.env["HTTP_REFERER"] = "http://www.example.com/coming/from"
|
|
|
|
get :redirect_to_back
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
|
|
|
assert_equal "http://www.example.com/coming/from", redirect_to_url
|
2005-11-02 14:47:03 +00:00
|
|
|
end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2006-01-22 01:52:23 +00:00
|
|
|
def test_redirect_to_back_with_no_referer
|
2009-03-08 20:11:58 +00:00
|
|
|
assert_raise(ActionController::RedirectBackError) {
|
2006-01-22 01:52:23 +00:00
|
|
|
@request.env["HTTP_REFERER"] = nil
|
|
|
|
get :redirect_to_back
|
|
|
|
}
|
|
|
|
end
|
2008-07-24 18:41:51 +00:00
|
|
|
|
2007-05-12 21:12:31 +00:00
|
|
|
def test_redirect_to_record
|
2009-08-17 02:14:26 +00:00
|
|
|
with_routing do |set|
|
|
|
|
set.draw do |map|
|
2009-12-08 22:52:26 +00:00
|
|
|
resources :workshops
|
|
|
|
match ':controller/:action'
|
2009-08-17 02:14:26 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
get :redirect_to_existing_record
|
|
|
|
assert_equal "http://test.host/workshops/5", redirect_to_url
|
2010-02-21 10:09:21 +00:00
|
|
|
assert_redirected_to Workshop.new(5)
|
2009-08-17 02:14:26 +00:00
|
|
|
|
|
|
|
get :redirect_to_new_record
|
|
|
|
assert_equal "http://test.host/workshops", redirect_to_url
|
2010-02-21 10:09:21 +00:00
|
|
|
assert_redirected_to Workshop.new(nil)
|
2007-05-12 21:12:31 +00:00
|
|
|
end
|
|
|
|
end
|
2008-01-12 03:09:39 +00:00
|
|
|
|
|
|
|
def test_redirect_to_nil
|
2009-03-08 20:11:58 +00:00
|
|
|
assert_raise(ActionController::ActionControllerError) do
|
2008-01-12 03:09:39 +00:00
|
|
|
get :redirect_to_nil
|
|
|
|
end
|
|
|
|
end
|
2005-04-30 08:34:02 +00:00
|
|
|
end
|
2005-07-02 18:16:38 +00:00
|
|
|
|
|
|
|
module ModuleTest
|
|
|
|
class ModuleRedirectController < ::RedirectController
|
|
|
|
def module_redirect
|
|
|
|
redirect_to :controller => '/redirect', :action => "hello_world"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2008-11-07 20:42:34 +00:00
|
|
|
class ModuleRedirectTest < ActionController::TestCase
|
|
|
|
tests ModuleRedirectController
|
2007-03-13 05:44:18 +00:00
|
|
|
|
2005-07-02 18:16:38 +00:00
|
|
|
def test_simple_redirect
|
|
|
|
get :simple_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
|
|
|
assert_equal "http://test.host/module_test/module_redirect/hello_world", redirect_to_url
|
2005-07-02 18:16:38 +00:00
|
|
|
end
|
2007-03-13 05:44:18 +00:00
|
|
|
|
2005-07-02 18:16:38 +00:00
|
|
|
def test_simple_redirect_using_options
|
|
|
|
get :host_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
2005-07-02 18:16:38 +00:00
|
|
|
assert_redirected_to :action => "other_host", :only_path => false, :host => 'other.test.host'
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_module_redirect
|
|
|
|
get :module_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
|
|
|
assert_equal "http://test.host/redirect/hello_world", redirect_to_url
|
2005-07-02 18:16:38 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_module_redirect_using_options
|
|
|
|
get :module_redirect
|
2006-09-04 05:05:11 +00:00
|
|
|
assert_response :redirect
|
2008-06-23 16:46:15 +00:00
|
|
|
assert_redirected_to :controller => '/redirect', :action => "hello_world"
|
2005-07-02 18:16:38 +00:00
|
|
|
end
|
|
|
|
end
|
2005-07-23 09:00:05 +00:00
|
|
|
end
|