erector 0.9.0.pre1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/.gemtest +0 -0
  2. data/Gemfile +1 -1
  3. data/README.txt +3 -2
  4. data/Rakefile +39 -18
  5. data/VERSION.yml +1 -2
  6. data/bin/erector +6 -0
  7. data/lib/erector/abstract_widget.rb +15 -14
  8. data/lib/erector/caching.rb +2 -2
  9. data/lib/erector/convenience.rb +33 -1
  10. data/lib/erector/erect/erect.rb +2 -1
  11. data/lib/erector/externals.rb +10 -10
  12. data/lib/erector/html_widget.rb +1 -81
  13. data/lib/erector/needs.rb +3 -2
  14. data/lib/erector/rails/railtie.rb +2 -0
  15. data/lib/erector/rails3.rb +4 -1
  16. data/lib/erector/sass.rb +13 -2
  17. data/lib/erector/widget.rb +1 -1
  18. data/lib/erector/xml_widget.rb +2 -2
  19. data/spec/erector/convenience_spec.rb +4 -4
  20. data/spec/erector/needs_spec.rb +32 -13
  21. data/spec/erector/widget_spec.rb +11 -0
  22. data/spec/erector/xml_widget_spec.rb +2 -3
  23. data/spec/rails2/rails_app/Gemfile +2 -1
  24. data/spec/rails2/rails_app/Gemfile.lock +34 -31
  25. data/spec/rails2/rails_app/app/helpers/rails_helpers_spec_helper.rb +3 -0
  26. data/spec/rails2/rails_app/app/helpers/test_helper.rb +3 -0
  27. data/spec/rails2/rails_app/log/test.log +916 -2176
  28. data/spec/rails2/rails_app/spec/render_spec.rb +1 -1
  29. data/spec/rails_root/Gemfile +2 -1
  30. data/spec/rails_root/Gemfile.lock +126 -0
  31. data/spec/rails_root/app/views/layouts/widget_as_layout.rb +8 -0
  32. data/spec/rails_root/app/views/test/render_with_widget_as_layout.rb +5 -0
  33. data/spec/rails_root/app/views/test/render_with_widget_as_layout_using_content_for.rb +8 -0
  34. data/spec/rails_root/log/test.log +1974 -2147
  35. data/spec/rails_root/spec/rails_helpers_spec.rb +8 -0
  36. data/spec/rails_root/spec/render_spec.rb +29 -1
  37. data/spec/web/article_spec.rb +234 -0
  38. metadata +107 -76
  39. data/spec/rails2/rails_app/vendor/plugins/rails_xss/MIT-LICENSE +0 -20
  40. data/spec/rails2/rails_app/vendor/plugins/rails_xss/README.markdown +0 -90
  41. data/spec/rails2/rails_app/vendor/plugins/rails_xss/Rakefile +0 -23
  42. data/spec/rails2/rails_app/vendor/plugins/rails_xss/init.rb +0 -7
  43. data/spec/rails2/rails_app/vendor/plugins/rails_xss/lib/rails_xss.rb +0 -3
  44. data/spec/rails2/rails_app/vendor/plugins/rails_xss/lib/rails_xss/action_view.rb +0 -87
  45. data/spec/rails2/rails_app/vendor/plugins/rails_xss/lib/rails_xss/erubis.rb +0 -33
  46. data/spec/rails2/rails_app/vendor/plugins/rails_xss/lib/rails_xss/string_ext.rb +0 -52
  47. data/spec/rails2/rails_app/vendor/plugins/rails_xss/lib/tasks/rails_xss_tasks.rake +0 -4
  48. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/active_record_helper_test.rb +0 -74
  49. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/asset_tag_helper_test.rb +0 -49
  50. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/caching_test.rb +0 -43
  51. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/date_helper_test.rb +0 -29
  52. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/deprecated_output_safety_test.rb +0 -112
  53. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/erb_util_test.rb +0 -36
  54. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/form_helper_test.rb +0 -1447
  55. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/form_tag_helper_test.rb +0 -354
  56. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/output_safety_test.rb +0 -115
  57. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/rails_xss_test.rb +0 -23
  58. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/test_helper.rb +0 -5
  59. data/spec/rails2/rails_app/vendor/plugins/rails_xss/test/text_helper_test.rb +0 -17
  60. data/spec/rails_root/log/development.log +0 -17
