提交 71dbef6d 编写于 作者: J Jeremy Kemper

Integration tests: thoroughly test ActionController::Integration::Session. Closes #6022.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4954 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 8ca3f34d
*SVN* *SVN*
* Integration tests: thoroughly test ActionController::Integration::Session. #6022 [Kevin Clark]
(tests skipped unless you `gem install mocha`)
* Added deprecation language for pagination which will become a plugin by Rails 2.0 [DHH] * Added deprecation language for pagination which will become a plugin by Rails 2.0 [DHH]
* Added deprecation language for in_place_editor and auto_complete_field that both pieces will become plugins by Rails 2.0 [DHH] * Added deprecation language for in_place_editor and auto_complete_field that both pieces will become plugins by Rails 2.0 [DHH]
......
...@@ -151,13 +151,24 @@ def get(path, parameters=nil, headers=nil) ...@@ -151,13 +151,24 @@ def get(path, parameters=nil, headers=nil)
process :get, path, parameters, headers process :get, path, parameters, headers
end end
# keep the docs for #get # Performs a POST request with the given parameters. See get() for more details.
%w( post put delete head ).each do |method| def post(path, parameters=nil, headers=nil)
class_eval <<-EOV, __FILE__, __LINE__ process :post, path, parameters, headers
def #{method}(path, parameters=nil, headers=nil) end
process :#{method}, path, parameters, headers
end # Performs a PUT request with the given parameters. See get() for more details.
EOV def put(path, parameters=nil, headers=nil)
process :put, path, parameters, headers
end
# Performs a DELETE request with the given parameters. See get() for more details.
def delete(path, parameters=nil, headers=nil)
process :delete, path, parameters, headers
end
# Performs a HEAD request with the given parameters. See get() for more details.
def head(path, parameters=nil, headers=nil)
process :head, path, parameters, headers
end end
# Performs an XMLHttpRequest request with the given parameters, mimicing # Performs an XMLHttpRequest request with the given parameters, mimicing
......
...@@ -74,13 +74,24 @@ def setup ...@@ -74,13 +74,24 @@ def setup
def test_action_methods def test_action_methods
@empty_controllers.each do |c| @empty_controllers.each do |c|
hide_mocha_methods_from_controller(c)
assert_equal Set.new, c.send(:action_methods), "#{c.controller_path} should be empty!" assert_equal Set.new, c.send(:action_methods), "#{c.controller_path} should be empty!"
end end
@non_empty_controllers.each do |c| @non_empty_controllers.each do |c|
hide_mocha_methods_from_controller(c)
assert_equal Set.new('public_action'), c.send(:action_methods), "#{c.controller_path} should not be empty!" assert_equal Set.new('public_action'), c.send(:action_methods), "#{c.controller_path} should not be empty!"
end end
end end
protected
# Mocha adds methods to Object which are then included in the public_instance_methods
# This method hides those from the controller so the above tests won't know the difference
def hide_mocha_methods_from_controller(controller)
mocha_methods = [:expects, :metaclass, :mocha, :mocha_inspect, :reset_mocha, :stubba_object, :stubba_method, :stubs, :verify]
controller.class.send(:hide_action, *mocha_methods)
end
end end
......
require File.dirname(__FILE__) + '/../abstract_unit'
$:.unshift File.dirname(__FILE__) + '/../../../railties/lib'
require 'action_controller/integration'
begin # rescue LoadError
require 'mocha'
require 'stubba'
# Stub process for testing.
module ActionController
module Integration
class Session
def process
end
def generic_url_rewriter
end
end
end
end
class SessionTest < Test::Unit::TestCase
def setup
@session = ActionController::Integration::Session.new
end
def test_https_bang_works_and_sets_truth_by_default
assert !@session.https?
@session.https!
assert @session.https?
@session.https! false
assert !@session.https?
end
def test_host!
assert_not_equal "glu.ttono.us", @session.host
@session.host! "rubyonrails.com"
assert_equal "rubyonrails.com", @session.host
end
def test_follow_redirect_raises_when_no_redirect
@session.stubs(:redirect?).returns(false)
assert_raise(RuntimeError) { @session.follow_redirect! }
end
def test_follow_redirect_calls_get_and_returns_status
@session.stubs(:redirect?).returns(true)
@session.stubs(:headers).returns({"location" => ["www.google.com"]})
@session.stubs(:status).returns(200)
@session.expects(:get)
assert_equal 200, @session.follow_redirect!
end
def test_get_via_redirect
path = "/somepath"; args = {:id => '1'}
@session.expects(:get).with(path,args)
redirects = [true, true, false]
@session.stubs(:redirect?).returns(lambda { redirects.shift })
@session.expects(:follow_redirect!).times(2)
@session.stubs(:status).returns(200)
assert_equal 200, @session.get_via_redirect(path, args)
end
def test_post_via_redirect
path = "/somepath"; args = {:id => '1'}
@session.expects(:post).with(path,args)
redirects = [true, true, false]
@session.stubs(:redirect?).returns(lambda { redirects.shift })
@session.expects(:follow_redirect!).times(2)
@session.stubs(:status).returns(200)
assert_equal 200, @session.post_via_redirect(path, args)
end
def test_url_for_with_controller
options = {:action => 'show'}
mock_controller = mock()
mock_controller.expects(:url_for).with(options).returns('/show')
@session.stubs(:controller).returns(mock_controller)
assert_equal '/show', @session.url_for(options)
end
def test_url_for_without_controller
options = {:action => 'show'}
mock_rewriter = mock()
mock_rewriter.expects(:rewrite).with(options).returns('/show')
@session.stubs(:generic_url_rewriter).returns(mock_rewriter)
@session.stubs(:controller).returns(nil)
assert_equal '/show', @session.url_for(options)
end
def test_redirect_bool_with_status_in_300s
@session.stubs(:status).returns 301
assert @session.redirect?
end
def test_redirect_bool_with_status_in_200s
@session.stubs(:status).returns 200
assert !@session.redirect?
end
def test_get
path = "/index"; params = "blah"; headers = {:location => 'blah'}
@session.expects(:process).with(:get,path,params,headers)
@session.get(path,params,headers)
end
def test_post
path = "/index"; params = "blah"; headers = {:location => 'blah'}
@session.expects(:process).with(:post,path,params,headers)
@session.post(path,params,headers)
end
def test_put
path = "/index"; params = "blah"; headers = {:location => 'blah'}
@session.expects(:process).with(:put,path,params,headers)
@session.put(path,params,headers)
end
def test_delete
path = "/index"; params = "blah"; headers = {:location => 'blah'}
@session.expects(:process).with(:delete,path,params,headers)
@session.delete(path,params,headers)
end
def test_head
path = "/index"; params = "blah"; headers = {:location => 'blah'}
@session.expects(:process).with(:head,path,params,headers)
@session.head(path,params,headers)
end
def test_xml_http_request
path = "/index"; params = "blah"; headers = {:location => 'blah'}
headers_after_xhr = headers.merge(
"X-Requested-With" => "XMLHttpRequest",
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
)
@session.expects(:post).with(path,params,headers_after_xhr)
@session.xml_http_request(path,params,headers)
end
end
# TODO
# class MockCGITest < Test::Unit::TestCase
# end
rescue LoadError
$stderr.puts "Skipping integration tests. `gem install mocha` and try again."
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册