speedo-formstrap 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Gemfile +0 -1
  2. data/README.md +4 -4
  3. data/Rakefile +1 -1
  4. data/VERSION +1 -1
  5. data/lib/speedo-formstrap/form_builder.rb +7 -5
  6. data/lib/speedo-formstrap/helpers.rb +3 -1
  7. data/lib/speedo-formstrap/helpers/buttons_helper.rb +13 -9
  8. data/lib/speedo-formstrap/helpers/fieldset_wrapper.rb +11 -6
  9. data/lib/speedo-formstrap/helpers/inputs_helper.rb +4 -4
  10. data/lib/speedo-formstrap/inputs/base.rb +2 -1
  11. data/lib/speedo-formstrap/inputs/base/choices.rb +12 -23
  12. data/lib/speedo-formstrap/inputs/base/labelling.rb +16 -6
  13. data/lib/speedo-formstrap/inputs/base/timeish.rb +5 -12
  14. data/lib/speedo-formstrap/inputs/base/wrapping.rb +32 -14
  15. data/lib/speedo-formstrap/inputs/number_input.rb +2 -2
  16. data/lib/speedo-formstrap/inputs/radio_input.rb +13 -12
  17. data/lib/speedo-formstrap/inputs/range_input.rb +2 -2
  18. data/spec/builder/semantic_fields_for_spec.rb +16 -16
  19. data/spec/helpers/buttons_helper_spec.rb +56 -46
  20. data/spec/helpers/input_helper_spec.rb +209 -209
  21. data/spec/helpers/inputs_helper_spec.rb +117 -103
  22. data/spec/inputs/boolean_input_spec.rb +74 -46
  23. data/spec/inputs/check_boxes_input_spec.rb +110 -82
  24. data/spec/inputs/date_input_spec.rb +81 -15
  25. data/spec/inputs/datetime_input_spec.rb +13 -13
  26. data/spec/inputs/email_input_spec.rb +34 -6
  27. data/spec/inputs/file_input_spec.rb +34 -6
  28. data/spec/inputs/hidden_input_spec.rb +41 -13
  29. data/spec/inputs/number_input_spec.rb +127 -97
  30. data/spec/inputs/password_input_spec.rb +34 -6
  31. data/spec/inputs/phone_input_spec.rb +34 -6
  32. data/spec/inputs/radio_input_spec.rb +73 -45
  33. data/spec/inputs/range_input_spec.rb +94 -66
  34. data/spec/inputs/search_input_spec.rb +33 -6
  35. data/spec/inputs/select_input_spec.rb +124 -78
  36. data/spec/inputs/string_input_spec.rb +67 -22
  37. data/spec/inputs/text_input_spec.rb +42 -15
  38. data/spec/inputs/time_input_spec.rb +23 -23
  39. data/spec/inputs/time_zone_input_spec.rb +20 -20
  40. data/spec/inputs/url_input_spec.rb +34 -6
  41. data/spec/support/custom_macros.rb +67 -196
  42. data/spec/support/formtastic_spec_helper.rb +22 -6
  43. data/speedo-formstrap.gemspec +2 -2
  44. metadata +17 -17
@@ -8,7 +8,7 @@ describe 'search input' do
8
8
  before do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
- Formtastic::Helpers::FormHelper.builder = SpeedoFormstrap::FormBuilder
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
12
  end
13
13
 
14
14
  describe "when object is provided" do
@@ -18,8 +18,8 @@ describe 'search input' do
18
18
  end)
19
19
  end
20
20
 
21
- it_should_have_input_wrapper_with_class(:search)
22
- it_should_have_input_wrapper_with_class(:clearfix)
21
+ it_should_have_input_wrapper_with_class('search-wrapper')
22
+ it_should_have_input_wrapper_with_class("control-group")
23
23
  it_should_have_input_wrapper_with_class(:stringish)
24
24
  it_should_have_input_class_in_the_right_place
25
25
  it_should_have_input_wrapper_with_id("post_search_input")
@@ -43,10 +43,37 @@ describe 'search input' do
43
43
  it_should_have_label_and_input_with_id("context2_post_search")