@@ -1,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- CACHE_DIR = 'test_cache'
4
- # Don't change '/../temp/' cavalierly or you might hose something you don't want hosed
5
- FILE_STORE_PATH = File.join(File.dirname(__FILE__), '/../temp/', CACHE_DIR)
6
- ActionController::Base.page_cache_directory = FILE_STORE_PATH
7
- ActionController::Base.cache_store = :file_store, FILE_STORE_PATH
8
-
9
- class FragmentCachingTestController < ActionController::Base
10
- def some_action; end;
11
- end
12
-
13
- class FragmentCachingTest < ActionController::TestCase
14
- def setup
15
- ActionController::Base.perform_caching = true
16
- @store = ActiveSupport::Cache::MemoryStore.new
17
- ActionController::Base.cache_store = @store
18
- @controller = FragmentCachingTestController.new
19
- @params = {:controller => 'posts', :action => 'index'}
20
- @request = ActionController::TestRequest.new
21
- @response = ActionController::TestResponse.new
22
- @controller.params = @params
23
- @controller.request = @request
24
- @controller.response = @response
25
- @controller.send(:initialize_current_url)
26
- @controller.send(:initialize_template_class, @response)
27
- @controller.send(:assign_shortcuts, @request, @response)
28
- end
29
-
30
- def test_html_safety
31
- assert_nil @store.read('views/name')
32
- content = 'value'.html_safe
33
- assert_equal content, @controller.write_fragment('name', content)
34
-
35
- cached = @store.read('views/name')
36
- assert_equal content, cached
37
- assert_equal String, cached.class
38
-
39
- html_safe = @controller.read_fragment('name')
40
- assert_equal content, html_safe
41
- assert html_safe.html_safe?
42
- end
43
- end
@@ -1,29 +0,0 @@
1
- require 'test_helper'
2
-
3
- class DateHelperTest < ActionView::TestCase
4
- silence_warnings do
5
- Post = Struct.new("Post", :id, :written_on, :updated_at)
6
- end
7
-
8
- def test_select_html_safety
9
- assert select_day(16).html_safe?
10
- assert select_month(8).html_safe?
11
- assert select_year(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
12
- assert select_minute(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
13
- assert select_second(Time.mktime(2003, 8, 16, 8, 4, 18)).html_safe?
14
-
15
- assert select_minute(8, :use_hidden => true).html_safe?
16
- assert select_month(8, :prompt => 'Choose month').html_safe?
17
-
18
- assert select_time(Time.mktime(2003, 8, 16, 8, 4, 18), {}, :class => 'selector').html_safe?
19
- assert select_date(Time.mktime(2003, 8, 16), :date_separator => " / ", :start_year => 2003, :end_year => 2005, :prefix => "date[first]").html_safe?
20
- end
21
-
22
- def test_object_select_html_safety
23
- @post = Post.new
24
- @post.written_on = Date.new(2004, 6, 15)
25
-
26
- assert date_select("post", "written_on", :default => Time.local(2006, 9, 19, 15, 16, 35), :include_blank => true).html_safe?
27
- assert time_select("post", "written_on", :ignore_date => true).html_safe?
28
- end
29
- end
@@ -1,112 +0,0 @@
1
- require 'test_helper'
2
-
3
- class DeprecatedOutputSafetyTest < ActiveSupport::TestCase
4
- def setup
5
- @string = "hello"
6
- end
7
-
8
- test "A string can be marked safe using html_safe!" do
9
- assert_deprecated do
10
- @string.html_safe!
11
- assert @string.html_safe?
12
- end
13
- end
14
-
15
- test "Marking a string safe returns the string using html_safe!" do
16
- assert_deprecated do
17
- assert_equal @string, @string.html_safe!
18
- end
19
- end
20
-
21
- test "Adding a safe string to another safe string returns a safe string using html_safe!" do
22
- assert_deprecated do
23
- @other_string = "other".html_safe!
24
- @string.html_safe!
25
- @combination = @other_string + @string
26
-
27
- assert_equal "otherhello", @combination
28
- assert @combination.html_safe?
29
- end
30
- end
31
-
32
- test "Adding an unsafe string to a safe string returns an unsafe string using html_safe!" do
33
- assert_deprecated do
34
- @other_string = "other".html_safe!
35
- @combination = @other_string + "<foo>"
36
- @other_combination = @string + "<foo>"
37
-
38
- assert_equal "other<foo>", @combination
39
- assert_equal "hello<foo>", @other_combination
40
-
41
- assert !@combination.html_safe?
42
- assert !@other_combination.html_safe?
43
- end
44
- end
45
-
46
- test "Concatting safe onto unsafe yields unsafe using html_safe!" do
47
- assert_deprecated do
48
- @other_string = "other"
49
- @string.html_safe!
50
-
51
- @other_string.concat(@string)
52
- assert !@other_string.html_safe?
53
- end
54
- end
55
-
56
- test "Concatting unsafe onto safe yields unsafe using html_safe!" do
57
- assert_deprecated do
58
- @other_string = "other".html_safe!
59
- string = @other_string.concat("<foo>")
60
- assert_equal "other<foo>", string
61
- assert !string.html_safe?
62
- end
63
- end
64
-
65
- test "Concatting safe onto safe yields safe using html_safe!" do
66
- assert_deprecated do
67
- @other_string = "other".html_safe!
68
- @string.html_safe!
69
-
70
- @other_string.concat(@string)
71
- assert @other_string.html_safe?
72
- end
73
- end
74
-
75
- test "Concatting safe onto unsafe with << yields unsafe using html_safe!" do
76
- assert_deprecated do
77
- @other_string = "other"
78
- @string.html_safe!
79
-
80
- @other_string << @string
81
- assert !@other_string.html_safe?
82
- end
83
- end
84
-
85
- test "Concatting unsafe onto safe with << yields unsafe using html_safe!" do
86
- assert_deprecated do
87
- @other_string = "other".html_safe!
88
- string = @other_string << "<foo>"
89
- assert_equal "other<foo>", string
90
- assert !string.html_safe?
91
- end
92
- end
93
-
94
- test "Concatting safe onto safe with << yields safe using html_safe!" do
95
- assert_deprecated do
96
- @other_string = "other".html_safe!
97
- @string.html_safe!
98
-
99
- @other_string << @string
100
- assert @other_string.html_safe?
101
- end
102
- end
103
-
104
- test "Concatting a fixnum to safe always yields safe using html_safe!" do
105
- assert_deprecated do
106
- @string.html_safe!
107
- @string.concat(13)
108
- assert_equal "hello".concat(13), @string
109
- assert @string.html_safe?
110
- end
111
- end
112
- end
@@ -1,36 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ErbUtilTest < Test::Unit::TestCase
4
- include ERB::Util
5
-
6
- ERB::Util::HTML_ESCAPE.each do |given, expected|
7
- define_method "test_html_escape_#{expected.gsub(/\W/, '')}" do
8
- assert_equal expected, html_escape(given)
9
- end
10
-
11
- unless given == '"'
12
- define_method "test_json_escape_#{expected.gsub(/\W/, '')}" do
13
- assert_equal ERB::Util::JSON_ESCAPE[given], json_escape(given)
14
- end
15
- end
16
- end
17
-
18
- def test_html_escape_is_html_safe
19
- escaped = h("<p>")
20
- assert_equal "&lt;p&gt;", escaped
21
- assert escaped.html_safe?
22
- end
23
-
24
- def test_html_escape_passes_html_escpe_unmodified
25
- escaped = h("<p>".html_safe)
26
- assert_equal "<p>", escaped
27
- assert escaped.html_safe?
28
- end
29
-
30
- def test_rest_in_ascii
31
- (0..127).to_a.map {|int| int.chr }.each do |chr|
32
- next if %w(& " < >).include?(chr)
33
- assert_equal chr, html_escape(chr)
34
- end
35
- end
36
- end
@@ -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="&lt;b&gt;Hello World&lt;/b&gt;" />', text_field("post", "title")
223
- )
224
- end
225
-
226
- def test_text_field_with_html_entities
227
- @post.title = "The HTML Entity for & is &amp;"
228
- assert_dom_equal(
229
- '<input id="post_title" name="post[title]" size="30" type="text" value="The HTML Entity for &amp; is &amp;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="&lt;b&gt;Hello World&lt;/b&gt;" />',
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 &lt;i&gt;the&lt;/i&gt; 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 &amp;"
386
- assert_dom_equal(
387
- '<textarea cols="40" id="post_body" name="post[body]" rows="20">The HTML Entity for &amp; is &amp;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