aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2016-07-12 05:54:26 +0930
committerGitHub <noreply@github.com>2016-07-12 05:54:26 +0930
commite6352dbbb591abcc04feeecd14308b375241047c (patch)
treef69b3d6db22d295588355f32565ecc91aac8c59b /actionpack/test/controller
parent629dde297ce5e4b7614fbb0218f2593effaf7e28 (diff)
parent96070595697477676ea051c19c2c951901302bed (diff)
downloadrails-e6352dbbb591abcc04feeecd14308b375241047c.tar.gz
rails-e6352dbbb591abcc04feeecd14308b375241047c.tar.bz2
rails-e6352dbbb591abcc04feeecd14308b375241047c.zip
Merge pull request #25735 from timrogers/actioncontroller-parameters-dup
Stop changes to a dupped `ActionController::Parameters` mutating the original
Diffstat (limited to 'actionpack/test/controller')
-rw-r--r--actionpack/test/controller/parameters/dup_test.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/actionpack/test/controller/parameters/dup_test.rb b/actionpack/test/controller/parameters/dup_test.rb
new file mode 100644
index 0000000000..ac5a9d94d0
--- /dev/null
+++ b/actionpack/test/controller/parameters/dup_test.rb
@@ -0,0 +1,43 @@
+require 'abstract_unit'
+require 'action_controller/metal/strong_parameters'
+
+class ParametersDupTest < ActiveSupport::TestCase
+ setup do
+ ActionController::Parameters.permit_all_parameters = false
+
+ @params = ActionController::Parameters.new(
+ person: {
+ age: '32',
+ name: {
+ first: 'David',
+ last: 'Heinemeier Hansson'
+ },
+ addresses: [{city: 'Chicago', state: 'Illinois'}]
+ }
+ )
+ end
+
+ test "a duplicate maintains the original's permitted status" do
+ @params.permit!
+ dupped_params = @params.dup
+ assert dupped_params.permitted?
+ end
+
+ test "a duplicate maintains the original's parameters" do
+ @params.permit!
+ dupped_params = @params.dup
+ assert_equal @params.to_h, dupped_params.to_h
+ end
+
+ test "changes to a duplicate's parameters do not affect the original" do
+ dupped_params = @params.dup
+ dupped_params.delete(:person)
+ assert_not_equal @params, dupped_params
+ end
+
+ test "changes tp a duplicate's permitted status do not affect the original" do
+ dupped_params = @params.dup
+ dupped_params.permit!
+ assert_not_equal @params, dupped_params
+ end
+end