Froze rails gems
[depot.git] / vendor / rails / actionpack / test / template / form_options_helper_test.rb
1 require 'abstract_unit'
2
3 TZInfo::Timezone.cattr_reader :loaded_zones
4
5 uses_mocha "FormOptionsHelperTest" do
6 class FormOptionsHelperTest < ActionView::TestCase
7 tests ActionView::Helpers::FormOptionsHelper
8
9 silence_warnings do
10 Post = Struct.new('Post', :title, :author_name, :body, :secret, :written_on, :category, :origin)
11 Continent = Struct.new('Continent', :continent_name, :countries)
12 Country = Struct.new('Country', :country_id, :country_name)
13 Firm = Struct.new('Firm', :time_zone)
14 Album = Struct.new('Album', :id, :title, :genre)
15 end
16
17 def setup
18 @fake_timezones = %w(A B C D E).inject([]) do |zones, id|
19 tz = TZInfo::Timezone.loaded_zones[id] = stub(:name => id, :to_s => id)
20 ActiveSupport::TimeZone.stubs(:[]).with(id).returns(tz)
21 zones << tz
22 end
23 ActiveSupport::TimeZone.stubs(:all).returns(@fake_timezones)
24 end
25
26 def test_collection_options
27 @posts = [
28 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
29 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
30 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
31 ]
32
33 assert_dom_equal(
34 "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
35 options_from_collection_for_select(@posts, "author_name", "title")
36 )
37 end
38
39
40 def test_collection_options_with_preselected_value
41 @posts = [
42 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
43 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
44 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
45 ]
46
47 assert_dom_equal(
48 "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\">Cabe went home</option>",
49 options_from_collection_for_select(@posts, "author_name", "title", "Babe")
50 )
51 end
52
53 def test_collection_options_with_preselected_value_array
54 @posts = [
55 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
56 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
57 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
58 ]
59
60 assert_dom_equal(
61 "<option value=\"&lt;Abe&gt;\">&lt;Abe&gt; went home</option>\n<option value=\"Babe\" selected=\"selected\">Babe went home</option>\n<option value=\"Cabe\" selected=\"selected\">Cabe went home</option>",
62 options_from_collection_for_select(@posts, "author_name", "title", [ "Babe", "Cabe" ])
63 )
64 end
65
66 def test_array_options_for_select
67 assert_dom_equal(
68 "<option value=\"&lt;Denmark&gt;\">&lt;Denmark&gt;</option>\n<option value=\"USA\">USA</option>\n<option value=\"Sweden\">Sweden</option>",
69 options_for_select([ "<Denmark>", "USA", "Sweden" ])
70 )
71 end
72
73 def test_array_options_for_select_with_selection
74 assert_dom_equal(
75 "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" selected=\"selected\">&lt;USA&gt;</option>\n<option value=\"Sweden\">Sweden</option>",
76 options_for_select([ "Denmark", "<USA>", "Sweden" ], "<USA>")
77 )
78 end
79
80 def test_array_options_for_select_with_selection_array
81 assert_dom_equal(
82 "<option value=\"Denmark\">Denmark</option>\n<option value=\"&lt;USA&gt;\" selected=\"selected\">&lt;USA&gt;</option>\n<option value=\"Sweden\" selected=\"selected\">Sweden</option>",
83 options_for_select([ "Denmark", "<USA>", "Sweden" ], [ "<USA>", "Sweden" ])
84 )
85 end
86
87 def test_array_options_for_string_include_in_other_string_bug_fix
88 assert_dom_equal(
89 "<option value=\"ruby\">ruby</option>\n<option value=\"rubyonrails\" selected=\"selected\">rubyonrails</option>",
90 options_for_select([ "ruby", "rubyonrails" ], "rubyonrails")
91 )
92 assert_dom_equal(
93 "<option value=\"ruby\" selected=\"selected\">ruby</option>\n<option value=\"rubyonrails\">rubyonrails</option>",
94 options_for_select([ "ruby", "rubyonrails" ], "ruby")
95 )
96 assert_dom_equal(
97 %(<option value="ruby" selected="selected">ruby</option>\n<option value="rubyonrails">rubyonrails</option>\n<option value=""></option>),
98 options_for_select([ "ruby", "rubyonrails", nil ], "ruby")
99 )
100 end
101
102 def test_hash_options_for_select
103 assert_dom_equal(
104 "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\">$</option>",
105 options_for_select("$" => "Dollar", "<DKR>" => "<Kroner>").split("\n").sort.join("\n")
106 )
107 assert_dom_equal(
108 "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
109 options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, "Dollar").split("\n").sort.join("\n")
110 )
111 assert_dom_equal(
112 "<option value=\"&lt;Kroner&gt;\" selected=\"selected\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
113 options_for_select({ "$" => "Dollar", "<DKR>" => "<Kroner>" }, [ "Dollar", "<Kroner>" ]).split("\n").sort.join("\n")
114 )
115 end
116
117 def test_ducktyped_options_for_select
118 quack = Struct.new(:first, :last)
119 assert_dom_equal(
120 "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\">$</option>",
121 options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")])
122 )
123 assert_dom_equal(
124 "<option value=\"&lt;Kroner&gt;\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
125 options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], "Dollar")
126 )
127 assert_dom_equal(
128 "<option value=\"&lt;Kroner&gt;\" selected=\"selected\">&lt;DKR&gt;</option>\n<option value=\"Dollar\" selected=\"selected\">$</option>",
129 options_for_select([quack.new("<DKR>", "<Kroner>"), quack.new("$", "Dollar")], ["Dollar", "<Kroner>"])
130 )
131 end
132
133 def test_option_groups_from_collection_for_select
134 @continents = [
135 Continent.new("<Africa>", [Country.new("<sa>", "<South Africa>"), Country.new("so", "Somalia")] ),
136 Continent.new("Europe", [Country.new("dk", "Denmark"), Country.new("ie", "Ireland")] )
137 ]
138
139 assert_dom_equal(
140 "<optgroup label=\"&lt;Africa&gt;\"><option value=\"&lt;sa&gt;\">&lt;South Africa&gt;</option>\n<option value=\"so\">Somalia</option></optgroup><optgroup label=\"Europe\"><option value=\"dk\" selected=\"selected\">Denmark</option>\n<option value=\"ie\">Ireland</option></optgroup>",
141 option_groups_from_collection_for_select(@continents, "countries", "continent_name", "country_id", "country_name", "dk")
142 )
143 end
144
145 def test_time_zone_options_no_parms
146 opts = time_zone_options_for_select
147 assert_dom_equal "<option value=\"A\">A</option>\n" +
148 "<option value=\"B\">B</option>\n" +
149 "<option value=\"C\">C</option>\n" +
150 "<option value=\"D\">D</option>\n" +
151 "<option value=\"E\">E</option>",
152 opts
153 end
154
155 def test_time_zone_options_with_selected
156 opts = time_zone_options_for_select( "D" )
157 assert_dom_equal "<option value=\"A\">A</option>\n" +
158 "<option value=\"B\">B</option>\n" +
159 "<option value=\"C\">C</option>\n" +
160 "<option value=\"D\" selected=\"selected\">D</option>\n" +
161 "<option value=\"E\">E</option>",
162 opts
163 end
164
165 def test_time_zone_options_with_unknown_selected
166 opts = time_zone_options_for_select( "K" )
167 assert_dom_equal "<option value=\"A\">A</option>\n" +
168 "<option value=\"B\">B</option>\n" +
169 "<option value=\"C\">C</option>\n" +
170 "<option value=\"D\">D</option>\n" +
171 "<option value=\"E\">E</option>",
172 opts
173 end
174
175 def test_time_zone_options_with_priority_zones
176 zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
177 opts = time_zone_options_for_select( nil, zones )
178 assert_dom_equal "<option value=\"B\">B</option>\n" +
179 "<option value=\"E\">E</option>" +
180 "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
181 "<option value=\"A\">A</option>\n" +
182 "<option value=\"C\">C</option>\n" +
183 "<option value=\"D\">D</option>",
184 opts
185 end
186
187 def test_time_zone_options_with_selected_priority_zones
188 zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
189 opts = time_zone_options_for_select( "E", zones )
190 assert_dom_equal "<option value=\"B\">B</option>\n" +
191 "<option value=\"E\" selected=\"selected\">E</option>" +
192 "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
193 "<option value=\"A\">A</option>\n" +
194 "<option value=\"C\">C</option>\n" +
195 "<option value=\"D\">D</option>",
196 opts
197 end
198
199 def test_time_zone_options_with_unselected_priority_zones
200 zones = [ ActiveSupport::TimeZone.new( "B" ), ActiveSupport::TimeZone.new( "E" ) ]
201 opts = time_zone_options_for_select( "C", zones )
202 assert_dom_equal "<option value=\"B\">B</option>\n" +
203 "<option value=\"E\">E</option>" +
204 "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
205 "<option value=\"A\">A</option>\n" +
206 "<option value=\"C\" selected=\"selected\">C</option>\n" +
207 "<option value=\"D\">D</option>",
208 opts
209 end
210
211 def test_select
212 @post = Post.new
213 @post.category = "<mus>"
214 assert_dom_equal(
215 "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
216 select("post", "category", %w( abe <mus> hest))
217 )
218 end
219
220 def test_select_under_fields_for
221 @post = Post.new
222 @post.category = "<mus>"
223
224 fields_for :post, @post do |f|
225 concat f.select(:category, %w( abe <mus> hest))
226 end
227
228 assert_dom_equal(
229 "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
230 output_buffer
231 )
232 end
233
234 def test_select_under_fields_for_with_index
235 @post = Post.new
236 @post.category = "<mus>"
237
238 fields_for :post, @post, :index => 108 do |f|
239 concat f.select(:category, %w( abe <mus> hest))
240 end
241
242 assert_dom_equal(
243 "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
244 output_buffer
245 )
246 end
247
248 def test_select_under_fields_for_with_auto_index
249 @post = Post.new
250 @post.category = "<mus>"
251 def @post.to_param; 108; end
252
253 fields_for "post[]", @post do |f|
254 concat f.select(:category, %w( abe <mus> hest))
255 end
256
257 assert_dom_equal(
258 "<select id=\"post_108_category\" name=\"post[108][category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
259 output_buffer
260 )
261 end
262
263 def test_select_with_blank
264 @post = Post.new
265 @post.category = "<mus>"
266 assert_dom_equal(
267 "<select id=\"post_category\" name=\"post[category]\"><option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
268 select("post", "category", %w( abe <mus> hest), :include_blank => true)
269 )
270 end
271
272 def test_select_with_blank_as_string
273 @post = Post.new
274 @post.category = "<mus>"
275 assert_dom_equal(
276 "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">None</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
277 select("post", "category", %w( abe <mus> hest), :include_blank => 'None')
278 )
279 end
280
281 def test_select_with_default_prompt
282 @post = Post.new
283 @post.category = ""
284 assert_dom_equal(
285 "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
286 select("post", "category", %w( abe <mus> hest), :prompt => true)
287 )
288 end
289
290 def test_select_no_prompt_when_select_has_value
291 @post = Post.new
292 @post.category = "<mus>"
293 assert_dom_equal(
294 "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\" selected=\"selected\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
295 select("post", "category", %w( abe <mus> hest), :prompt => true)
296 )
297 end
298
299 def test_select_with_given_prompt
300 @post = Post.new
301 @post.category = ""
302 assert_dom_equal(
303 "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
304 select("post", "category", %w( abe <mus> hest), :prompt => 'The prompt')
305 )
306 end
307
308 def test_select_with_prompt_and_blank
309 @post = Post.new
310 @post.category = ""
311 assert_dom_equal(
312 "<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
313 select("post", "category", %w( abe <mus> hest), :prompt => true, :include_blank => true)
314 )
315 end
316
317 def test_select_with_selected_value
318 @post = Post.new
319 @post.category = "<mus>"
320 assert_dom_equal(
321 "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\" selected=\"selected\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
322 select("post", "category", %w( abe <mus> hest ), :selected => 'abe')
323 )
324 end
325
326 def test_select_with_index_option
327 @album = Album.new
328 @album.id = 1
329
330 expected = "<select id=\"album__genre\" name=\"album[][genre]\"><option value=\"rap\">rap</option>\n<option value=\"rock\">rock</option>\n<option value=\"country\">country</option></select>"
331
332 assert_dom_equal(
333 expected,
334 select("album[]", "genre", %w[rap rock country], {}, { :index => nil })
335 )
336 end
337
338 def test_select_with_selected_nil
339 @post = Post.new
340 @post.category = "<mus>"
341 assert_dom_equal(
342 "<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"&lt;mus&gt;\">&lt;mus&gt;</option>\n<option value=\"hest\">hest</option></select>",
343 select("post", "category", %w( abe <mus> hest ), :selected => nil)
344 )
345 end
346
347 def test_collection_select
348 @posts = [
349 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
350 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
351 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
352 ]
353
354 @post = Post.new
355 @post.author_name = "Babe"
356
357 assert_dom_equal(
358 "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
359 collection_select("post", "author_name", @posts, "author_name", "author_name")
360 )
361 end
362
363 def test_collection_select_under_fields_for
364 @posts = [
365 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
366 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
367 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
368 ]
369
370 @post = Post.new
371 @post.author_name = "Babe"
372
373 fields_for :post, @post do |f|
374 concat f.collection_select(:author_name, @posts, :author_name, :author_name)
375 end
376
377 assert_dom_equal(
378 "<select id=\"post_author_name\" name=\"post[author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
379 output_buffer
380 )
381 end
382
383 def test_collection_select_under_fields_for_with_index
384 @posts = [
385 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
386 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
387 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
388 ]
389
390 @post = Post.new
391 @post.author_name = "Babe"
392
393 fields_for :post, @post, :index => 815 do |f|
394 concat f.collection_select(:author_name, @posts, :author_name, :author_name)
395 end
396
397 assert_dom_equal(
398 "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
399 output_buffer
400 )
401 end
402
403 def test_collection_select_under_fields_for_with_auto_index
404 @posts = [
405 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
406 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
407 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
408 ]
409
410 @post = Post.new
411 @post.author_name = "Babe"
412 def @post.to_param; 815; end
413
414 fields_for "post[]", @post do |f|
415 concat f.collection_select(:author_name, @posts, :author_name, :author_name)
416 end
417
418 assert_dom_equal(
419 "<select id=\"post_815_author_name\" name=\"post[815][author_name]\"><option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
420 output_buffer
421 )
422 end
423
424 def test_collection_select_with_blank_and_style
425 @posts = [
426 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
427 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
428 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
429 ]
430
431 @post = Post.new
432 @post.author_name = "Babe"
433
434 assert_dom_equal(
435 "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\"></option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
436 collection_select("post", "author_name", @posts, "author_name", "author_name", { :include_blank => true }, "style" => "width: 200px")
437 )
438 end
439
440 def test_collection_select_with_blank_as_string_and_style
441 @posts = [
442 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
443 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
444 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
445 ]
446
447 @post = Post.new
448 @post.author_name = "Babe"
449
450 assert_dom_equal(
451 "<select id=\"post_author_name\" name=\"post[author_name]\" style=\"width: 200px\"><option value=\"\">No Selection</option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>",
452 collection_select("post", "author_name", @posts, "author_name", "author_name", { :include_blank => 'No Selection' }, "style" => "width: 200px")
453 )
454 end
455
456 def test_collection_select_with_multiple_option_appends_array_brackets
457 @posts = [
458 Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
459 Post.new("Babe went home", "Babe", "To a little house", "shh!"),
460 Post.new("Cabe went home", "Cabe", "To a little house", "shh!")
461 ]
462
463 @post = Post.new
464 @post.author_name = "Babe"
465
466 expected = "<select id=\"post_author_name\" name=\"post[author_name][]\" multiple=\"multiple\"><option value=\"\"></option>\n<option value=\"&lt;Abe&gt;\">&lt;Abe&gt;</option>\n<option value=\"Babe\" selected=\"selected\">Babe</option>\n<option value=\"Cabe\">Cabe</option></select>"
467
468 # Should suffix default name with [].
469 assert_dom_equal expected, collection_select("post", "author_name", @posts, "author_name", "author_name", { :include_blank => true }, :multiple => true)
470
471 # Shouldn't suffix custom name with [].
472 assert_dom_equal expected, collection_select("post", "author_name", @posts, "author_name", "author_name", { :include_blank => true, :name => 'post[author_name][]' }, :multiple => true)
473 end
474
475 def test_time_zone_select
476 @firm = Firm.new("D")
477 html = time_zone_select( "firm", "time_zone" )
478 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
479 "<option value=\"A\">A</option>\n" +
480 "<option value=\"B\">B</option>\n" +
481 "<option value=\"C\">C</option>\n" +
482 "<option value=\"D\" selected=\"selected\">D</option>\n" +
483 "<option value=\"E\">E</option>" +
484 "</select>",
485 html
486 end
487
488 def test_time_zone_select_under_fields_for
489 @firm = Firm.new("D")
490
491 fields_for :firm, @firm do |f|
492 concat f.time_zone_select(:time_zone)
493 end
494
495 assert_dom_equal(
496 "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
497 "<option value=\"A\">A</option>\n" +
498 "<option value=\"B\">B</option>\n" +
499 "<option value=\"C\">C</option>\n" +
500 "<option value=\"D\" selected=\"selected\">D</option>\n" +
501 "<option value=\"E\">E</option>" +
502 "</select>",
503 output_buffer
504 )
505 end
506
507 def test_time_zone_select_under_fields_for_with_index
508 @firm = Firm.new("D")
509
510 fields_for :firm, @firm, :index => 305 do |f|
511 concat f.time_zone_select(:time_zone)
512 end
513
514 assert_dom_equal(
515 "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" +
516 "<option value=\"A\">A</option>\n" +
517 "<option value=\"B\">B</option>\n" +
518 "<option value=\"C\">C</option>\n" +
519 "<option value=\"D\" selected=\"selected\">D</option>\n" +
520 "<option value=\"E\">E</option>" +
521 "</select>",
522 output_buffer
523 )
524 end
525
526 def test_time_zone_select_under_fields_for_with_auto_index
527 @firm = Firm.new("D")
528 def @firm.to_param; 305; end
529
530 fields_for "firm[]", @firm do |f|
531 concat f.time_zone_select(:time_zone)
532 end
533
534 assert_dom_equal(
535 "<select id=\"firm_305_time_zone\" name=\"firm[305][time_zone]\">" +
536 "<option value=\"A\">A</option>\n" +
537 "<option value=\"B\">B</option>\n" +
538 "<option value=\"C\">C</option>\n" +
539 "<option value=\"D\" selected=\"selected\">D</option>\n" +
540 "<option value=\"E\">E</option>" +
541 "</select>",
542 output_buffer
543 )
544 end
545
546 def test_time_zone_select_with_blank
547 @firm = Firm.new("D")
548 html = time_zone_select("firm", "time_zone", nil, :include_blank => true)
549 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
550 "<option value=\"\"></option>\n" +
551 "<option value=\"A\">A</option>\n" +
552 "<option value=\"B\">B</option>\n" +
553 "<option value=\"C\">C</option>\n" +
554 "<option value=\"D\" selected=\"selected\">D</option>\n" +
555 "<option value=\"E\">E</option>" +
556 "</select>",
557 html
558 end
559
560 def test_time_zone_select_with_blank_as_string
561 @firm = Firm.new("D")
562 html = time_zone_select("firm", "time_zone", nil, :include_blank => 'No Zone')
563 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
564 "<option value=\"\">No Zone</option>\n" +
565 "<option value=\"A\">A</option>\n" +
566 "<option value=\"B\">B</option>\n" +
567 "<option value=\"C\">C</option>\n" +
568 "<option value=\"D\" selected=\"selected\">D</option>\n" +
569 "<option value=\"E\">E</option>" +
570 "</select>",
571 html
572 end
573
574 def test_time_zone_select_with_style
575 @firm = Firm.new("D")
576 html = time_zone_select("firm", "time_zone", nil, {},
577 "style" => "color: red")
578 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
579 "<option value=\"A\">A</option>\n" +
580 "<option value=\"B\">B</option>\n" +
581 "<option value=\"C\">C</option>\n" +
582 "<option value=\"D\" selected=\"selected\">D</option>\n" +
583 "<option value=\"E\">E</option>" +
584 "</select>",
585 html
586 assert_dom_equal html, time_zone_select("firm", "time_zone", nil, {},
587 :style => "color: red")
588 end
589
590 def test_time_zone_select_with_blank_and_style
591 @firm = Firm.new("D")
592 html = time_zone_select("firm", "time_zone", nil,
593 { :include_blank => true }, "style" => "color: red")
594 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
595 "<option value=\"\"></option>\n" +
596 "<option value=\"A\">A</option>\n" +
597 "<option value=\"B\">B</option>\n" +
598 "<option value=\"C\">C</option>\n" +
599 "<option value=\"D\" selected=\"selected\">D</option>\n" +
600 "<option value=\"E\">E</option>" +
601 "</select>",
602 html
603 assert_dom_equal html, time_zone_select("firm", "time_zone", nil,
604 { :include_blank => true }, :style => "color: red")
605 end
606
607 def test_time_zone_select_with_blank_as_string_and_style
608 @firm = Firm.new("D")
609 html = time_zone_select("firm", "time_zone", nil,
610 { :include_blank => 'No Zone' }, "style" => "color: red")
611 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\" style=\"color: red\">" +
612 "<option value=\"\">No Zone</option>\n" +
613 "<option value=\"A\">A</option>\n" +
614 "<option value=\"B\">B</option>\n" +
615 "<option value=\"C\">C</option>\n" +
616 "<option value=\"D\" selected=\"selected\">D</option>\n" +
617 "<option value=\"E\">E</option>" +
618 "</select>",
619 html
620 assert_dom_equal html, time_zone_select("firm", "time_zone", nil,
621 { :include_blank => 'No Zone' }, :style => "color: red")
622 end
623
624 def test_time_zone_select_with_priority_zones
625 @firm = Firm.new("D")
626 zones = [ ActiveSupport::TimeZone.new("A"), ActiveSupport::TimeZone.new("D") ]
627 html = time_zone_select("firm", "time_zone", zones )
628 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
629 "<option value=\"A\">A</option>\n" +
630 "<option value=\"D\" selected=\"selected\">D</option>" +
631 "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
632 "<option value=\"B\">B</option>\n" +
633 "<option value=\"C\">C</option>\n" +
634 "<option value=\"E\">E</option>" +
635 "</select>",
636 html
637 end
638
639 def test_time_zone_select_with_priority_zones_as_regexp
640 @firm = Firm.new("D")
641 @fake_timezones.each_with_index do |tz, i|
642 tz.stubs(:=~).returns(i.zero? || i == 3)
643 end
644
645 html = time_zone_select("firm", "time_zone", /A|D/)
646 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
647 "<option value=\"A\">A</option>\n" +
648 "<option value=\"D\" selected=\"selected\">D</option>" +
649 "<option value=\"\" disabled=\"disabled\">-------------</option>\n" +
650 "<option value=\"B\">B</option>\n" +
651 "<option value=\"C\">C</option>\n" +
652 "<option value=\"E\">E</option>" +
653 "</select>",
654 html
655 end
656
657 def test_time_zone_select_with_default_time_zone_and_nil_value
658 @firm = Firm.new()
659 @firm.time_zone = nil
660 html = time_zone_select( "firm", "time_zone", nil, :default => 'B' )
661 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
662 "<option value=\"A\">A</option>\n" +
663 "<option value=\"B\" selected=\"selected\">B</option>\n" +
664 "<option value=\"C\">C</option>\n" +
665 "<option value=\"D\">D</option>\n" +
666 "<option value=\"E\">E</option>" +
667 "</select>",
668 html
669 end
670
671 def test_time_zone_select_with_default_time_zone_and_value
672 @firm = Firm.new('D')
673 html = time_zone_select( "firm", "time_zone", nil, :default => 'B' )
674 assert_dom_equal "<select id=\"firm_time_zone\" name=\"firm[time_zone]\">" +
675 "<option value=\"A\">A</option>\n" +
676 "<option value=\"B\">B</option>\n" +
677 "<option value=\"C\">C</option>\n" +
678 "<option value=\"D\" selected=\"selected\">D</option>\n" +
679 "<option value=\"E\">E</option>" +
680 "</select>",
681 html
682 end
683
684 end
685 end