44
44
 
45
45
  end
46
-
46
+
47
+ describe "when index is provided" do
48
+
49
+ before do
50
+ @output_buffer = ''
51
+ mock_everything
52
+
53
+ concat(semantic_form_for(@new_post) do |builder|
54
+ concat(builder.fields_for(:author, :index => 3) do |author|
55
+ concat(author.input(:name, :as => :search))
56
+ end)
57
+ end)
58
+ end
59
+
60
+ it 'should index the id of the wrapper' do
61
+ output_buffer.should have_tag("div#post_author_attributes_3_name_input")
62
+ end
63
+
64
+ it 'should index the id of the select tag' do
65
+ output_buffer.should have_tag("input#post_author_attributes_3_name")
66
+ end
67
+
68
+ it 'should index the name of the select tag' do
69
+ output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
70
+ end
71
+
72
+ end
73
+
47
74
  describe "when required" do
48
75
  it "should add the required attribute to the input's html options" do
49
- with_config :use_required_attribute, true do
76
+ with_config :use_required_attribute, true do
50
77
  concat(semantic_form_for(@new_post) do |builder|
51
78
  concat(builder.input(:title, :as => :search, :required => true))
52
79
  end)
@@ -54,6 +81,6 @@ describe 'search input' do
54
81
  end
55
82
  end
56
83
  end
57
-
84
+
58
85
  end
59
86
 
@@ -8,7 +8,7 @@ describe 'select input' do
8
8
  before do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
- Formtastic::Helpers::FormHelper.builder = SpeedoFormstrap::FormBuilder
11
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
12
12
  end
13
13
 
14
14
  describe 'explicit values' do
@@ -24,10 +24,10 @@ describe 'select input' do
24
24
 
25
25
  it 'should have a option for each key and/or value' do
26
26
  @array_with_values.each do |v|
27
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{v}']", /^#{v}$/)
27
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{v}']", /^#{v}$/)
28
28
  end
29
29
  @array_with_keys_and_values.each do |v|
30
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{v.second}']", /^#{v.first}$/)
30
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{v.second}']", /^#{v.first}$/)
31
31
  end
32
32
  end
33
33
  end
@@ -41,9 +41,9 @@ describe 'select input' do
41
41
  end
42
42
 
43
43
  it 'should draw select options' do
44
- output_buffer.should have_tag('form div.clearfix div.input select')
45
- output_buffer.should have_tag('form div.clearfix div.input select#post_reviewer_id')
46
- output_buffer.should_not have_tag('form div.clearfix div.input select#post_mongoid_reviewer_id')
44
+ output_buffer.should have_tag('form div.control-group div.controls select')
45
+ output_buffer.should have_tag('form div.control-group div.controls select#post_reviewer_id')
46
+ output_buffer.should_not have_tag('form div.control-group div.controls select#post_mongoid_reviewer_id')
47
47
  end
48
48
  end
49
49
 
@@ -57,7 +57,7 @@ describe 'select input' do
57
57
 
58
58
  it 'should have an option for each value' do
59
59
  @range_with_values.each do |v|
60
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{v}']", /^#{v}$/)
60
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{v}']", /^#{v}$/)
61
61
  end
62
62
  end
63
63
  end
@@ -72,10 +72,20 @@ describe 'select input' do
72
72
 
73
73
  it 'should render select options using provided HTML string' do
74
74
  2.times do |v|
75
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{v}']", /^#{v}$/)
75
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{v}']", /^#{v}$/)
76
76
  end
77
77
  end
78
78
  end
79
+
80
+ describe 'using a nil name' do
81
+ before do
82
+ concat(semantic_form_for(@new_post) do |builder|
83
+ concat(builder.input(:title, :as => :select, :collection => [], :input_html => {:name => nil}))
84
+ end)
85
+ end
86
+
87
+ it_should_have_select_with_name("post[title]")
88
+ end
79
89
  end
80
90
 
81
91
  describe 'for boolean columns' do
@@ -84,19 +94,20 @@ describe 'select input' do
84
94
  # # Note: Works, but something like Formtastic.root.join(...) would probably be "safer".
