forked from rails/strong_parameters
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nested_parameters_test.rb
98 lines (85 loc) · 3 KB
/
nested_parameters_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
require 'test_helper'
require 'action_controller/parameters'
class NestedParametersTest < ActiveSupport::TestCase
test "permitted nested parameters" do
params = ActionController::Parameters.new({
:book=> {
:title=> "Romeo and Juliet",
:authors=> [{
:name=> "William Shakespeare",
:born=> "1564-04-26"
}, {
:name=> "Christopher Marlowe"
}],
:details=> {
:pages=> 200,
:genre=> "Tragedy"
}
},
:magazine=> "Mjallo!"
})
permitted = params.permit :book=> [ :title, { :authors=> [ :name ] }, { :details=> :pages } ]
assert permitted.permitted?
assert_equal "Romeo and Juliet", permitted[:book][:title]
assert_equal "William Shakespeare", permitted[:book][:authors][0][:name]
assert_equal "Christopher Marlowe", permitted[:book][:authors][1][:name]
assert_equal 200, permitted[:book][:details][:pages]
assert_nil permitted[:book][:details][:genre]
assert_nil permitted[:book][:authors][1][:born]
assert_nil permitted[:magazine]
end
test "nested arrays with strings" do
params = ActionController::Parameters.new({
:book=> {
:genres=> ["Tragedy"]
}
})
permitted = params.permit :book=> :genres
assert_equal ["Tragedy"], permitted[:book][:genres]
end
test "nested array with strings that should be hashes" do
params = ActionController::Parameters.new({
:book=> {
:genres=> ["Tragedy"]
}
})
permitted = params.permit :book=> { :genres=> :type }
assert permitted[:book][:genres].empty?
end
test "nested array with strings that should be hashes and additional values" do
params = ActionController::Parameters.new({
:book=> {
:title=> "Romeo and Juliet",
:genres=> ["Tragedy"]
}
})
permitted = params.permit :book=> [ :title, { :genres=> :type } ]
assert_equal "Romeo and Juliet", permitted[:book][:title]
assert permitted[:book][:genres].empty?
end
test "nested string that should be a hash" do
params = ActionController::Parameters.new({
:book=> {
:genre=> "Tragedy"
}
})
permitted = params.permit :book=> { :genre=> :type }
assert_nil permitted[:book][:genre]
end
test "fields_for_style_nested_params" do
params = ActionController::Parameters.new({
:book => {
:authors_attributes => {
:'0' => {:name => 'William Shakespeare', :age_of_death => '52' },
:'1' => { :name => 'Unattributed Assistant' }
}
}
})
permitted = params.permit :book => { :authors_attributes => [ :name ] }
assert_not_nil permitted[:book][:authors_attributes]['0']
assert_not_nil permitted[:book][:authors_attributes]['1']
assert_nil permitted[:book][:authors_attributes]['0'][:age_of_death]
assert_equal 'William Shakespeare', permitted[:book][:authors_attributes]['0'][:name]
assert_equal 'Unattributed Assistant', permitted[:book][:authors_attributes]['1'][:name]
end
end