require 'action_controller/test_case'
ActionController::TestCase.class_eval do
[ :get, :post, :put, :delete ].each do |overloaded_method|
define_method overloaded_method do |*args|
action,params,extras = *args
super action, @params.merge( params || {} ), *extras
end
end
def setup
super
@params = {}
end
end
Test::Unit::TestCase.class_eval do
def self.a_request_to method, action, params={}, &blk
context "a :#{method} to :#{action}" do
setup do
if params && params.blank?
@action = lambda{ send method, action }
else
send method, action, params
end
end
blk.call
end
end
def self.a_get_to action, params={}, &blk
a_request_to :get, action, params, &blk
end
def self.a_post_to action, params={}, &blk
a_request_to :post, action, params, &blk
end
def self.a_put_to action, params={}, &blk
a_request_to :put, action, params, &blk
end
def self.a_delete_to action, params={}, &blk
a_request_to :delete, action, params, &blk
end
def self.with_params params, title=""
raise ArgumentError, "params must be a Hash" unless params.is_a?(Hash)
name = title.blank? ? "with params = #{params.inspect}" : "with #{title} (#{params.inspect})"
context name do
setup do
@params.merge! params
@action.call
end
yield
end
end
end