85
95
  # ::I18n.load_path = [File.join(File.dirname(__FILE__), *%w[.. .. lib locale en.yml])]
86
96
  # ::I18n.backend.send(:init_translations)
87
- #
97
+ #
88
98
  # concat(semantic_form_for(@new_post) do |builder|
89
99
  # concat(builder.input(:published, :as => :select))
90
100
  # end)
91
101
  # end
92
- #
102
+ #
93
103
  # after do
104
+ # ::I18n.load_path = []
94
105
  # ::I18n.backend.store_translations :en, {}
95
106
  # end
96
- #
107
+ #
97
108
  # it 'should render a select with at least options: true/false' do
98
- # output_buffer.should have_tag("form div.clearfix div.input select option[@value='true']", /^Yes$/)
99
- # output_buffer.should have_tag("form div.clearfix div.input select option[@value='false']", /^No$/)
109
+ # output_buffer.should have_tag("form div.control-group div.controls select option[@value='true']", /^Yes$/)
110
+ # output_buffer.should have_tag("form div.control-group div.controls select option[@value='false']", /^No$/)
100
111
  # end
101
112
  # end
102
113
 
@@ -115,8 +126,8 @@ describe 'select input' do
115
126
  end
116
127
 
117
128
  it 'should render a select with at least options: true/false' do
118
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='true']", /#{@boolean_select_labels[:yes]}/)
119
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='false']", /#{@boolean_select_labels[:no]}/)
129
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='true']", /#{@boolean_select_labels[:yes]}/)
130
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='false']", /#{@boolean_select_labels[:no]}/)
120
131
  end
121
132
  end
122
133
  end
@@ -129,8 +140,8 @@ describe 'select input' do
129
140
  end)
130
141
  end
131
142
 
132
- it_should_have_input_wrapper_with_class("select")
133
- it_should_have_input_wrapper_with_class(:clearfix)
143
+ it_should_have_input_wrapper_with_class("select-wrapper")
144
+ it_should_have_input_wrapper_with_class("control-group")
134
145
  it_should_have_input_class_in_the_right_place
135
146
  it_should_have_input_wrapper_with_id("post_author_input")
136
147
  it_should_have_label_with_text(/Author/)
@@ -140,38 +151,42 @@ describe 'select input' do
140
151
  it_should_use_the_collection_when_provided(:select, 'option')
141
152
 
142
153
  it 'should have a select inside the wrapper' do
143
- output_buffer.should have_tag('form div.clearfix div.input select')
144
- output_buffer.should have_tag('form div.clearfix div.input select#post_author_id')
145
- output_buffer.should have_tag('form div.clearfix div.input select#post_reviewer_id')
154
+ output_buffer.should have_tag('form div.control-group div.controls select')
155
+ output_buffer.should have_tag('form div.control-group div.controls select#post_author_id')
156
+ output_buffer.should have_tag('form div.control-group div.controls select#post_reviewer_id')
146
157
  end
147
158
 
148
159
  it 'should have a valid name' do
149
- output_buffer.should have_tag("form div.clearfix div.input select[@name='post[author_id]']")
150
- output_buffer.should_not have_tag("form div.clearfix div.input select[@name='post[author_id][]']")
151
- output_buffer.should_not have_tag("form div.clearfix div.input select[@name='post[reviewer_id][]']")
160
+ output_buffer.should have_tag("form div.control-group div.controls select[@name='post[author_id]']")
161
+ output_buffer.should_not have_tag("form div.control-group div.controls select[@name='post[author_id][]']")
162
+ output_buffer.should_not have_tag("form div.control-group div.controls select[@name='post[reviewer_id][]']")
152
163
  end
153
164
 
154
165
  it 'should not create a multi-select' do
155
- output_buffer.should_not have_tag('form div.clearfix div.input select[@multiple]')
166
+ output_buffer.should_not have_tag('form div.control-group div.controls select[@multiple]')
167
+ end
168
+
169
+ it 'should not add a hidden input' do
170
+ output_buffer.should_not have_tag("form div.control-group div.controls input[@type='hidden']")
156
171
  end
