rails_xss 0.1.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/rails_xss/erubis.rb +7 -1
- metadata +41 -63
- data/test/active_record_helper_test.rb +0 -74
- data/test/asset_tag_helper_test.rb +0 -49
- data/test/caching_test.rb +0 -43
- data/test/date_helper_test.rb +0 -29
- data/test/deprecated_output_safety_test.rb +0 -112
- data/test/erb_util_test.rb +0 -36
- data/test/form_helper_test.rb +0 -1447
- data/test/form_tag_helper_test.rb +0 -354
- data/test/output_safety_test.rb +0 -115
- data/test/rails_xss_test.rb +0 -23
- data/test/test_helper.rb +0 -5
- data/test/text_helper_test.rb +0 -17
data/test/form_helper_test.rb
DELETED
@@ -1,1447 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
silence_warnings do
|
4
|
-
Post = Struct.new(:title, :author_name, :body, :secret, :written_on, :cost)
|
5
|
-
Post.class_eval do
|
6
|
-
alias_method :title_before_type_cast, :title unless respond_to?(:title_before_type_cast)
|
7
|
-
alias_method :body_before_type_cast, :body unless respond_to?(:body_before_type_cast)
|
8
|
-
alias_method :author_name_before_type_cast, :author_name unless respond_to?(:author_name_before_type_cast)
|
9
|
-
alias_method :secret?, :secret
|
10
|
-
|
11
|
-
def new_record=(boolean)
|
12
|
-
@new_record = boolean
|
13
|
-
end
|
14
|
-
|
15
|
-
def new_record?
|
16
|
-
@new_record
|
17
|
-
end
|
18
|
-
|
19
|
-
attr_accessor :author
|
20
|
-
def author_attributes=(attributes); end
|
21
|
-
|
22
|
-
attr_accessor :comments
|
23
|
-
def comments_attributes=(attributes); end
|
24
|
-
|
25
|
-
attr_accessor :tags
|
26
|
-
def tags_attributes=(attributes); end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Comment
|
30
|
-
attr_reader :id
|
31
|
-
attr_reader :post_id
|
32
|
-
def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
|
33
|
-
def save; @id = 1; @post_id = 1 end
|
34
|
-
def new_record?; @id.nil? end
|
35
|
-
def to_param; @id; end
|
36
|
-
def name
|
37
|
-
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
|
38
|
-
end
|
39
|
-
|
40
|
-
attr_accessor :relevances
|
41
|
-
def relevances_attributes=(attributes); end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
class Tag
|
46
|
-
attr_reader :id
|
47
|
-
attr_reader :post_id
|
48
|
-
def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
|
49
|
-
def save; @id = 1; @post_id = 1 end
|
50
|
-
def new_record?; @id.nil? end
|
51
|
-
def to_param; @id; end
|
52
|
-
def value
|
53
|
-
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
|
54
|
-
end
|
55
|
-
|
56
|
-
attr_accessor :relevances
|
57
|
-
def relevances_attributes=(attributes); end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
class CommentRelevance
|
62
|
-
attr_reader :id
|
63
|
-
attr_reader :comment_id
|
64
|
-
def initialize(id = nil, comment_id = nil); @id, @comment_id = id, comment_id end
|
65
|
-
def save; @id = 1; @comment_id = 1 end
|
66
|
-
def new_record?; @id.nil? end
|
67
|
-
def to_param; @id; end
|
68
|
-
def value
|
69
|
-
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class TagRelevance
|
74
|
-
attr_reader :id
|
75
|
-
attr_reader :tag_id
|
76
|
-
def initialize(id = nil, tag_id = nil); @id, @tag_id = id, tag_id end
|
77
|
-
def save; @id = 1; @tag_id = 1 end
|
78
|
-
def new_record?; @id.nil? end
|
79
|
-
def to_param; @id; end
|
80
|
-
def value
|
81
|
-
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
class Author < Comment
|
86
|
-
attr_accessor :post
|
87
|
-
def post_attributes=(attributes); end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class FormHelperTest < ActionView::TestCase
|
92
|
-
tests ActionView::Helpers::FormHelper
|
93
|
-
|
94
|
-
def setup
|
95
|
-
super
|
96
|
-
|
97
|
-
# Create "label" locale for testing I18n label helpers
|
98
|
-
I18n.backend.store_translations 'label', {
|
99
|
-
:helpers => {
|
100
|
-
:label => {
|
101
|
-
:post => {
|
102
|
-
:body => "Write entire text here"
|
103
|
-
}
|
104
|
-
}
|
105
|
-
}
|
106
|
-
}
|
107
|
-
|
108
|
-
@post = Post.new
|
109
|
-
@comment = Comment.new
|
110
|
-
def @post.errors()
|
111
|
-
Class.new{
|
112
|
-
def on(field); "can't be empty" if field == "author_name"; end
|
113
|
-
def empty?() false end
|
114
|
-
def count() 1 end
|
115
|
-
def full_messages() [ "Author name can't be empty" ] end
|
116
|
-
}.new
|
117
|
-
end
|
118
|
-
def @post.id; 123; end
|
119
|
-
def @post.id_before_type_cast; 123; end
|
120
|
-
def @post.to_param; '123'; end
|
121
|
-
|
122
|
-
@post.title = "Hello World"
|
123
|
-
@post.author_name = ""
|
124
|
-
@post.body = "Back to the hill and over it again!"
|
125
|
-
@post.secret = 1
|
126
|
-
@post.written_on = Date.new(2004, 6, 15)
|
127
|
-
|
128
|
-
def Post.human_attribute_name(attribute)
|
129
|
-
attribute.to_s == "cost" ? "Total cost" : attribute.to_s.humanize
|
130
|
-
end
|
131
|
-
|
132
|
-
@controller = Class.new do
|
133
|
-
attr_reader :url_for_options
|
134
|
-
def url_for(options)
|
135
|
-
@url_for_options = options
|
136
|
-
"http://www.example.com"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
@controller = @controller.new
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_label
|
143
|
-
assert_dom_equal('<label for="post_title">Title</label>', label("post", "title"))
|
144
|
-
assert_dom_equal('<label for="post_title">The title goes here</label>', label("post", "title", "The title goes here"))
|
145
|
-
assert_dom_equal(
|
146
|
-
'<label class="title_label" for="post_title">Title</label>',
|
147
|
-
label("post", "title", nil, :class => 'title_label')
|
148
|
-
)
|
149
|
-
assert_dom_equal('<label for="post_secret">Secret?</label>', label("post", "secret?"))
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_label_with_symbols
|
153
|
-
assert_dom_equal('<label for="post_title">Title</label>', label(:post, :title))
|
154
|
-
assert_dom_equal('<label for="post_secret">Secret?</label>', label(:post, :secret?))
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_label_with_locales_strings
|
158
|
-
old_locale, I18n.locale = I18n.locale, :label
|
159
|
-
assert_dom_equal('<label for="post_body">Write entire text here</label>', label("post", "body"))
|
160
|
-
ensure
|
161
|
-
I18n.locale = old_locale
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_label_with_human_attribute_name
|
165
|
-
old_locale, I18n.locale = I18n.locale, :label
|
166
|
-
assert_dom_equal('<label for="post_cost">Total cost</label>', label(:post, :cost))
|
167
|
-
ensure
|
168
|
-
I18n.locale = old_locale
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_label_with_locales_symbols
|
172
|
-
old_locale, I18n.locale = I18n.locale, :label
|
173
|
-
assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
|
174
|
-
ensure
|
175
|
-
I18n.locale = old_locale
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_label_with_for_attribute_as_symbol
|
179
|
-
assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, :for => "my_for"))
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_label_with_for_attribute_as_string
|
183
|
-
assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, "for" => "my_for"))
|
184
|
-
end
|
185
|
-
|
186
|
-
def test_label_with_id_attribute_as_symbol
|
187
|
-
assert_dom_equal('<label for="post_title" id="my_id">Title</label>', label(:post, :title, nil, :id => "my_id"))
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_label_with_id_attribute_as_string
|
191
|
-
assert_dom_equal('<label for="post_title" id="my_id">Title</label>', label(:post, :title, nil, "id" => "my_id"))
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_label_with_for_and_id_attributes_as_symbol
|
195
|
-
assert_dom_equal('<label for="my_for" id="my_id">Title</label>', label(:post, :title, nil, :for => "my_for", :id => "my_id"))
|
196
|
-
end
|
197
|
-
|
198
|
-
def test_label_with_for_and_id_attributes_as_string
|
199
|
-
assert_dom_equal('<label for="my_for" id="my_id">Title</label>', label(:post, :title, nil, "for" => "my_for", "id" => "my_id"))
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_label_for_radio_buttons_with_value
|
203
|
-
assert_dom_equal('<label for="post_title_great_title">The title goes here</label>', label("post", "title", "The title goes here", :value => "great_title"))
|
204
|
-
assert_dom_equal('<label for="post_title_great_title">The title goes here</label>', label("post", "title", "The title goes here", :value => "great title"))
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_text_field
|
208
|
-
assert_dom_equal(
|
209
|
-
'<input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title")
|
210
|
-
)
|
211
|
-
assert_dom_equal(
|
212
|
-
'<input id="post_title" name="post[title]" size="30" type="password" value="Hello World" />', password_field("post", "title")
|
213
|
-
)
|
214
|
-
assert_dom_equal(
|
215
|
-
'<input id="person_name" name="person[name]" size="30" type="password" />', password_field("person", "name")
|
216
|
-
)
|
217
|
-
end
|
218
|
-
|
219
|
-
def test_text_field_with_escapes
|
220
|
-
@post.title = "<b>Hello World</b>"
|
221
|
-
assert_dom_equal(
|
222
|
-
'<input id="post_title" name="post[title]" size="30" type="text" value="<b>Hello World</b>" />', text_field("post", "title")
|
223
|
-
)
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_text_field_with_html_entities
|
227
|
-
@post.title = "The HTML Entity for & is &"
|
228
|
-
assert_dom_equal(
|
229
|
-
'<input id="post_title" name="post[title]" size="30" type="text" value="The HTML Entity for & is &amp;" />',
|
230
|
-
text_field("post", "title")
|
231
|
-
)
|
232
|
-
end
|
233
|
-
|
234
|
-
def test_text_field_with_options
|
235
|
-
expected = '<input id="post_title" name="post[title]" size="35" type="text" value="Hello World" />'
|
236
|
-
assert_dom_equal expected, text_field("post", "title", "size" => 35)
|
237
|
-
assert_dom_equal expected, text_field("post", "title", :size => 35)
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_text_field_assuming_size
|
241
|
-
expected = '<input id="post_title" maxlength="35" name="post[title]" size="35" type="text" value="Hello World" />'
|
242
|
-
assert_dom_equal expected, text_field("post", "title", "maxlength" => 35)
|
243
|
-
assert_dom_equal expected, text_field("post", "title", :maxlength => 35)
|
244
|
-
end
|
245
|
-
|
246
|
-
def test_text_field_removing_size
|
247
|
-
expected = '<input id="post_title" maxlength="35" name="post[title]" type="text" value="Hello World" />'
|
248
|
-
assert_dom_equal expected, text_field("post", "title", "maxlength" => 35, "size" => nil)
|
249
|
-
assert_dom_equal expected, text_field("post", "title", :maxlength => 35, :size => nil)
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_text_field_doesnt_change_param_values
|
253
|
-
object_name = 'post[]'
|
254
|
-
expected = '<input id="post_123_title" name="post[123][title]" size="30" type="text" value="Hello World" />'
|
255
|
-
assert_equal expected, text_field(object_name, "title")
|
256
|
-
assert_equal object_name, "post[]"
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_hidden_field
|
260
|
-
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Hello World" />',
|
261
|
-
hidden_field("post", "title")
|
262
|
-
assert_dom_equal '<input id="post_secret" name="post[secret]" type="hidden" value="1" />',
|
263
|
-
hidden_field("post", "secret?")
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_hidden_field_with_escapes
|
267
|
-
@post.title = "<b>Hello World</b>"
|
268
|
-
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="<b>Hello World</b>" />',
|
269
|
-
hidden_field("post", "title")
|
270
|
-
end
|
271
|
-
|
272
|
-
def test_text_field_with_options
|
273
|
-
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Something Else" />',
|
274
|
-
hidden_field("post", "title", :value => "Something Else")
|
275
|
-
end
|
276
|
-
|
277
|
-
def test_check_box
|
278
|
-
assert_dom_equal(
|
279
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
280
|
-
check_box("post", "secret")
|
281
|
-
)
|
282
|
-
@post.secret = 0
|
283
|
-
assert_dom_equal(
|
284
|
-
'<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
285
|
-
check_box("post", "secret")
|
286
|
-
)
|
287
|
-
assert_dom_equal(
|
288
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
289
|
-
check_box("post", "secret" ,{"checked"=>"checked"})
|
290
|
-
)
|
291
|
-
@post.secret = true
|
292
|
-
assert_dom_equal(
|
293
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
294
|
-
check_box("post", "secret")
|
295
|
-
)
|
296
|
-
assert_dom_equal(
|
297
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
298
|
-
check_box("post", "secret?")
|
299
|
-
)
|
300
|
-
|
301
|
-
@post.secret = ['0']
|
302
|
-
assert_dom_equal(
|
303
|
-
'<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
304
|
-
check_box("post", "secret")
|
305
|
-
)
|
306
|
-
@post.secret = ['1']
|
307
|
-
assert_dom_equal(
|
308
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
309
|
-
check_box("post", "secret")
|
310
|
-
)
|
311
|
-
end
|
312
|
-
|
313
|
-
def test_check_box_with_explicit_checked_and_unchecked_values
|
314
|
-
@post.secret = "on"
|
315
|
-
assert_dom_equal(
|
316
|
-
'<input name="post[secret]" type="hidden" value="off" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" />',
|
317
|
-
check_box("post", "secret", {}, "on", "off")
|
318
|
-
)
|
319
|
-
end
|
320
|
-
|
321
|
-
def test_checkbox_disabled_still_submits_checked_value
|
322
|
-
assert_dom_equal(
|
323
|
-
'<input name="post[secret]" type="hidden" value="1" /><input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
324
|
-
check_box("post", "secret", { :disabled => :true })
|
325
|
-
)
|
326
|
-
end
|
327
|
-
|
328
|
-
def test_radio_button
|
329
|
-
assert_dom_equal('<input checked="checked" id="post_title_hello_world" name="post[title]" type="radio" value="Hello World" />',
|
330
|
-
radio_button("post", "title", "Hello World")
|
331
|
-
)
|
332
|
-
assert_dom_equal('<input id="post_title_goodbye_world" name="post[title]" type="radio" value="Goodbye World" />',
|
333
|
-
radio_button("post", "title", "Goodbye World")
|
334
|
-
)
|
335
|
-
assert_dom_equal('<input id="item_subobject_title_inside_world" name="item[subobject][title]" type="radio" value="inside world"/>',
|
336
|
-
radio_button("item[subobject]", "title", "inside world")
|
337
|
-
)
|
338
|
-
end
|
339
|
-
|
340
|
-
def test_radio_button_is_checked_with_integers
|
341
|
-
assert_dom_equal('<input checked="checked" id="post_secret_1" name="post[secret]" type="radio" value="1" />',
|
342
|
-
radio_button("post", "secret", "1")
|
343
|
-
)
|
344
|
-
end
|
345
|
-
|
346
|
-
def test_radio_button_respects_passed_in_id
|
347
|
-
assert_dom_equal('<input checked="checked" id="foo" name="post[secret]" type="radio" value="1" />',
|
348
|
-
radio_button("post", "secret", "1", :id=>"foo")
|
349
|
-
)
|
350
|
-
end
|
351
|
-
|
352
|
-
def test_radio_button_with_booleans
|
353
|
-
assert_dom_equal('<input id="post_secret_true" name="post[secret]" type="radio" value="true" />',
|
354
|
-
radio_button("post", "secret", true)
|
355
|
-
)
|
356
|
-
|
357
|
-
assert_dom_equal('<input id="post_secret_false" name="post[secret]" type="radio" value="false" />',
|
358
|
-
radio_button("post", "secret", false)
|
359
|
-
)
|
360
|
-
end
|
361
|
-
|
362
|
-
def test_text_area
|
363
|
-
assert_dom_equal(
|
364
|
-
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea>',
|
365
|
-
text_area("post", "body")
|
366
|
-
)
|
367
|
-
end
|
368
|
-
|
369
|
-
def test_text_area_with_escapes
|
370
|
-
@post.body = "Back to <i>the</i> hill and over it again!"
|
371
|
-
assert_dom_equal(
|
372
|
-
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to <i>the</i> hill and over it again!</textarea>',
|
373
|
-
text_area("post", "body")
|
374
|
-
)
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_text_area_with_alternate_value
|
378
|
-
assert_dom_equal(
|
379
|
-
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Testing alternate values.</textarea>',
|
380
|
-
text_area("post", "body", :value => 'Testing alternate values.')
|
381
|
-
)
|
382
|
-
end
|
383
|
-
|
384
|
-
def test_text_area_with_html_entities
|
385
|
-
@post.body = "The HTML Entity for & is &"
|
386
|
-
assert_dom_equal(
|
387
|
-
'<textarea cols="40" id="post_body" name="post[body]" rows="20">The HTML Entity for & is &amp;</textarea>',
|
388
|
-
text_area("post", "body")
|
389
|
-
)
|
390
|
-
end
|
391
|
-
|
392
|
-
def test_text_area_with_size_option
|
393
|
-
assert_dom_equal(
|
394
|
-
'<textarea cols="183" id="post_body" name="post[body]" rows="820">Back to the hill and over it again!</textarea>',
|
395
|
-
text_area("post", "body", :size => "183x820")
|
396
|
-
)
|
397
|
-
end
|
398
|
-
|
399
|
-
def test_explicit_name
|
400
|
-
assert_dom_equal(
|
401
|
-
'<input id="post_title" name="dont guess" size="30" type="text" value="Hello World" />', text_field("post", "title", "name" => "dont guess")
|
402
|
-
)
|
403
|
-
assert_dom_equal(
|
404
|
-
'<textarea cols="40" id="post_body" name="really!" rows="20">Back to the hill and over it again!</textarea>',
|
405
|
-
text_area("post", "body", "name" => "really!")
|
406
|
-
)
|
407
|
-
assert_dom_equal(
|
408
|
-
'<input name="i mean it" type="hidden" value="0" /><input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" />',
|
409
|
-
check_box("post", "secret", "name" => "i mean it")
|
410
|
-
)
|
411
|
-
assert_dom_equal text_field("post", "title", "name" => "dont guess"),
|
412
|
-
text_field("post", "title", :name => "dont guess")
|
413
|
-
assert_dom_equal text_area("post", "body", "name" => "really!"),
|
414
|
-
text_area("post", "body", :name => "really!")
|
415
|
-
assert_dom_equal check_box("post", "secret", "name" => "i mean it"),
|
416
|
-
check_box("post", "secret", :name => "i mean it")
|
417
|
-
end
|
418
|
-
|
419
|
-
def test_explicit_id
|
420
|
-
assert_dom_equal(
|
421
|
-
'<input id="dont guess" name="post[title]" size="30" type="text" value="Hello World" />', text_field("post", "title", "id" => "dont guess")
|
422
|
-
)
|
423
|
-
assert_dom_equal(
|
424
|
-
'<textarea cols="40" id="really!" name="post[body]" rows="20">Back to the hill and over it again!</textarea>',
|
425
|
-
text_area("post", "body", "id" => "really!")
|
426
|
-
)
|
427
|
-
assert_dom_equal(
|
428
|
-
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" />',
|
429
|
-
check_box("post", "secret", "id" => "i mean it")
|
430
|
-
)
|
431
|
-
assert_dom_equal text_field("post", "title", "id" => "dont guess"),
|
432
|
-
text_field("post", "title", :id => "dont guess")
|
433
|
-
assert_dom_equal text_area("post", "body", "id" => "really!"),
|
434
|
-
text_area("post", "body", :id => "really!")
|
435
|
-
assert_dom_equal check_box("post", "secret", "id" => "i mean it"),
|
436
|
-
check_box("post", "secret", :id => "i mean it")
|
437
|
-
end
|
438
|
-
|
439
|
-
def test_auto_index
|
440
|
-
pid = @post.id
|
441
|
-
assert_dom_equal(
|
442
|
-
"<label for=\"post_#{pid}_title\">Title</label>",
|
443
|
-
label("post[]", "title")
|
444
|
-
)
|
445
|
-
assert_dom_equal(
|
446
|
-
"<input id=\"post_#{pid}_title\" name=\"post[#{pid}][title]\" size=\"30\" type=\"text\" value=\"Hello World\" />", text_field("post[]","title")
|
447
|
-
)
|
448
|
-
assert_dom_equal(
|
449
|
-
"<textarea cols=\"40\" id=\"post_#{pid}_body\" name=\"post[#{pid}][body]\" rows=\"20\">Back to the hill and over it again!</textarea>",
|
450
|
-
text_area("post[]", "body")
|
451
|
-
)
|
452
|
-
assert_dom_equal(
|
453
|
-
"<input name=\"post[#{pid}][secret]\" type=\"hidden\" value=\"0\" /><input checked=\"checked\" id=\"post_#{pid}_secret\" name=\"post[#{pid}][secret]\" type=\"checkbox\" value=\"1\" />",
|
454
|
-
check_box("post[]", "secret")
|
455
|
-
)
|
456
|
-
assert_dom_equal(
|
457
|
-
"<input checked=\"checked\" id=\"post_#{pid}_title_hello_world\" name=\"post[#{pid}][title]\" type=\"radio\" value=\"Hello World\" />",
|
458
|
-
radio_button("post[]", "title", "Hello World")
|
459
|
-
)
|
460
|
-
assert_dom_equal("<input id=\"post_#{pid}_title_goodbye_world\" name=\"post[#{pid}][title]\" type=\"radio\" value=\"Goodbye World\" />",
|
461
|
-
radio_button("post[]", "title", "Goodbye World")
|
462
|
-
)
|
463
|
-
end
|
464
|
-
|
465
|
-
def test_form_for
|
466
|
-
form_for(:post, @post, :html => { :id => 'create-post' }) do |f|
|
467
|
-
concat f.label(:title)
|
468
|
-
concat f.text_field(:title)
|
469
|
-
concat f.text_area(:body)
|
470
|
-
concat f.check_box(:secret)
|
471
|
-
concat f.submit('Create post')
|
472
|
-
end
|
473
|
-
|
474
|
-
expected =
|
475
|
-
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
476
|
-
"<label for='post_title'>Title</label>" +
|
477
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
478
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
479
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
480
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
481
|
-
"<input name='commit' id='post_submit' type='submit' value='Create post' />" +
|
482
|
-
"</form>"
|
483
|
-
|
484
|
-
assert_dom_equal expected, output_buffer
|
485
|
-
end
|
486
|
-
|
487
|
-
def test_form_for_with_method
|
488
|
-
form_for(:post, @post, :html => { :id => 'create-post', :method => :put }) do |f|
|
489
|
-
concat f.text_field(:title)
|
490
|
-
concat f.text_area(:body)
|
491
|
-
concat f.check_box(:secret)
|
492
|
-
end
|
493
|
-
|
494
|
-
expected =
|
495
|
-
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
496
|
-
"<div style='margin:0;padding:0;display:inline'><input name='_method' type='hidden' value='put' /></div>" +
|
497
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
498
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
499
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
500
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
501
|
-
"</form>"
|
502
|
-
|
503
|
-
assert_dom_equal expected, output_buffer
|
504
|
-
end
|
505
|
-
|
506
|
-
def test_form_for_without_object
|
507
|
-
form_for(:post, :html => { :id => 'create-post' }) do |f|
|
508
|
-
concat f.text_field(:title)
|
509
|
-
concat f.text_area(:body)
|
510
|
-
concat f.check_box(:secret)
|
511
|
-
end
|
512
|
-
|
513
|
-
expected =
|
514
|
-
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
515
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
516
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
517
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
518
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
519
|
-
"</form>"
|
520
|
-
|
521
|
-
assert_dom_equal expected, output_buffer
|
522
|
-
end
|
523
|
-
|
524
|
-
def test_form_for_with_index
|
525
|
-
form_for("post[]", @post) do |f|
|
526
|
-
concat f.label(:title)
|
527
|
-
concat f.text_field(:title)
|
528
|
-
concat f.text_area(:body)
|
529
|
-
concat f.check_box(:secret)
|
530
|
-
end
|
531
|
-
|
532
|
-
expected =
|
533
|
-
"<form action='http://www.example.com' method='post'>" +
|
534
|
-
"<label for=\"post_123_title\">Title</label>" +
|
535
|
-
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
536
|
-
"<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
537
|
-
"<input name='post[123][secret]' type='hidden' value='0' />" +
|
538
|
-
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
|
539
|
-
"</form>"
|
540
|
-
|
541
|
-
assert_dom_equal expected, output_buffer
|
542
|
-
end
|
543
|
-
|
544
|
-
def test_form_for_with_nil_index_option_override
|
545
|
-
form_for("post[]", @post, :index => nil) do |f|
|
546
|
-
concat f.text_field(:title)
|
547
|
-
concat f.text_area(:body)
|
548
|
-
concat f.check_box(:secret)
|
549
|
-
end
|
550
|
-
|
551
|
-
expected =
|
552
|
-
"<form action='http://www.example.com' method='post'>" +
|
553
|
-
"<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
|
554
|
-
"<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
555
|
-
"<input name='post[][secret]' type='hidden' value='0' />" +
|
556
|
-
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
|
557
|
-
"</form>"
|
558
|
-
|
559
|
-
assert_dom_equal expected, output_buffer
|
560
|
-
end
|
561
|
-
|
562
|
-
def test_nested_fields_for
|
563
|
-
form_for(:post, @post) do |f|
|
564
|
-
f.fields_for(:comment, @post) do |c|
|
565
|
-
concat c.text_field(:title)
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
570
|
-
"<input name='post[comment][title]' size='30' type='text' id='post_comment_title' value='Hello World' />" +
|
571
|
-
"</form>"
|
572
|
-
|
573
|
-
assert_dom_equal expected, output_buffer
|
574
|
-
end
|
575
|
-
|
576
|
-
def test_nested_fields_for_with_nested_collections
|
577
|
-
form_for('post[]', @post) do |f|
|
578
|
-
concat f.text_field(:title)
|
579
|
-
f.fields_for('comment[]', @comment) do |c|
|
580
|
-
concat c.text_field(:name)
|
581
|
-
end
|
582
|
-
end
|
583
|
-
|
584
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
585
|
-
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
586
|
-
"<input name='post[123][comment][][name]' size='30' type='text' id='post_123_comment__name' value='new comment' />" +
|
587
|
-
"</form>"
|
588
|
-
|
589
|
-
assert_dom_equal expected, output_buffer
|
590
|
-
end
|
591
|
-
|
592
|
-
def test_nested_fields_for_with_index_and_parent_fields
|
593
|
-
form_for('post', @post, :index => 1) do |c|
|
594
|
-
concat c.text_field(:title)
|
595
|
-
c.fields_for('comment', @comment, :index => 1) do |r|
|
596
|
-
concat r.text_field(:name)
|
597
|
-
end
|
598
|
-
end
|
599
|
-
|
600
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
601
|
-
"<input name='post[1][title]' size='30' type='text' id='post_1_title' value='Hello World' />" +
|
602
|
-
"<input name='post[1][comment][1][name]' size='30' type='text' id='post_1_comment_1_name' value='new comment' />" +
|
603
|
-
"</form>"
|
604
|
-
|
605
|
-
assert_dom_equal expected, output_buffer
|
606
|
-
end
|
607
|
-
|
608
|
-
def test_form_for_with_index_and_nested_fields_for
|
609
|
-
form_for(:post, @post, :index => 1) do |f|
|
610
|
-
f.fields_for(:comment, @post) do |c|
|
611
|
-
concat c.text_field(:title)
|
612
|
-
end
|
613
|
-
end
|
614
|
-
|
615
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
616
|
-
"<input name='post[1][comment][title]' size='30' type='text' id='post_1_comment_title' value='Hello World' />" +
|
617
|
-
"</form>"
|
618
|
-
|
619
|
-
assert_dom_equal expected, output_buffer
|
620
|
-
end
|
621
|
-
|
622
|
-
def test_nested_fields_for_with_index_on_both
|
623
|
-
form_for(:post, @post, :index => 1) do |f|
|
624
|
-
f.fields_for(:comment, @post, :index => 5) do |c|
|
625
|
-
concat c.text_field(:title)
|
626
|
-
end
|
627
|
-
end
|
628
|
-
|
629
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
630
|
-
"<input name='post[1][comment][5][title]' size='30' type='text' id='post_1_comment_5_title' value='Hello World' />" +
|
631
|
-
"</form>"
|
632
|
-
|
633
|
-
assert_dom_equal expected, output_buffer
|
634
|
-
end
|
635
|
-
|
636
|
-
def test_nested_fields_for_with_auto_index
|
637
|
-
form_for("post[]", @post) do |f|
|
638
|
-
f.fields_for(:comment, @post) do |c|
|
639
|
-
concat c.text_field(:title)
|
640
|
-
end
|
641
|
-
end
|
642
|
-
|
643
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
644
|
-
"<input name='post[123][comment][title]' size='30' type='text' id='post_123_comment_title' value='Hello World' />" +
|
645
|
-
"</form>"
|
646
|
-
|
647
|
-
assert_dom_equal expected, output_buffer
|
648
|
-
end
|
649
|
-
|
650
|
-
def test_nested_fields_for_with_index_radio_button
|
651
|
-
form_for(:post, @post) do |f|
|
652
|
-
f.fields_for(:comment, @post, :index => 5) do |c|
|
653
|
-
concat c.radio_button(:title, "hello")
|
654
|
-
end
|
655
|
-
end
|
656
|
-
|
657
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
658
|
-
"<input name='post[comment][5][title]' type='radio' id='post_comment_5_title_hello' value='hello' />" +
|
659
|
-
"</form>"
|
660
|
-
|
661
|
-
assert_dom_equal expected, output_buffer
|
662
|
-
end
|
663
|
-
|
664
|
-
def test_nested_fields_for_with_auto_index_on_both
|
665
|
-
form_for("post[]", @post) do |f|
|
666
|
-
f.fields_for("comment[]", @post) do |c|
|
667
|
-
concat c.text_field(:title)
|
668
|
-
end
|
669
|
-
end
|
670
|
-
|
671
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
672
|
-
"<input name='post[123][comment][123][title]' size='30' type='text' id='post_123_comment_123_title' value='Hello World' />" +
|
673
|
-
"</form>"
|
674
|
-
|
675
|
-
assert_dom_equal expected, output_buffer
|
676
|
-
end
|
677
|
-
|
678
|
-
def test_nested_fields_for_with_index_and_auto_index
|
679
|
-
form_for("post[]", @post) do |f|
|
680
|
-
f.fields_for(:comment, @post, :index => 5) do |c|
|
681
|
-
concat c.text_field(:title)
|
682
|
-
end
|
683
|
-
end
|
684
|
-
|
685
|
-
form_for(:post, @post, :index => 1) do |f|
|
686
|
-
f.fields_for("comment[]", @post) do |c|
|
687
|
-
concat c.text_field(:title)
|
688
|
-
end
|
689
|
-
end
|
690
|
-
|
691
|
-
expected = "<form action='http://www.example.com' method='post'>" +
|
692
|
-
"<input name='post[123][comment][5][title]' size='30' type='text' id='post_123_comment_5_title' value='Hello World' />" +
|
693
|
-
"</form>" +
|
694
|
-
"<form action='http://www.example.com' method='post'>" +
|
695
|
-
"<input name='post[1][comment][123][title]' size='30' type='text' id='post_1_comment_123_title' value='Hello World' />" +
|
696
|
-
"</form>"
|
697
|
-
|
698
|
-
assert_dom_equal expected, output_buffer
|
699
|
-
end
|
700
|
-
|
701
|
-
def test_nested_fields_for_with_a_new_record_on_a_nested_attributes_one_to_one_association
|
702
|
-
@post.author = Author.new
|
703
|
-
|
704
|
-
form_for(:post, @post) do |f|
|
705
|
-
concat f.text_field(:title)
|
706
|
-
f.fields_for(:author) do |af|
|
707
|
-
concat af.text_field(:name)
|
708
|
-
end
|
709
|
-
end
|
710
|
-
|
711
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
712
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
713
|
-
'<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="new author" />' +
|
714
|
-
'</form>'
|
715
|
-
|
716
|
-
assert_dom_equal expected, output_buffer
|
717
|
-
end
|
718
|
-
|
719
|
-
def test_nested_fields_for_with_explicitly_passed_object_on_a_nested_attributes_one_to_one_association
|
720
|
-
form_for(:post, @post) do |f|
|
721
|
-
f.fields_for(:author, Author.new(123)) do |af|
|
722
|
-
assert_not_nil af.object
|
723
|
-
assert_equal 123, af.object.id
|
724
|
-
end
|
725
|
-
end
|
726
|
-
end
|
727
|
-
|
728
|
-
def test_nested_fields_for_with_an_existing_record_on_a_nested_attributes_one_to_one_association
|
729
|
-
@post.author = Author.new(321)
|
730
|
-
|
731
|
-
form_for(:post, @post) do |f|
|
732
|
-
concat f.text_field(:title)
|
733
|
-
f.fields_for(:author) do |af|
|
734
|
-
concat af.text_field(:name)
|
735
|
-
end
|
736
|
-
end
|
737
|
-
|
738
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
739
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
740
|
-
'<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="author #321" />' +
|
741
|
-
'<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' +
|
742
|
-
'</form>'
|
743
|
-
|
744
|
-
assert_dom_equal expected, output_buffer
|
745
|
-
end
|
746
|
-
|
747
|
-
def test_nested_fields_for_with_existing_records_on_a_nested_attributes_one_to_one_association_with_explicit_hidden_field_placement
|
748
|
-
@post.author = Author.new(321)
|
749
|
-
|
750
|
-
form_for(:post, @post) do |f|
|
751
|
-
concat f.text_field(:title)
|
752
|
-
f.fields_for(:author) do |af|
|
753
|
-
concat af.hidden_field(:id)
|
754
|
-
concat af.text_field(:name)
|
755
|
-
end
|
756
|
-
end
|
757
|
-
|
758
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
759
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
760
|
-
'<input id="post_author_attributes_id" name="post[author_attributes][id]" type="hidden" value="321" />' +
|
761
|
-
'<input id="post_author_attributes_name" name="post[author_attributes][name]" size="30" type="text" value="author #321" />' +
|
762
|
-
'</form>'
|
763
|
-
|
764
|
-
assert_dom_equal expected, output_buffer
|
765
|
-
end
|
766
|
-
|
767
|
-
def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association
|
768
|
-
@post.comments = Array.new(2) { |id| Comment.new(id + 1) }
|
769
|
-
|
770
|
-
form_for(:post, @post) do |f|
|
771
|
-
concat f.text_field(:title)
|
772
|
-
@post.comments.each do |comment|
|
773
|
-
f.fields_for(:comments, comment) do |cf|
|
774
|
-
concat cf.text_field(:name)
|
775
|
-
end
|
776
|
-
end
|
777
|
-
end
|
778
|
-
|
779
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
780
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
781
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
|
782
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
|
783
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
|
784
|
-
'<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
|
785
|
-
'</form>'
|
786
|
-
|
787
|
-
assert_dom_equal expected, output_buffer
|
788
|
-
end
|
789
|
-
|
790
|
-
def test_nested_fields_for_with_existing_records_on_a_nested_attributes_collection_association_with_explicit_hidden_field_placement
|
791
|
-
@post.comments = Array.new(2) { |id| Comment.new(id + 1) }
|
792
|
-
|
793
|
-
form_for(:post, @post) do |f|
|
794
|
-
concat f.text_field(:title)
|
795
|
-
@post.comments.each do |comment|
|
796
|
-
f.fields_for(:comments, comment) do |cf|
|
797
|
-
concat cf.hidden_field(:id)
|
798
|
-
concat cf.text_field(:name)
|
799
|
-
end
|
800
|
-
end
|
801
|
-
end
|
802
|
-
|
803
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
804
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
805
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
|
806
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
|
807
|
-
'<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
|
808
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
|
809
|
-
'</form>'
|
810
|
-
|
811
|
-
assert_dom_equal expected, output_buffer
|
812
|
-
end
|
813
|
-
|
814
|
-
def test_nested_fields_for_with_new_records_on_a_nested_attributes_collection_association
|
815
|
-
@post.comments = [Comment.new, Comment.new]
|
816
|
-
|
817
|
-
form_for(:post, @post) do |f|
|
818
|
-
concat f.text_field(:title)
|
819
|
-
@post.comments.each do |comment|
|
820
|
-
f.fields_for(:comments, comment) do |cf|
|
821
|
-
concat cf.text_field(:name)
|
822
|
-
end
|
823
|
-
end
|
824
|
-
end
|
825
|
-
|
826
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
827
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
828
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="new comment" />' +
|
829
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
|
830
|
-
'</form>'
|
831
|
-
|
832
|
-
assert_dom_equal expected, output_buffer
|
833
|
-
end
|
834
|
-
|
835
|
-
def test_nested_fields_for_with_existing_and_new_records_on_a_nested_attributes_collection_association
|
836
|
-
@post.comments = [Comment.new(321), Comment.new]
|
837
|
-
|
838
|
-
form_for(:post, @post) do |f|
|
839
|
-
concat f.text_field(:title)
|
840
|
-
@post.comments.each do |comment|
|
841
|
-
f.fields_for(:comments, comment) do |cf|
|
842
|
-
concat cf.text_field(:name)
|
843
|
-
end
|
844
|
-
end
|
845
|
-
end
|
846
|
-
|
847
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
848
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
849
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
|
850
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
|
851
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
|
852
|
-
'</form>'
|
853
|
-
|
854
|
-
assert_dom_equal expected, output_buffer
|
855
|
-
end
|
856
|
-
|
857
|
-
def test_nested_fields_for_with_an_empty_supplied_attributes_collection
|
858
|
-
form_for(:post, @post) do |f|
|
859
|
-
concat f.text_field(:title)
|
860
|
-
f.fields_for(:comments, []) do |cf|
|
861
|
-
concat cf.text_field(:name)
|
862
|
-
end
|
863
|
-
end
|
864
|
-
|
865
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
866
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
867
|
-
'</form>'
|
868
|
-
|
869
|
-
assert_dom_equal expected, output_buffer
|
870
|
-
end
|
871
|
-
|
872
|
-
def test_nested_fields_for_with_existing_records_on_a_supplied_nested_attributes_collection
|
873
|
-
@post.comments = Array.new(2) { |id| Comment.new(id + 1) }
|
874
|
-
|
875
|
-
form_for(:post, @post) do |f|
|
876
|
-
concat f.text_field(:title)
|
877
|
-
f.fields_for(:comments, @post.comments) do |cf|
|
878
|
-
concat cf.text_field(:name)
|
879
|
-
end
|
880
|
-
end
|
881
|
-
|
882
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
883
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
884
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #1" />' +
|
885
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="1" />' +
|
886
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="comment #2" />' +
|
887
|
-
'<input id="post_comments_attributes_1_id" name="post[comments_attributes][1][id]" type="hidden" value="2" />' +
|
888
|
-
'</form>'
|
889
|
-
|
890
|
-
assert_dom_equal expected, output_buffer
|
891
|
-
end
|
892
|
-
|
893
|
-
def test_nested_fields_for_on_a_nested_attributes_collection_association_yields_only_builder
|
894
|
-
@post.comments = [Comment.new(321), Comment.new]
|
895
|
-
yielded_comments = []
|
896
|
-
|
897
|
-
form_for(:post, @post) do |f|
|
898
|
-
concat f.text_field(:title)
|
899
|
-
f.fields_for(:comments) do |cf|
|
900
|
-
concat cf.text_field(:name)
|
901
|
-
yielded_comments << cf.object
|
902
|
-
end
|
903
|
-
end
|
904
|
-
|
905
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
906
|
-
'<input name="post[title]" size="30" type="text" id="post_title" value="Hello World" />' +
|
907
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
|
908
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
|
909
|
-
'<input id="post_comments_attributes_1_name" name="post[comments_attributes][1][name]" size="30" type="text" value="new comment" />' +
|
910
|
-
'</form>'
|
911
|
-
|
912
|
-
assert_dom_equal expected, output_buffer
|
913
|
-
assert_equal yielded_comments, @post.comments
|
914
|
-
end
|
915
|
-
|
916
|
-
def test_nested_fields_for_with_child_index_option_override_on_a_nested_attributes_collection_association
|
917
|
-
@post.comments = []
|
918
|
-
|
919
|
-
form_for(:post, @post) do |f|
|
920
|
-
f.fields_for(:comments, Comment.new(321), :child_index => 'abc') do |cf|
|
921
|
-
concat cf.text_field(:name)
|
922
|
-
end
|
923
|
-
end
|
924
|
-
|
925
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
926
|
-
'<input id="post_comments_attributes_abc_name" name="post[comments_attributes][abc][name]" size="30" type="text" value="comment #321" />' +
|
927
|
-
'<input id="post_comments_attributes_abc_id" name="post[comments_attributes][abc][id]" type="hidden" value="321" />' +
|
928
|
-
'</form>'
|
929
|
-
|
930
|
-
assert_dom_equal expected, output_buffer
|
931
|
-
end
|
932
|
-
|
933
|
-
def test_nested_fields_uses_unique_indices_for_different_collection_associations
|
934
|
-
@post.comments = [Comment.new(321)]
|
935
|
-
@post.tags = [Tag.new(123), Tag.new(456)]
|
936
|
-
@post.comments[0].relevances = []
|
937
|
-
@post.tags[0].relevances = []
|
938
|
-
@post.tags[1].relevances = []
|
939
|
-
form_for(:post, @post) do |f|
|
940
|
-
f.fields_for(:comments, @post.comments[0]) do |cf|
|
941
|
-
concat cf.text_field(:name)
|
942
|
-
cf.fields_for(:relevances, CommentRelevance.new(314)) do |crf|
|
943
|
-
concat crf.text_field(:value)
|
944
|
-
end
|
945
|
-
end
|
946
|
-
f.fields_for(:tags, @post.tags[0]) do |tf|
|
947
|
-
concat tf.text_field(:value)
|
948
|
-
tf.fields_for(:relevances, TagRelevance.new(3141)) do |trf|
|
949
|
-
concat trf.text_field(:value)
|
950
|
-
end
|
951
|
-
end
|
952
|
-
f.fields_for('tags', @post.tags[1]) do |tf|
|
953
|
-
concat tf.text_field(:value)
|
954
|
-
tf.fields_for(:relevances, TagRelevance.new(31415)) do |trf|
|
955
|
-
concat trf.text_field(:value)
|
956
|
-
end
|
957
|
-
end
|
958
|
-
end
|
959
|
-
|
960
|
-
expected = '<form action="http://www.example.com" method="post">' +
|
961
|
-
'<input id="post_comments_attributes_0_name" name="post[comments_attributes][0][name]" size="30" type="text" value="comment #321" />' +
|
962
|
-
'<input id="post_comments_attributes_0_relevances_attributes_0_value" name="post[comments_attributes][0][relevances_attributes][0][value]" size="30" type="text" value="commentrelevance #314" />' +
|
963
|
-
'<input id="post_comments_attributes_0_relevances_attributes_0_id" name="post[comments_attributes][0][relevances_attributes][0][id]" type="hidden" value="314" />' +
|
964
|
-
'<input id="post_comments_attributes_0_id" name="post[comments_attributes][0][id]" type="hidden" value="321" />' +
|
965
|
-
'<input id="post_tags_attributes_0_value" name="post[tags_attributes][0][value]" size="30" type="text" value="tag #123" />' +
|
966
|
-
'<input id="post_tags_attributes_0_relevances_attributes_0_value" name="post[tags_attributes][0][relevances_attributes][0][value]" size="30" type="text" value="tagrelevance #3141" />' +
|
967
|
-
'<input id="post_tags_attributes_0_relevances_attributes_0_id" name="post[tags_attributes][0][relevances_attributes][0][id]" type="hidden" value="3141" />' +
|
968
|
-
'<input id="post_tags_attributes_0_id" name="post[tags_attributes][0][id]" type="hidden" value="123" />' +
|
969
|
-
'<input id="post_tags_attributes_1_value" name="post[tags_attributes][1][value]" size="30" type="text" value="tag #456" />' +
|
970
|
-
'<input id="post_tags_attributes_1_relevances_attributes_0_value" name="post[tags_attributes][1][relevances_attributes][0][value]" size="30" type="text" value="tagrelevance #31415" />' +
|
971
|
-
'<input id="post_tags_attributes_1_relevances_attributes_0_id" name="post[tags_attributes][1][relevances_attributes][0][id]" type="hidden" value="31415" />' +
|
972
|
-
'<input id="post_tags_attributes_1_id" name="post[tags_attributes][1][id]" type="hidden" value="456" />' +
|
973
|
-
'</form>'
|
974
|
-
|
975
|
-
assert_dom_equal expected, output_buffer
|
976
|
-
end
|
977
|
-
|
978
|
-
def test_fields_for
|
979
|
-
fields_for(:post, @post) do |f|
|
980
|
-
concat f.text_field(:title)
|
981
|
-
concat f.text_area(:body)
|
982
|
-
concat f.check_box(:secret)
|
983
|
-
end
|
984
|
-
|
985
|
-
expected =
|
986
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
987
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
988
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
989
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
990
|
-
|
991
|
-
assert_dom_equal expected, output_buffer
|
992
|
-
end
|
993
|
-
|
994
|
-
def test_fields_for_with_index
|
995
|
-
fields_for("post[]", @post) do |f|
|
996
|
-
concat f.text_field(:title)
|
997
|
-
concat f.text_area(:body)
|
998
|
-
concat f.check_box(:secret)
|
999
|
-
end
|
1000
|
-
|
1001
|
-
expected =
|
1002
|
-
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
1003
|
-
"<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1004
|
-
"<input name='post[123][secret]' type='hidden' value='0' />" +
|
1005
|
-
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />"
|
1006
|
-
|
1007
|
-
assert_dom_equal expected, output_buffer
|
1008
|
-
end
|
1009
|
-
|
1010
|
-
def test_fields_for_with_nil_index_option_override
|
1011
|
-
fields_for("post[]", @post, :index => nil) do |f|
|
1012
|
-
concat f.text_field(:title)
|
1013
|
-
concat f.text_area(:body)
|
1014
|
-
concat f.check_box(:secret)
|
1015
|
-
end
|
1016
|
-
|
1017
|
-
expected =
|
1018
|
-
"<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
|
1019
|
-
"<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1020
|
-
"<input name='post[][secret]' type='hidden' value='0' />" +
|
1021
|
-
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />"
|
1022
|
-
|
1023
|
-
assert_dom_equal expected, output_buffer
|
1024
|
-
end
|
1025
|
-
|
1026
|
-
def test_fields_for_with_index_option_override
|
1027
|
-
fields_for("post[]", @post, :index => "abc") do |f|
|
1028
|
-
concat f.text_field(:title)
|
1029
|
-
concat f.text_area(:body)
|
1030
|
-
concat f.check_box(:secret)
|
1031
|
-
end
|
1032
|
-
|
1033
|
-
expected =
|
1034
|
-
"<input name='post[abc][title]' size='30' type='text' id='post_abc_title' value='Hello World' />" +
|
1035
|
-
"<textarea name='post[abc][body]' id='post_abc_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1036
|
-
"<input name='post[abc][secret]' type='hidden' value='0' />" +
|
1037
|
-
"<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />"
|
1038
|
-
|
1039
|
-
assert_dom_equal expected, output_buffer
|
1040
|
-
end
|
1041
|
-
|
1042
|
-
def test_fields_for_without_object
|
1043
|
-
fields_for(:post) do |f|
|
1044
|
-
concat f.text_field(:title)
|
1045
|
-
concat f.text_area(:body)
|
1046
|
-
concat f.check_box(:secret)
|
1047
|
-
end
|
1048
|
-
|
1049
|
-
expected =
|
1050
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
1051
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1052
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
1053
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
1054
|
-
|
1055
|
-
assert_dom_equal expected, output_buffer
|
1056
|
-
end
|
1057
|
-
|
1058
|
-
def test_fields_for_with_only_object
|
1059
|
-
fields_for(@post) do |f|
|
1060
|
-
concat f.text_field(:title)
|
1061
|
-
concat f.text_area(:body)
|
1062
|
-
concat f.check_box(:secret)
|
1063
|
-
end
|
1064
|
-
|
1065
|
-
expected =
|
1066
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
1067
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1068
|
-
"<input name='post[secret]' type='hidden' value='0' />" +
|
1069
|
-
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
1070
|
-
|
1071
|
-
assert_dom_equal expected, output_buffer
|
1072
|
-
end
|
1073
|
-
|
1074
|
-
def test_fields_for_object_with_bracketed_name
|
1075
|
-
fields_for("author[post]", @post) do |f|
|
1076
|
-
concat f.label(:title)
|
1077
|
-
concat f.text_field(:title)
|
1078
|
-
end
|
1079
|
-
|
1080
|
-
assert_dom_equal "<label for=\"author_post_title\">Title</label>" +
|
1081
|
-
"<input name='author[post][title]' size='30' type='text' id='author_post_title' value='Hello World' />",
|
1082
|
-
output_buffer
|
1083
|
-
end
|
1084
|
-
|
1085
|
-
def test_fields_for_object_with_bracketed_name_and_index
|
1086
|
-
fields_for("author[post]", @post, :index => 1) do |f|
|
1087
|
-
concat f.label(:title)
|
1088
|
-
concat f.text_field(:title)
|
1089
|
-
end
|
1090
|
-
|
1091
|
-
assert_dom_equal "<label for=\"author_post_1_title\">Title</label>" +
|
1092
|
-
"<input name='author[post][1][title]' size='30' type='text' id='author_post_1_title' value='Hello World' />",
|
1093
|
-
output_buffer
|
1094
|
-
end
|
1095
|
-
|
1096
|
-
def test_form_builder_does_not_have_form_for_method
|
1097
|
-
assert ! ActionView::Helpers::FormBuilder.instance_methods.include?('form_for')
|
1098
|
-
end
|
1099
|
-
|
1100
|
-
def test_form_for_and_fields_for
|
1101
|
-
form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
|
1102
|
-
concat post_form.text_field(:title)
|
1103
|
-
concat post_form.text_area(:body)
|
1104
|
-
|
1105
|
-
fields_for(:parent_post, @post) do |parent_fields|
|
1106
|
-
concat parent_fields.check_box(:secret)
|
1107
|
-
end
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
expected =
|
1111
|
-
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
1112
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
1113
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1114
|
-
"<input name='parent_post[secret]' type='hidden' value='0' />" +
|
1115
|
-
"<input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' />" +
|
1116
|
-
"</form>"
|
1117
|
-
|
1118
|
-
assert_dom_equal expected, output_buffer
|
1119
|
-
end
|
1120
|
-
|
1121
|
-
def test_form_for_and_fields_for_with_object
|
1122
|
-
form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
|
1123
|
-
concat post_form.text_field(:title)
|
1124
|
-
concat post_form.text_area(:body)
|
1125
|
-
|
1126
|
-
post_form.fields_for(@comment) do |comment_fields|
|
1127
|
-
concat comment_fields.text_field(:name)
|
1128
|
-
end
|
1129
|
-
end
|
1130
|
-
|
1131
|
-
expected =
|
1132
|
-
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
1133
|
-
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
1134
|
-
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
1135
|
-
"<input name='post[comment][name]' type='text' id='post_comment_name' value='new comment' size='30' />" +
|
1136
|
-
"</form>"
|
1137
|
-
|
1138
|
-
assert_dom_equal expected, output_buffer
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
class LabelledFormBuilder < ActionView::Helpers::FormBuilder
|
1142
|
-
(field_helpers - %w(hidden_field)).each do |selector|
|
1143
|
-
src, line = <<-END_SRC, __LINE__ + 1
|
1144
|
-
def #{selector}(field, *args, &proc)
|
1145
|
-
("<label for='\#{field}'>\#{field.to_s.humanize}:</label> " + super + "<br/>").html_safe
|
1146
|
-
end
|
1147
|
-
END_SRC
|
1148
|
-
class_eval src, __FILE__, line
|
1149
|
-
end
|
1150
|
-
end
|
1151
|
-
|
1152
|
-
def test_form_for_with_labelled_builder
|
1153
|
-
form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1154
|
-
concat f.text_field(:title)
|
1155
|
-
concat f.text_area(:body)
|
1156
|
-
concat f.check_box(:secret)
|
1157
|
-
end
|
1158
|
-
|
1159
|
-
expected =
|
1160
|
-
"<form action='http://www.example.com' method='post'>" +
|
1161
|
-
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
1162
|
-
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
1163
|
-
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
1164
|
-
"</form>"
|
1165
|
-
|
1166
|
-
assert_dom_equal expected, output_buffer
|
1167
|
-
end
|
1168
|
-
|
1169
|
-
def test_default_form_builder
|
1170
|
-
old_default_form_builder, ActionView::Base.default_form_builder =
|
1171
|
-
ActionView::Base.default_form_builder, LabelledFormBuilder
|
1172
|
-
|
1173
|
-
form_for(:post, @post) do |f|
|
1174
|
-
concat f.text_field(:title)
|
1175
|
-
concat f.text_area(:body)
|
1176
|
-
concat f.check_box(:secret)
|
1177
|
-
end
|
1178
|
-
|
1179
|
-
expected =
|
1180
|
-
"<form action='http://www.example.com' method='post'>" +
|
1181
|
-
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
1182
|
-
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
1183
|
-
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
1184
|
-
"</form>"
|
1185
|
-
|
1186
|
-
assert_dom_equal expected, output_buffer
|
1187
|
-
ensure
|
1188
|
-
ActionView::Base.default_form_builder = old_default_form_builder
|
1189
|
-
end
|
1190
|
-
|
1191
|
-
def test_default_form_builder_with_active_record_helpers
|
1192
|
-
form_for(:post, @post) do |f|
|
1193
|
-
concat f.error_message_on('author_name')
|
1194
|
-
concat f.error_messages
|
1195
|
-
end
|
1196
|
-
|
1197
|
-
expected = %(<form action='http://www.example.com' method='post'>) +
|
1198
|
-
%(<div class='formError'>can't be empty</div>) +
|
1199
|
-
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
1200
|
-
%(</form>)
|
1201
|
-
|
1202
|
-
assert_dom_equal expected, output_buffer
|
1203
|
-
|
1204
|
-
end
|
1205
|
-
|
1206
|
-
def test_default_form_builder_no_instance_variable
|
1207
|
-
post = @post
|
1208
|
-
@post = nil
|
1209
|
-
|
1210
|
-
form_for(:post, post) do |f|
|
1211
|
-
concat f.error_message_on('author_name')
|
1212
|
-
concat f.error_messages
|
1213
|
-
end
|
1214
|
-
|
1215
|
-
expected = %(<form action='http://www.example.com' method='post'>) +
|
1216
|
-
%(<div class='formError'>can't be empty</div>) +
|
1217
|
-
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
1218
|
-
%(</form>)
|
1219
|
-
|
1220
|
-
assert_dom_equal expected, output_buffer
|
1221
|
-
|
1222
|
-
end
|
1223
|
-
|
1224
|
-
def test_default_form_builder_without_object
|
1225
|
-
|
1226
|
-
form_for(:post) do |f|
|
1227
|
-
concat f.error_message_on('author_name')
|
1228
|
-
concat f.error_messages
|
1229
|
-
end
|
1230
|
-
|
1231
|
-
expected = %(<form action='http://www.example.com' method='post'>) +
|
1232
|
-
%(<div class='formError'>can't be empty</div>) +
|
1233
|
-
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
1234
|
-
%(</form>)
|
1235
|
-
|
1236
|
-
assert_dom_equal expected, output_buffer
|
1237
|
-
|
1238
|
-
end
|
1239
|
-
|
1240
|
-
# Perhaps this test should be moved to prototype helper tests.
|
1241
|
-
def test_remote_form_for_with_labelled_builder
|
1242
|
-
self.extend ActionView::Helpers::PrototypeHelper
|
1243
|
-
|
1244
|
-
remote_form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1245
|
-
concat f.text_field(:title)
|
1246
|
-
concat f.text_area(:body)
|
1247
|
-
concat f.check_box(:secret)
|
1248
|
-
end
|
1249
|
-
|
1250
|
-
expected =
|
1251
|
-
%(<form action="http://www.example.com" onsubmit="new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" method="post">) +
|
1252
|
-
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
1253
|
-
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
1254
|
-
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
1255
|
-
"</form>"
|
1256
|
-
|
1257
|
-
assert_dom_equal expected, output_buffer
|
1258
|
-
end
|
1259
|
-
|
1260
|
-
def test_fields_for_with_labelled_builder
|
1261
|
-
fields_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1262
|
-
concat f.text_field(:title)
|
1263
|
-
concat f.text_area(:body)
|
1264
|
-
concat f.check_box(:secret)
|
1265
|
-
end
|
1266
|
-
|
1267
|
-
expected =
|
1268
|
-
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
1269
|
-
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
1270
|
-
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
|
1271
|
-
|
1272
|
-
assert_dom_equal expected, output_buffer
|
1273
|
-
end
|
1274
|
-
|
1275
|
-
def test_form_for_with_labelled_builder_with_nested_fields_for_without_options_hash
|
1276
|
-
klass = nil
|
1277
|
-
|
1278
|
-
form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1279
|
-
f.fields_for(:comments, Comment.new) do |nested_fields|
|
1280
|
-
klass = nested_fields.class
|
1281
|
-
''
|
1282
|
-
end
|
1283
|
-
end
|
1284
|
-
|
1285
|
-
assert_equal LabelledFormBuilder, klass
|
1286
|
-
end
|
1287
|
-
|
1288
|
-
def test_form_for_with_labelled_builder_with_nested_fields_for_with_options_hash
|
1289
|
-
klass = nil
|
1290
|
-
|
1291
|
-
form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1292
|
-
f.fields_for(:comments, Comment.new, :index => 'foo') do |nested_fields|
|
1293
|
-
klass = nested_fields.class
|
1294
|
-
''
|
1295
|
-
end
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
assert_equal LabelledFormBuilder, klass
|
1299
|
-
end
|
1300
|
-
|
1301
|
-
class LabelledFormBuilderSubclass < LabelledFormBuilder; end
|
1302
|
-
|
1303
|
-
def test_form_for_with_labelled_builder_with_nested_fields_for_with_custom_builder
|
1304
|
-
klass = nil
|
1305
|
-
|
1306
|
-
form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
1307
|
-
f.fields_for(:comments, Comment.new, :builder => LabelledFormBuilderSubclass) do |nested_fields|
|
1308
|
-
klass = nested_fields.class
|
1309
|
-
''
|
1310
|
-
end
|
1311
|
-
end
|
1312
|
-
|
1313
|
-
assert_equal LabelledFormBuilderSubclass, klass
|
1314
|
-
end
|
1315
|
-
|
1316
|
-
def test_form_for_with_html_options_adds_options_to_form_tag
|
1317
|
-
form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
|
1318
|
-
expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\"></form>"
|
1319
|
-
|
1320
|
-
assert_dom_equal expected, output_buffer
|
1321
|
-
end
|
1322
|
-
|
1323
|
-
def test_form_for_with_string_url_option
|
1324
|
-
form_for(:post, @post, :url => 'http://www.otherdomain.com') do |f| end
|
1325
|
-
|
1326
|
-
assert_equal '<form action="http://www.otherdomain.com" method="post"></form>', output_buffer
|
1327
|
-
end
|
1328
|
-
|
1329
|
-
def test_form_for_with_hash_url_option
|
1330
|
-
form_for(:post, @post, :url => {:controller => 'controller', :action => 'action'}) do |f| end
|
1331
|
-
|
1332
|
-
assert_equal 'controller', @controller.url_for_options[:controller]
|
1333
|
-
assert_equal 'action', @controller.url_for_options[:action]
|
1334
|
-
end
|
1335
|
-
|
1336
|
-
def test_form_for_with_record_url_option
|
1337
|
-
form_for(:post, @post, :url => @post) do |f| end
|
1338
|
-
|
1339
|
-
expected = "<form action=\"/posts/123\" method=\"post\"></form>"
|
1340
|
-
assert_equal expected, output_buffer
|
1341
|
-
end
|
1342
|
-
|
1343
|
-
def test_form_for_with_existing_object
|
1344
|
-
form_for(@post) do |f| end
|
1345
|
-
|
1346
|
-
expected = "<form action=\"/posts/123\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
|
1347
|
-
assert_equal expected, output_buffer
|
1348
|
-
end
|
1349
|
-
|
1350
|
-
def test_form_for_with_new_object
|
1351
|
-
post = Post.new
|
1352
|
-
post.new_record = true
|
1353
|
-
def post.id() nil end
|
1354
|
-
|
1355
|
-
form_for(post) do |f| end
|
1356
|
-
|
1357
|
-
expected = "<form action=\"/posts\" class=\"new_post\" id=\"new_post\" method=\"post\"></form>"
|
1358
|
-
assert_equal expected, output_buffer
|
1359
|
-
end
|
1360
|
-
|
1361
|
-
def test_form_for_with_existing_object_in_list
|
1362
|
-
@post.new_record = false
|
1363
|
-
@comment.save
|
1364
|
-
|
1365
|
-
form_for([@post, @comment]) {}
|
1366
|
-
|
1367
|
-
expected = %(<form action="#{comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0;display:inline"><input name="_method" type="hidden" value="put" /></div></form>)
|
1368
|
-
assert_dom_equal expected, output_buffer
|
1369
|
-
end
|
1370
|
-
|
1371
|
-
def test_form_for_with_new_object_in_list
|
1372
|
-
@post.new_record = false
|
1373
|
-
|
1374
|
-
form_for([@post, @comment]) {}
|
1375
|
-
|
1376
|
-
expected = %(<form action="#{comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
|
1377
|
-
assert_dom_equal expected, output_buffer
|
1378
|
-
end
|
1379
|
-
|
1380
|
-
def test_form_for_with_existing_object_and_namespace_in_list
|
1381
|
-
@post.new_record = false
|
1382
|
-
@comment.save
|
1383
|
-
|
1384
|
-
form_for([:admin, @post, @comment]) {}
|
1385
|
-
|
1386
|
-
expected = %(<form action="#{admin_comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0;display:inline"><input name="_method" type="hidden" value="put" /></div></form>)
|
1387
|
-
assert_dom_equal expected, output_buffer
|
1388
|
-
end
|
1389
|
-
|
1390
|
-
def test_form_for_with_new_object_and_namespace_in_list
|
1391
|
-
@post.new_record = false
|
1392
|
-
|
1393
|
-
form_for([:admin, @post, @comment]) {}
|
1394
|
-
|
1395
|
-
expected = %(<form action="#{admin_comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
|
1396
|
-
assert_dom_equal expected, output_buffer
|
1397
|
-
end
|
1398
|
-
|
1399
|
-
def test_form_for_with_existing_object_and_custom_url
|
1400
|
-
form_for(@post, :url => "/super_posts") do |f| end
|
1401
|
-
|
1402
|
-
expected = "<form action=\"/super_posts\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
|
1403
|
-
assert_equal expected, output_buffer
|
1404
|
-
end
|
1405
|
-
|
1406
|
-
def test_remote_form_for_with_html_options_adds_options_to_form_tag
|
1407
|
-
self.extend ActionView::Helpers::PrototypeHelper
|
1408
|
-
|
1409
|
-
remote_form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
|
1410
|
-
expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\" onsubmit=\"new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"></form>"
|
1411
|
-
|
1412
|
-
assert_dom_equal expected, output_buffer
|
1413
|
-
end
|
1414
|
-
|
1415
|
-
protected
|
1416
|
-
def comments_path(post)
|
1417
|
-
"/posts/#{post.id}/comments"
|
1418
|
-
end
|
1419
|
-
alias_method :post_comments_path, :comments_path
|
1420
|
-
|
1421
|
-
def comment_path(post, comment)
|
1422
|
-
"/posts/#{post.id}/comments/#{comment.id}"
|
1423
|
-
end
|
1424
|
-
alias_method :post_comment_path, :comment_path
|
1425
|
-
|
1426
|
-
def admin_comments_path(post)
|
1427
|
-
"/admin/posts/#{post.id}/comments"
|
1428
|
-
end
|
1429
|
-
alias_method :admin_post_comments_path, :admin_comments_path
|
1430
|
-
|
1431
|
-
def admin_comment_path(post, comment)
|
1432
|
-
"/admin/posts/#{post.id}/comments/#{comment.id}"
|
1433
|
-
end
|
1434
|
-
alias_method :admin_post_comment_path, :admin_comment_path
|
1435
|
-
|
1436
|
-
def posts_path
|
1437
|
-
"/posts"
|
1438
|
-
end
|
1439
|
-
|
1440
|
-
def post_path(post)
|
1441
|
-
"/posts/#{post.id}"
|
1442
|
-
end
|
1443
|
-
|
1444
|
-
def protect_against_forgery?
|
1445
|
-
false
|
1446
|
-
end
|
1447
|
-
end
|