mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
188 lines
6.2 KiB
Ruby
188 lines
6.2 KiB
Ruby
require 'abstract_unit'
|
|
|
|
module Admin; class User; end; end
|
|
|
|
class ParamsWrapperTest < ActionController::TestCase
|
|
class UsersController < ActionController::Base
|
|
def test
|
|
render :json => params.except(:controller, :action)
|
|
end
|
|
end
|
|
|
|
class User; end
|
|
class Person; end
|
|
|
|
tests UsersController
|
|
|
|
def test_derivered_name_from_controller
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu' }
|
|
assert_equal '{"username":"sikachu","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_wrapper_name
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters :person
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu' }
|
|
assert_equal '{"username":"sikachu","person":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_wrapper_model
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters Person
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu' }
|
|
assert_equal '{"username":"sikachu","person":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_only_option
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters :only => :username
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_except_option
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters :except => :title
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_both_wrapper_name_and_only_option
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters :person, :only => :username
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","person":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_not_enabled_format
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/xml'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer"}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_specify_format
|
|
with_default_wrapper_options do
|
|
UsersController.wrap_parameters :format => :xml
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/xml'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","user":{"username":"sikachu","title":"Developer"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_not_wrap_reserved_parameters
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'authenticity_token' => 'pwned', '_method' => 'put', 'utf8' => '☃', 'username' => 'sikachu' }
|
|
assert_equal '{"authenticity_token":"pwned","_method":"put","utf8":"☃","username":"sikachu","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_no_double_wrap_if_key_exists
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'user' => { 'username' => 'sikachu' }}
|
|
assert_equal '{"user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_nested_params
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'person' => { 'username' => 'sikachu' }}
|
|
assert_equal '{"person":{"username":"sikachu"},"user":{"person":{"username":"sikachu"}}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_derived_wrapped_keys_from_matching_model
|
|
with_default_wrapper_options do
|
|
User.expects(:respond_to?).with(:column_names).returns(true)
|
|
User.expects(:column_names).returns(["username"])
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_derived_wrapped_keys_from_specified_model
|
|
with_default_wrapper_options do
|
|
Person.expects(:respond_to?).with(:column_names).returns(true)
|
|
Person.expects(:column_names).returns(["username"])
|
|
|
|
UsersController.wrap_parameters Person
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu', 'title' => 'Developer' }
|
|
assert_equal '{"username":"sikachu","title":"Developer","person":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
private
|
|
def with_default_wrapper_options(&block)
|
|
@controller.class._wrapper_options = {:format => [:json]}
|
|
@controller.class.inherited(@controller.class)
|
|
yield
|
|
end
|
|
end
|
|
|
|
class NamespacedParamsWrapperTest < ActionController::TestCase
|
|
module Admin
|
|
class UsersController < ActionController::Base
|
|
def test
|
|
render :json => params.except(:controller, :action)
|
|
end
|
|
end
|
|
|
|
class User; end
|
|
end
|
|
class User; end
|
|
class Person; end
|
|
|
|
tests Admin::UsersController
|
|
|
|
def test_derivered_name_from_controller
|
|
with_default_wrapper_options do
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu' }
|
|
assert_equal '{"username":"sikachu","user":{"username":"sikachu"}}', @response.body
|
|
end
|
|
end
|
|
|
|
def test_namespace_lookup_when_namespaced_model_available
|
|
with_default_wrapper_options do
|
|
Admin::User.expects(:respond_to?).with(:column_names).returns(false)
|
|
|
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
|
post :test, { 'username' => 'sikachu' }
|
|
end
|
|
end
|
|
|
|
private
|
|
def with_default_wrapper_options(&block)
|
|
@controller.class._wrapper_options = {:format => [:json]}
|
|
@controller.class.inherited(@controller.class)
|
|
yield
|
|
end
|
|
end
|