157
172
 
158
173
  it 'should create a select without size' do
159
- output_buffer.should_not have_tag('form div.clearfix div.input select[@size]')
174
+ output_buffer.should_not have_tag('form div.control-group div.controls select[@size]')
160
175
  end
161
176
 
162
177
  it 'should have a blank option' do
163
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']")
178
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']")
164
179
  end
165
180
 
166
181
  it 'should have a select option for each Author' do
167
- output_buffer.should have_tag("form div.clearfix div.input select[@name='post[author_id]'] option", :count => ::Author.all.size + 1)
182
+ output_buffer.should have_tag("form div.control-group div.controls select[@name='post[author_id]'] option", :count => ::Author.all.size + 1)
168
183
  ::Author.all.each do |author|
169
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{author.id}']", /#{author.to_label}/)
184
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{author.id}']", /#{author.to_label}/)
170
185
  end
171
186
  end
172
187
 
173
188
  it 'should have one option with a "selected" attribute (bob)' do
174
- output_buffer.should have_tag("form div.clearfix div.input select[@name='post[author_id]'] option[@selected]", :count => 1)
189
+ output_buffer.should have_tag("form div.control-group div.controls select[@name='post[author_id]'] option[@selected]", :count => 1)
175
190
  end
176
191
 
177
192
  it 'should not singularize the association name' do
@@ -183,7 +198,7 @@ describe 'select input' do
183
198
  concat(builder.input(:author_status, :as => :select))
184
199
  end)
185
200
 
186
- output_buffer.should have_tag('form div.clearfix div.input select#post_author_status_id')
201
+ output_buffer.should have_tag('form div.control-group div.controls select#post_author_status_id')
187
202
  end
188
203
  end
189
204
 
@@ -253,7 +268,7 @@ describe 'select input' do
253
268
  end)
254
269
  end
255
270
 
256
- it_should_have_input_wrapper_with_class("select")
271
+ it_should_have_input_wrapper_with_class("select-wrapper")
257
272
  it_should_have_input_wrapper_with_id("post_author_input")
258
273
  it_should_have_label_with_text(/Author/)
259
274
  it_should_have_label_for('post_author_id')
@@ -262,29 +277,29 @@ describe 'select input' do
262
277
 
263
278
  0.upto(1) do |i|
264
279
  it 'should have all option groups and the right values' do
265
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{@continent_names[i]}']", @authors[i].to_label)
280
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{@continent_names[i]}']", @authors[i].to_label)
266
281
  end
267
282
 
268
283
  it 'should have custom group labels' do
269
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{@continents[i].id}']", @authors[i].to_label)
284
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{@continents[i].id}']", @authors[i].to_label)
270
285
  end
271
286
 
272
287
  it 'should have custom author labels' do
273
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{@continent_names[i]}']", @authors[i].login)
288
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{@continent_names[i]}']", @authors[i].login)
274
289
  end
275
290
 
276
291
  it 'should have custom author and group labels' do
277
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{@continents[i].id}']", @authors[i].login)
292
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{@continents[i].id}']", @authors[i].login)
278
293
  end
279
294
  end
280
295
 
281
296
  it 'should have no duplicate groups' do
282
- output_buffer.should have_tag('form div.clearfix div.input select optgroup', :count => 8)
297
+ output_buffer.should have_tag('form div.control-group div.controls select optgroup', :count => 8)
283
298
  end
284
299
 
285
300
  it 'should sort the groups on the label method' do
286
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='Africa']")
287
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='99']")
301
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='Africa']")
302
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='99']")
288
303
  end
289
304
 
290
305
  it 'should call find with :include for more optimized queries' do
@@ -303,7 +318,7 @@ describe 'select input' do
303
318
  end)
304
319
  end
305
320
 
306
- it_should_have_input_wrapper_with_class("select")
321
+ it_should_have_input_wrapper_with_class("select-wrapper")
307
322
  it_should_have_input_wrapper_with_id("author_posts_input")
308
323
  it_should_have_label_with_text(/Post/)
309
324
  it_should_have_label_for('author_post_ids')
@@ -312,27 +327,31 @@ describe 'select input' do
312
327
  it_should_use_the_collection_when_provided(:select, 'option')
313
328
 
314
329
  it 'should have a select inside the wrapper' do
315
- output_buffer.should have_tag('form div.clearfix div.input select')
316
- output_buffer.should have_tag('form div.clearfix div.input select#author_post_ids')
330
+ output_buffer.should have_tag('form div.control-group div.controls select')
331
+ output_buffer.should have_tag('form div.control-group div.controls select#author_post_ids')
317
332
  end
318
333
 
319
334
  it 'should have a multi-select select' do
320
- output_buffer.should have_tag('form div.clearfix div.input select[@multiple="multiple"]')
335
+ output_buffer.should have_tag('form div.control-group div.controls select[@multiple="multiple"]')
321
336
  end
322
337
 
323
338
  it 'should append [] to the name attribute for multiple select' do
324
- output_buffer.should have_tag('form div.clearfix div.input select[@multiple="multiple"][@name="author[post_ids][]"]')
339
+ output_buffer.should have_tag('form div.control-group div.controls select[@multiple="multiple"][@name="author[post_ids][]"]')
340
+ end
341
+
342
+ it 'should have a hidden field' do
343
+ output_buffer.should have_tag('form div.control-group div.controls input[@type="hidden"][@name="author[post_ids][]"]')
325
344
  end
326
345
 
327
346
  it 'should have a select option for each Post' do
328
- output_buffer.should have_tag('form div.clearfix div.input select option', :count => ::Post.all.size)
347
+ output_buffer.should have_tag('form div.control-group div.controls select option', :count => ::Post.all.size)
329
348
  ::Post.all.each do |post|
330
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{post.id}']", /#{post.to_label}/)
349
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{post.id}']", /#{post.to_label}/)
331
350
  end
332
351
  end
333
352
 
334
353
  it 'should not have a blank option by default' do
335
- output_buffer.should_not have_tag("form div.clearfix div.input select option[@value='']")
354
+ output_buffer.should_not have_tag("form div.control-group div.controls select option[@value='']")
336
355
  end
337
356
 
338
357
  it 'should respect the :include_blank option for single selects' do
@@ -340,7 +359,7 @@ describe 'select input' do
340
359
  concat(builder.input(:posts, :as => :select, :multiple => false, :include_blank => true))
341
360
  end)
342
361
 
343
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']")
362
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']")
344
363
  end
345
364
 
346
365
  it 'should respect the :include_blank option for multiple selects' do
@@ -348,11 +367,11 @@ describe 'select input' do
348
367
  concat(builder.input(:posts, :as => :select, :multiple => true, :include_blank => true))
349
368
  end)
350
369
 
351
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']")
370
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']")
352
371
  end
353
372
 
354
373
  it 'should have one option with a "selected" attribute' do
355
- output_buffer.should have_tag('form div.clearfix div.input select option[@selected]', :count => 1)
374
+ output_buffer.should have_tag('form div.control-group div.controls select option[@selected]', :count => 1)
356
375
  end
357
376
  end
358
377
 
@@ -363,7 +382,7 @@ describe 'select input' do
363
382
  end)
364
383
  end
365
384
 
366
- it_should_have_input_wrapper_with_class("select")
385
+ it_should_have_input_wrapper_with_class("select-wrapper")
367
386
  it_should_have_input_wrapper_with_id("post_authors_input")
368
387
  it_should_have_label_with_text(/Author/)
369
388
  it_should_have_label_for('post_author_ids')
@@ -372,23 +391,23 @@ describe 'select input' do
372
391
  it_should_use_the_collection_when_provided(:select, 'option')
373
392
 
374
393
  it 'should have a select inside the wrapper' do
375
- output_buffer.should have_tag('form div.clearfix div.input select')
376
- output_buffer.should have_tag('form div.clearfix div.input select#post_author_ids')
394
+ output_buffer.should have_tag('form div.control-group div.controls select')
395
+ output_buffer.should have_tag('form div.control-group div.controls select#post_author_ids')
377
396
  end
378
397
 
379
398
  it 'should have a multi-select select' do
380
- output_buffer.should have_tag('form div.clearfix div.input select[@multiple="multiple"]')
399
+ output_buffer.should have_tag('form div.control-group div.controls select[@multiple="multiple"]')
381
400
  end
382
401
 
383
402
  it 'should have a select option for each Author' do
384
- output_buffer.should have_tag('form div.clearfix div.input select option', :count => ::Author.all.size)
403
+ output_buffer.should have_tag('form div.control-group div.controls select option', :count => ::Author.all.size)
385
404
  ::Author.all.each do |author|
386
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{author.id}']", /#{author.to_label}/)
405
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{author.id}']", /#{author.to_label}/)
387
406
  end
388
407
  end
389
408
 
390
409
  it 'should not have a blank option by default' do
391
- output_buffer.should_not have_tag("form div.clearfix div.input select option[@value='']")
410
+ output_buffer.should_not have_tag("form div.control-group div.controls select option[@value='']")
392
411
  end
393
412
 
394
413
  it 'should respect the :include_blank option for single selects' do
@@ -396,7 +415,7 @@ describe 'select input' do
396
415
  concat(builder.input(:authors, :as => :select, :multiple => false, :include_blank => true))
397
416
  end)
398
417
 
399
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']")
418
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']")
400
419
  end
401
420
 
402
421
  it 'should respect the :include_blank option for multiple selects' do
@@ -404,11 +423,11 @@ describe 'select input' do
404
423
  concat(builder.input(:authors, :as => :select, :multiple => true, :include_blank => true))
405
424
  end)
406
425
 
407
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']")
426
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']")
408
427
  end
409
428
 
410
429
  it 'should have one option with a "selected" attribute' do
411
- output_buffer.should have_tag('form div.clearfix div.input select option[@selected]', :count => 1)
430
+ output_buffer.should have_tag('form div.control-group div.controls select option[@selected]', :count => 1)
412
431
  end
413
432
  end
414
433
 
@@ -421,11 +440,11 @@ describe 'select input' do
421
440
  end
422
441
 
423
442
  it 'should have a select with prompt' do
424
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='']", /choose author/, :count => 1)
443
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']", /choose author/, :count => 1)
425
444
  end
426
445
 
427
- it 'should not have a blank select option' do
428
- output_buffer.should_not have_tag("form div.clearfix div.input select option[@value='']", "")
446
+ it 'should not have a second blank select option' do
447
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='']", :count => 1)
429
448
  end
430
449
  end
431
450
 
@@ -437,18 +456,18 @@ describe 'select input' do
437
456
  end
438
457
 
439
458
  it 'should generate label' do
440
- output_buffer.should have_tag('form div.clearfix label', /Author/)
441
- output_buffer.should have_tag("form div.clearfix label[@for='project_author']")
459
+ output_buffer.should have_tag('form div.control-group label.control-label', /Author/)
460
+ output_buffer.should have_tag("form div.control-group label.control-label[@for='project_author']")
442
461
  end
443
462
 
444
463
  it 'should generate select inputs' do
445
- output_buffer.should have_tag('form div.clearfix div.input select#project_author')
446
- output_buffer.should have_tag('form div.clearfix div.input select option', :count => ::Author.all.size + 1)
464
+ output_buffer.should have_tag('form div.control-group div.controls select#project_author')
465
+ output_buffer.should have_tag('form div.control-group div.controls select option', :count => ::Author.all.size + 1)
447
466
  end
448
467
 
449
468
  it 'should generate an option to each item' do
450
469
  ::Author.all.each do |author|
451
- output_buffer.should have_tag("form div.clearfix div.input select option[@value='#{author.id}']", /#{author.to_label}/)
470
+ output_buffer.should have_tag("form div.control-group div.controls select option[@value='#{author.id}']", /#{author.to_label}/)
452
471
  end
453
472
  end
454
473
  end
@@ -459,27 +478,27 @@ describe 'select input' do
459
478
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
460
479
  concat(builder.input(:author_name, :as => :select, :collection => ::Author.all))
461
480
  end)
462
- output_buffer.should have_tag("form div.clearfix div.input select[@name='project[author_name]']")
481
+ output_buffer.should have_tag("form div.control-group div.controls select[@name='project[author_name]']")
463
482
  end
464
-
483
+
465
484
  describe 'and :multiple is set to true through :input_html' do
466
485
  it "should make the select a multi-select" do
467
486
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
468
487
  concat(builder.input(:author_name, :as => :select, :input_html => {:multiple => true} ))
469
488
  end)
470
- output_buffer.should have_tag("form div.clearfix div.input select[@multiple]")
489
+ output_buffer.should have_tag("form div.control-group div.controls select[@multiple]")
471
490
  end
472
491
  end
473
-
492
+
474
493
  describe 'and :multiple is set to true' do
475
494
  it "should make the select a multi-select" do
476
495
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
477
496
  concat(builder.input(:author_name, :as => :select, :multiple => true, :collection => ["Fred", "Bob"]))
478
497
  end)
479
- output_buffer.should have_tag("form div.clearfix div.input select[@multiple]")
498
+ output_buffer.should have_tag("form div.control-group div.controls select[@multiple]")
480
499
  end
481
500
  end
482
-
501
+
483
502
  end
484
503
 
485
504
  describe 'when a grouped collection collection is given' do
@@ -494,12 +513,12 @@ describe 'select input' do
494
513
 
495
514
  it 'should generate an option to each item' do
496
515
  @grouped_opts.each do |opt_pair|
497
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{opt_pair[0]}']")
516
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{opt_pair[0]}']")
498
517
  opt_pair[1].each do |v|
499
- output_buffer.should have_tag("form div.clearfix div.input select optgroup[@label='#{opt_pair[0]}'] option[@value='#{v}']")
518
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup[@label='#{opt_pair[0]}'] option[@value='#{v}']")
500
519
  end
501
520
  end
502
- output_buffer.should have_tag("form div.clearfix div.input select optgroup option[@selected]","hands")
521
+ output_buffer.should have_tag("form div.control-group div.controls select optgroup option[@selected]","hands")
503
522
  end
504
523
  end
505
524
 
@@ -521,7 +540,7 @@ describe 'select input' do
521
540
  end
522
541
 
523
542
  it "should render a select field" do
524
- output_buffer.should have_tag("form div.clearfix div.input select", :count => 2)
543
+ output_buffer.should have_tag("form div.control-group div.controls select", :count => 2)
525
544
  end
526
545
  end
527
546
 
@@ -537,7 +556,7 @@ describe 'select input' do
537
556
  end
538
557
 
539
558
  it "should render a text field" do
540
- output_buffer.should have_tag("form div.clearfix div.input input[@type='text']", :count => 2)
559
+ output_buffer.should have_tag("form div.control-group div.controls input[@type='text']", :count => 2)
541
560
  end
542
561
  end
543
562
  end
@@ -553,6 +572,33 @@ describe 'select input' do
553
572
  it_should_have_label_for("context2_post_author_ids")
554
573
  end
555
574
 
575
+ describe "when index is provided" do
576
+
577
+ before do
578
+ @output_buffer = ''
579
+ mock_everything
580
+
581
+ concat(semantic_form_for(@new_post) do |builder|
582
+ concat(builder.fields_for(:author, :index => 3) do |author|
583
+ concat(author.input(:name, :as => :select))
584
+ end)
585
+ end)
586
+ end
587
+
588
+ it 'should index the id of the wrapper' do
589
+ output_buffer.should have_tag("div#post_author_attributes_3_name_input")
590
+ end
591
+
592
+ it 'should index the id of the select tag' do
593
+ output_buffer.should have_tag("select#post_author_attributes_3_name")
594
+ end
595
+
596
+ it 'should index the name of the select' do
597
+ output_buffer.should have_tag("select[@name='post[author_attributes][3][name]']")
598
+ end
599
+
600
+ end
601
+
556
602
  context "when required" do
557
603
  it "should add the required attribute to the select's html options" do
558
604
  with_config :use_required_attribute, true do