formtastic-bootstrap 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +5 -3
- data/Gemfile.lock +72 -60
- data/README.md +4 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/formtastic-bootstrap.gemspec +49 -16
- data/lib/formtastic-bootstrap/actions/base.rb +22 -0
- data/lib/formtastic-bootstrap/actions/button_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/input_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/link_action.rb +12 -0
- data/lib/formtastic-bootstrap/actions.rb +10 -0
- data/lib/formtastic-bootstrap/form_builder.rb +4 -2
- data/lib/formtastic-bootstrap/helpers/action_helper.rb +12 -0
- data/lib/formtastic-bootstrap/helpers/actions_helper.rb +24 -0
- data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +2 -4
- data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +0 -2
- data/lib/formtastic-bootstrap/helpers.rb +6 -8
- data/lib/formtastic-bootstrap/inputs/base/choices.rb +6 -35
- data/lib/formtastic-bootstrap/inputs/base/collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/grouped_collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/hints.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/base/labelling.rb +14 -3
- data/lib/formtastic-bootstrap/inputs/base/numeric.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/stringish.rb +4 -5
- data/lib/formtastic-bootstrap/inputs/base/timeish.rb +38 -18
- data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +22 -34
- data/lib/formtastic-bootstrap/inputs/base.rb +29 -6
- data/lib/formtastic-bootstrap/inputs/boolean_input.rb +14 -18
- data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +16 -11
- data/lib/formtastic-bootstrap/inputs/date_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/date_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/datetime_input.rb +3 -12
- data/lib/formtastic-bootstrap/inputs/datetime_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/email_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/file_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/hidden_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/number_input.rb +3 -3
- data/lib/formtastic-bootstrap/inputs/password_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/phone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/radio_input.rb +28 -14
- data/lib/formtastic-bootstrap/inputs/range_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/search_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/select_input.rb +3 -1
- data/lib/formtastic-bootstrap/inputs/string_input.rb +0 -7
- data/lib/formtastic-bootstrap/inputs/text_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/time_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/time_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/time_zone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/url_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs.rb +30 -23
- data/lib/formtastic-bootstrap.rb +16 -1
- data/spec/actions/button_action_spec.rb +63 -0
- data/spec/actions/input_action_spec.rb +59 -0
- data/spec/actions/link_action_spec.rb +92 -0
- data/spec/helpers/action_helper_spec.rb +368 -0
- data/spec/helpers/actions_helper_spec.rb +147 -0
- data/spec/helpers/input_helper_spec.rb +238 -259
- data/spec/helpers/inputs_helper_spec.rb +84 -25
- data/spec/inputs/boolean_input_spec.rb +108 -75
- data/spec/inputs/check_boxes_input_spec.rb +106 -91
- data/spec/inputs/date_select_input_spec.rb +164 -0
- data/spec/inputs/datetime_select_input_spec.rb +112 -0
- data/spec/inputs/deprecated_time_date_datetime_inputs_spec.rb +48 -0
- data/spec/inputs/email_input_spec.rb +30 -3
- data/spec/inputs/file_input_spec.rb +31 -4
- data/spec/inputs/hidden_input_spec.rb +63 -32
- data/spec/inputs/number_input_spec.rb +37 -8
- data/spec/inputs/password_input_spec.rb +30 -3
- data/spec/inputs/phone_input_spec.rb +30 -3
- data/spec/inputs/radio_input_spec.rb +87 -60
- data/spec/inputs/range_input_spec.rb +32 -5
- data/spec/inputs/search_input_spec.rb +29 -3
- data/spec/inputs/select_input_spec.rb +164 -107
- data/spec/inputs/string_input_spec.rb +33 -22
- data/spec/inputs/text_input_spec.rb +39 -14
- data/spec/inputs/time_select_input_spec.rb +191 -0
- data/spec/inputs/time_zone_input_spec.rb +17 -19
- data/spec/inputs/url_input_spec.rb +30 -3
- data/spec/spec_helper.rb +21 -15
- data/spec/support/custom_macros.rb +61 -228
- data/spec/support/fb_custom_macros.rb +23 -0
- metadata +109 -28
- data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +0 -52
- data/spec/builder/errors_spec.rb +0 -214
- data/spec/helpers/buttons_helper_spec.rb +0 -149
- data/spec/inputs/date_input_spec.rb +0 -147
- data/spec/inputs/datetime_input_spec.rb +0 -101
- data/spec/inputs/time_input_spec.rb +0 -206
- data/spec/support/depracation.rb +0 -6
- data/spec/support/formtastic_spec_helper.rb +0 -382
@@ -9,109 +9,94 @@ describe 'check_boxes input' do
|
|
9
9
|
before do
|
10
10
|
@output_buffer = ''
|
11
11
|
mock_everything
|
12
|
-
|
13
|
-
|
12
|
+
|
14
13
|
concat(semantic_form_for(@fred) do |builder|
|
15
14
|
concat(builder.input(:posts, :as => :check_boxes, :value_as_class => true, :required => true))
|
16
15
|
end)
|
17
16
|
end
|
18
17
|
|
18
|
+
it_should_have_bootstrap_horizontal_wrapping
|
19
19
|
it_should_have_input_wrapper_with_class("check_boxes")
|
20
|
-
it_should_have_input_wrapper_with_class(:
|
21
|
-
it_should_have_input_class_in_the_right_place
|
20
|
+
it_should_have_input_wrapper_with_class(:input)
|
22
21
|
it_should_have_input_wrapper_with_id("author_posts_input")
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
# it_should_have_a_nested_fieldset
|
23
|
+
# it_should_have_a_nested_fieldset_with_class('choices')
|
24
|
+
# it_should_have_a_nested_ordered_list_with_class('choices-group')
|
25
|
+
it_should_have_bootstrap_controls_label_with("checkbox")
|
26
|
+
it_should_apply_error_logic_for_input_type(:check_boxes)
|
27
27
|
it_should_call_find_on_association_class_when_no_collection_is_provided(:check_boxes)
|
28
28
|
it_should_use_the_collection_when_provided(:check_boxes, 'input[@type="checkbox"]')
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
output_buffer.should have_tag('form div.
|
33
|
-
output_buffer.should have_tag('form div.clearfix label', /Posts/)
|
30
|
+
it 'should generate a control label with text for the input' do
|
31
|
+
output_buffer.should have_tag('form div.control-group > label.control-label')
|
32
|
+
output_buffer.should have_tag('form div.control-group > label.control-label', /Posts/)
|
34
33
|
end
|
35
34
|
|
36
|
-
it 'should not link the
|
37
|
-
output_buffer.should_not have_tag('form div.
|
35
|
+
it 'should not link the label within the legend to any input' do
|
36
|
+
output_buffer.should_not have_tag('form div.control-group > label[@for^="author_post_ids_"]')
|
38
37
|
end
|
39
38
|
|
40
|
-
it 'should generate an
|
41
|
-
output_buffer.
|
42
|
-
output_buffer.
|
39
|
+
it 'should not generate an ordered list with an li.choice for each choice' do
|
40
|
+
output_buffer.should_not have_tag('form li fieldset ol')
|
41
|
+
output_buffer.should_not have_tag('form li fieldset ol li.choice input[@type=checkbox]', :count => ::Post.all.size)
|
43
42
|
end
|
44
43
|
|
45
|
-
# it 'should generate a legend containing a label with text for the input' do
|
46
|
-
# output_buffer.should have_tag('form li fieldset legend.label label')
|
47
|
-
# output_buffer.should have_tag('form li fieldset legend.label label', /Posts/)
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# it 'should not link the label within the legend to any input' do
|
51
|
-
# output_buffer.should_not have_tag('form li fieldset legend label[@for^="author_post_ids_"]')
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# it 'should generate an ordered list with an li.choice for each choice' do
|
55
|
-
# output_buffer.should have_tag('form li fieldset ol')
|
56
|
-
# output_buffer.should have_tag('form li fieldset ol li.choice input[@type=checkbox]', :count => ::Post.all.size)
|
57
|
-
# end
|
58
|
-
|
59
44
|
it 'should have one option with a "checked" attribute' do
|
60
|
-
output_buffer.should have_tag('form
|
45
|
+
output_buffer.should have_tag('form div.control-group div.controls input[@checked]', :count => 1)
|
61
46
|
end
|
62
47
|
|
63
48
|
it 'should not generate hidden inputs with default value blank' do
|
64
|
-
output_buffer.should_not have_tag("form div div
|
49
|
+
output_buffer.should_not have_tag("form div.control-group div.controls label input[@type='hidden'][@value='']")
|
65
50
|
end
|
66
51
|
|
67
|
-
it 'should not render hidden inputs inside
|
68
|
-
output_buffer.should_not have_tag("form div
|
52
|
+
it 'should not render hidden inputs inside div.controls' do
|
53
|
+
output_buffer.should_not have_tag("form div.controls input[@type='hidden']")
|
69
54
|
end
|
70
55
|
|
71
56
|
it 'should render one hidden input for each choice outside the ol' do
|
72
|
-
output_buffer.should have_tag("form div.
|
57
|
+
output_buffer.should have_tag("form div.control-group > input[@type='hidden']", :count => 1)
|
73
58
|
end
|
74
59
|
|
75
60
|
describe "each choice" do
|
76
61
|
|
77
|
-
it 'should not give the choice label the
|
78
|
-
output_buffer.should_not have_tag('
|
62
|
+
it 'should not give the choice label the label class' do
|
63
|
+
output_buffer.should_not have_tag('div.controls label.label')
|
79
64
|
end
|
80
65
|
|
81
66
|
it 'should not be marked as required' do
|
82
|
-
output_buffer.should_not have_tag('
|
67
|
+
output_buffer.should_not have_tag('div.controls input[@required]')
|
83
68
|
end
|
84
69
|
|
85
70
|
it 'should contain a label for the radio input with a nested input and label text' do
|
86
71
|
::Post.all.each do |post|
|
87
|
-
output_buffer.should have_tag('form div.
|
88
|
-
output_buffer.should have_tag("form div.
|
72
|
+
output_buffer.should have_tag('form div.control-group div.controls label', /#{post.to_label}/)
|
73
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='author_post_ids_#{post.id}']")
|
89
74
|
end
|
90
75
|
end
|
91
76
|
|
92
|
-
it 'should use values as
|
77
|
+
it 'should use values as label.class when value_as_class is true' do
|
93
78
|
::Post.all.each do |post|
|
94
|
-
output_buffer.should have_tag("form div.
|
79
|
+
output_buffer.should have_tag("form div.control-group div.controls label.post_#{post.id}")
|
95
80
|
end
|
96
81
|
end
|
97
82
|
|
98
83
|
it 'should have a checkbox input but no hidden field for each post' do
|
99
84
|
::Post.all.each do |post|
|
100
|
-
output_buffer.should have_tag("form div.
|
101
|
-
output_buffer.should have_tag("form div.
|
85
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#author_post_ids_#{post.id}")
|
86
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='author[post_ids][]']", :count => 1)
|
102
87
|
end
|
103
88
|
end
|
104
89
|
|
105
90
|
it 'should have a hidden field with an empty array value for the collection to allow clearing of all checkboxes' do
|
106
|
-
output_buffer.should have_tag("form div.
|
91
|
+
output_buffer.should have_tag("form div.control-group > input[@type=hidden][@name='author[post_ids][]'][@value='']", :count => 1)
|
107
92
|
end
|
108
93
|
|
109
|
-
it 'the hidden field with an empty array value should be followed by the div.
|
110
|
-
output_buffer.should have_tag("form div.
|
94
|
+
it 'the hidden field with an empty array value should be followed by the div.controls' do
|
95
|
+
output_buffer.should have_tag("form div.control-group > input[@type=hidden][@name='author[post_ids][]'][@value=''] + div.controls", :count => 1)
|
111
96
|
end
|
112
97
|
|
113
98
|
it 'should not have a hidden field with an empty string value for the collection' do
|
114
|
-
output_buffer.should_not have_tag("form div.
|
99
|
+
output_buffer.should_not have_tag("form div.control-group > input[@type=hidden][@name='author[post_ids]'][@value='']", :count => 1)
|
115
100
|
end
|
116
101
|
|
117
102
|
it 'should have a checkbox and a hidden field for each post with :hidden_field => true' do
|
@@ -122,15 +107,15 @@ describe 'check_boxes input' do
|
|
122
107
|
end)
|
123
108
|
|
124
109
|
::Post.all.each do |post|
|
125
|
-
output_buffer.should have_tag("form div.
|
126
|
-
output_buffer.should have_tag("form div.
|
110
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#author_post_ids_#{post.id}")
|
111
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='author[post_ids][]']", :count => 2)
|
127
112
|
end
|
128
113
|
|
129
114
|
end
|
130
115
|
|
131
116
|
it "should mark input as checked if it's the the existing choice" do
|
132
117
|
::Post.all.include?(@fred.posts.first).should be_true
|
133
|
-
output_buffer.should have_tag("form div.
|
118
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@checked='checked']")
|
134
119
|
end
|
135
120
|
end
|
136
121
|
|
@@ -142,27 +127,31 @@ describe 'check_boxes input' do
|
|
142
127
|
end)
|
143
128
|
end
|
144
129
|
|
145
|
-
it 'should generate a
|
146
|
-
output_buffer.
|
130
|
+
it 'should not generate a fieldset with legend' do
|
131
|
+
output_buffer.should_not have_tag('form li fieldset legend', /Author/)
|
147
132
|
end
|
148
133
|
|
149
|
-
it '
|
150
|
-
output_buffer.should have_tag('form div.
|
134
|
+
it 'should generate a div.control-group with a label' do
|
135
|
+
output_buffer.should have_tag('form div.control-group label.control-label', /Author/)
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should not generate an li tag for each item in the collection' do
|
139
|
+
output_buffer.should_not have_tag('form li fieldset ol li input[@type=checkbox]', :count => ::Author.all.size)
|
151
140
|
end
|
152
141
|
|
153
142
|
it 'should generate labels for each item' do
|
154
143
|
::Author.all.each do |author|
|
155
|
-
output_buffer.should have_tag('form div.
|
156
|
-
output_buffer.should have_tag("form div.
|
144
|
+
output_buffer.should have_tag('form div.control-group div.controls label', /#{author.to_label}/)
|
145
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='project_author_id_#{author.id}']")
|
157
146
|
end
|
158
147
|
end
|
159
148
|
|
160
149
|
it 'should generate inputs for each item' do
|
161
150
|
::Author.all.each do |author|
|
162
|
-
output_buffer.should have_tag("form div.
|
163
|
-
output_buffer.should have_tag("form div.
|
164
|
-
output_buffer.should have_tag("form div.
|
165
|
-
output_buffer.should have_tag("form div.
|
151
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#project_author_id_#{author.id}")
|
152
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@type='checkbox']")
|
153
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='#{author.id}']")
|
154
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='project[author_id][]']")
|
166
155
|
end
|
167
156
|
end
|
168
157
|
|
@@ -171,9 +160,8 @@ describe 'check_boxes input' do
|
|
171
160
|
concat(builder.input(:author_id, :as => :check_boxes, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
|
172
161
|
end)
|
173
162
|
|
174
|
-
output_buffer.should have_tag('form div.
|
175
|
-
|
176
|
-
label.body.should match /<b>Item [12]<\/b>/
|
163
|
+
output_buffer.should have_tag('form div.control-group div.controls label') do |label|
|
164
|
+
label.body.should match /<b>Item [12]<\/b>$/
|
177
165
|
end
|
178
166
|
end
|
179
167
|
end
|
@@ -190,18 +178,18 @@ describe 'check_boxes input' do
|
|
190
178
|
|
191
179
|
it 'should have a checkbox input for each post' do
|
192
180
|
::Post.all.each do |post|
|
193
|
-
output_buffer.should have_tag("form div.
|
194
|
-
output_buffer.should have_tag("form div.
|
181
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#author_post_ids_#{post.id}")
|
182
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='author[post_ids][]']", :count => ::Post.all.length)
|
195
183
|
end
|
196
184
|
end
|
197
185
|
|
198
186
|
it "should mark input as checked if it's the the existing choice" do
|
199
187
|
::Post.all.include?(@fred.posts.first).should be_true
|
200
|
-
output_buffer.should have_tag("form div.
|
188
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@checked='checked']")
|
201
189
|
end
|
202
190
|
|
203
191
|
it 'should not generate empty hidden inputs' do
|
204
|
-
output_buffer.should_not have_tag("form div.
|
192
|
+
output_buffer.should_not have_tag("form div.control-group div.controls label input[@type='hidden'][@value='']", :count => ::Post.all.length)
|
205
193
|
end
|
206
194
|
end
|
207
195
|
|
@@ -220,7 +208,7 @@ describe 'check_boxes input' do
|
|
220
208
|
end
|
221
209
|
|
222
210
|
it 'should not have any disabled item(s)' do
|
223
|
-
output_buffer.should_not have_tag("form div.
|
211
|
+
output_buffer.should_not have_tag("form div.control-group div.controls label input[@disabled='disabled']")
|
224
212
|
end
|
225
213
|
end
|
226
214
|
|
@@ -234,9 +222,9 @@ describe 'check_boxes input' do
|
|
234
222
|
end
|
235
223
|
|
236
224
|
it "should have one item disabled; the specified one" do
|
237
|
-
output_buffer.should have_tag("form div.
|
238
|
-
output_buffer.should have_tag("form div.
|
239
|
-
output_buffer.should have_tag("form div.
|
225
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@disabled='disabled']", :count => 1)
|
226
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='post_author_ids_#{@fred.id}']", /fred/i)
|
227
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@disabled='disabled'][@value='#{@fred.id}']")
|
240
228
|
end
|
241
229
|
end
|
242
230
|
|
@@ -250,11 +238,11 @@ describe 'check_boxes input' do
|
|
250
238
|
end
|
251
239
|
|
252
240
|
it "should have multiple items disabled; the specified ones" do
|
253
|
-
output_buffer.should have_tag("form div.
|
254
|
-
output_buffer.should have_tag("form div.
|
255
|
-
output_buffer.should have_tag("form div.
|
256
|
-
output_buffer.should have_tag("form div.
|
257
|
-
output_buffer.should have_tag("form div.
|
241
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@disabled='disabled']", :count => 2)
|
242
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='post_author_ids_#{@bob.id}']", /bob/i)
|
243
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@disabled='disabled'][@value='#{@bob.id}']")
|
244
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='post_author_ids_#{@fred.id}']", /fred/i)
|
245
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@disabled='disabled'][@value='#{@fred.id}']")
|
258
246
|
end
|
259
247
|
end
|
260
248
|
|
@@ -277,7 +265,7 @@ describe 'check_boxes input' do
|
|
277
265
|
end
|
278
266
|
|
279
267
|
it "should do foo" do
|
280
|
-
output_buffer.should have_tag("
|
268
|
+
output_buffer.should have_tag("label.control-label", /Translated/)
|
281
269
|
end
|
282
270
|
|
283
271
|
end
|
@@ -291,7 +279,7 @@ describe 'check_boxes input' do
|
|
291
279
|
end
|
292
280
|
|
293
281
|
it "should output the correct label title" do
|
294
|
-
output_buffer.should have_tag("
|
282
|
+
output_buffer.should have_tag("label.control-label", /The authors/)
|
295
283
|
end
|
296
284
|
end
|
297
285
|
|
@@ -304,8 +292,8 @@ describe 'check_boxes input' do
|
|
304
292
|
end)
|
305
293
|
end
|
306
294
|
|
307
|
-
it "should output
|
308
|
-
output_buffer.
|
295
|
+
it "should not output the legend" do
|
296
|
+
output_buffer.should_not have_tag("label.control-label")
|
309
297
|
end
|
310
298
|
|
311
299
|
it "should not cause escaped HTML" do
|
@@ -323,7 +311,7 @@ describe 'check_boxes input' do
|
|
323
311
|
end
|
324
312
|
|
325
313
|
it "should output the correct label title" do
|
326
|
-
output_buffer.should have_tag("
|
314
|
+
output_buffer.should have_tag("label.control-label abbr")
|
327
315
|
end
|
328
316
|
end
|
329
317
|
|
@@ -366,7 +354,7 @@ describe 'check_boxes input' do
|
|
366
354
|
item.should_not_receive(:id)
|
367
355
|
item.stub!(:custom_value).and_return('custom_value')
|
368
356
|
item.should_receive(:custom_value).exactly(3).times
|
369
|
-
@new_post.author.should_receive(:custom_value).exactly(
|
357
|
+
@new_post.author.should_receive(:custom_value).exactly(1).times
|
370
358
|
concat(semantic_form_for(@new_post) do |builder|
|
371
359
|
concat(builder.input(:author, :as => :check_boxes, :member_value => :custom_value, :collection => [item, item, item]))
|
372
360
|
end)
|
@@ -387,8 +375,8 @@ describe 'check_boxes input' do
|
|
387
375
|
end
|
388
376
|
|
389
377
|
it 'should check the correct checkboxes' do
|
390
|
-
output_buffer.should have_tag("form div.
|
391
|
-
output_buffer.should have_tag("form div.
|
378
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='fiction'][@checked='checked']")
|
379
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='biography'][@checked='checked']")
|
392
380
|
end
|
393
381
|
end
|
394
382
|
|
@@ -404,20 +392,47 @@ describe 'check_boxes input' do
|
|
404
392
|
end
|
405
393
|
|
406
394
|
it "should have a label for #context2_author_post_ids_19" do
|
407
|
-
output_buffer.should have_tag("form
|
395
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='context2_author_post_ids_19']")
|
408
396
|
end
|
409
397
|
|
410
398
|
it_should_have_input_with_id('context2_author_post_ids_19')
|
411
399
|
it_should_have_input_wrapper_with_id("context2_author_posts_input")
|
412
400
|
end
|
401
|
+
|
402
|
+
describe "when index is provided" do
|
403
|
+
|
404
|
+
before do
|
405
|
+
@output_buffer = ''
|
406
|
+
mock_everything
|
407
|
+
|
408
|
+
concat(semantic_form_for(@fred) do |builder|
|
409
|
+
concat(builder.fields_for(@fred.posts.first, :index => 3) do |author|
|
410
|
+
concat(author.input(:authors, :as => :check_boxes))
|
411
|
+
end)
|
412
|
+
end)
|
413
|
+
end
|
414
|
+
|
415
|
+
it 'should index the id of the control-group wrapper' do
|
416
|
+
output_buffer.should have_tag("div.control-group#author_post_3_authors_input")
|
417
|
+
end
|
418
|
+
|
419
|
+
it 'should index the id of the input tag' do
|
420
|
+
output_buffer.should have_tag("input#author_post_3_author_ids_42")
|
421
|
+
end
|
422
|
+
|
423
|
+
it 'should index the name of the checkbox input' do
|
424
|
+
output_buffer.should have_tag("input[@type='checkbox'][@name='author[post][3][author_ids][]']")
|
425
|
+
end
|
426
|
+
|
427
|
+
end
|
428
|
+
|
413
429
|
|
414
430
|
describe "when collection is an array" do
|
415
431
|
before do
|
416
432
|
@output_buffer = ''
|
417
433
|
@_collection = [["First", 1], ["Second", 2]]
|
418
434
|
mock_everything
|
419
|
-
|
420
|
-
|
435
|
+
|
421
436
|
concat(semantic_form_for(@fred) do |builder|
|
422
437
|
concat(builder.input(:posts, :as => :check_boxes, :collection => @_collection))
|
423
438
|
end)
|
@@ -425,8 +440,8 @@ describe 'check_boxes input' do
|
|
425
440
|
|
426
441
|
it "should use array items for labels and values" do
|
427
442
|
@_collection.each do |post|
|
428
|
-
output_buffer.should have_tag('form div.
|
429
|
-
output_buffer.should have_tag("form div.
|
443
|
+
output_buffer.should have_tag('form div.control-group div.controls label', /#{post.first}/)
|
444
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='author_post_ids_#{post.last}']")
|
430
445
|
end
|
431
446
|
end
|
432
447
|
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'date select input' do
|
5
|
+
|
6
|
+
include FormtasticSpecHelper
|
7
|
+
|
8
|
+
before do
|
9
|
+
@output_buffer = ''
|
10
|
+
mock_everything
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "general" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
output_buffer.replace ''
|
17
|
+
concat(semantic_form_for(@new_post) do |builder|
|
18
|
+
concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month, :day]))
|
19
|
+
end)
|
20
|
+
end
|
21
|
+
|
22
|
+
it_should_have_bootstrap_horizontal_wrapping
|
23
|
+
it_should_have_input_wrapper_with_class("date_select")
|
24
|
+
it_should_have_input_wrapper_with_class(:input)
|
25
|
+
it_should_have_input_wrapper_with_id("post_publish_at_input")
|
26
|
+
it_should_apply_error_logic_for_input_type(:date_select)
|
27
|
+
|
28
|
+
it 'should have a label with the label text inside the control-group' do
|
29
|
+
output_buffer.should have_tag('form div.control-group > label.control-label', /Publish at/)
|
30
|
+
output_buffer.should have_tag('form div.control-group label.control-label[@for="post_publish_at"]')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should not associate the legend label with the first select' do
|
34
|
+
output_buffer.should_not have_tag('form div.control-group label.control-label[@for="post_publish_at_1i"]')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should not have three labels for year, month and day' do
|
38
|
+
output_buffer.should_not have_tag('form div.control-group div.controls label', :count => 3)
|
39
|
+
output_buffer.should_not have_tag('form div.control-group div.controls label', /year/i)
|
40
|
+
output_buffer.should_not have_tag('form div.control-group div.controls label', /month/i)
|
41
|
+
output_buffer.should_not have_tag('form div.control-group div.controls label', /day/i)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should have three selects for year, month and day' do
|
45
|
+
output_buffer.should have_tag('form div.control-group div.controls select', :count => 3)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "when namespace is provided" do
|
50
|
+
|
51
|
+
before do
|
52
|
+
output_buffer.replace ''
|
53
|
+
concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
|
54
|
+
concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month, :day]))
|
55
|
+
end)
|
56
|
+
end
|
57
|
+
|
58
|
+
it_should_have_input_wrapper_with_id("context2_post_publish_at_input")
|
59
|
+
it_should_have_select_with_id("context2_post_publish_at_1i")
|
60
|
+
it_should_have_select_with_id("context2_post_publish_at_2i")
|
61
|
+
it_should_have_select_with_id("context2_post_publish_at_3i")
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "when index is provided" do
|
66
|
+
|
67
|
+
before do
|
68
|
+
@output_buffer = ''
|
69
|
+
mock_everything
|
70
|
+
|
71
|
+
concat(semantic_form_for(@new_post) do |builder|
|
72
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
73
|
+
concat(author.input(:created_at, :as => :date_select))
|
74
|
+
end)
|
75
|
+
end)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should index the id of the control-group' do
|
79
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_created_at_input")
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should index the id of the select tag' do
|
83
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_1i")
|
84
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_2i")
|
85
|
+
output_buffer.should have_tag("select#post_author_attributes_3_created_at_3i")
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should index the name of the select tag' do
|
89
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
|
90
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
|
91
|
+
output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
describe ':labels option' do
|
97
|
+
it "should provide a message that :labels is not supported" do
|
98
|
+
pending ':labels is not supported'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "when required" do
|
103
|
+
it "should add the required attribute to the input's html options" do
|
104
|
+
with_config :use_required_attribute, true do
|
105
|
+
concat(semantic_form_for(@new_post) do |builder|
|
106
|
+
concat(builder.input(:title, :as => :date_select, :required => true))
|
107
|
+
end)
|
108
|
+
output_buffer.should have_tag("select[@required]", :count => 3)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "when order does not include day" do
|
114
|
+
before do
|
115
|
+
output_buffer.replace ''
|
116
|
+
concat(semantic_form_for(@new_post) do |builder|
|
117
|
+
concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month]))
|
118
|
+
end)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should include a hidden input for day" do
|
122
|
+
output_buffer.should have_tag('input[@type="hidden"][@name="post[publish_at(3i)]"][@value="1"]')
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should not include a select for day" do
|
126
|
+
output_buffer.should_not have_tag('select[@name="post[publish_at(3i)]"]')
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "when order does not include month" do
|
131
|
+
before do
|
132
|
+
output_buffer.replace ''
|
133
|
+
concat(semantic_form_for(@new_post) do |builder|
|
134
|
+
concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :day]))
|
135
|
+
end)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should include a hidden input for month" do
|
139
|
+
output_buffer.should have_tag('input[@type="hidden"][@name="post[publish_at(2i)]"][@value="1"]')
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should not include a select for month" do
|
143
|
+
output_buffer.should_not have_tag('select[@name="post[publish_at(2i)]"]')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "when order does not include year" do
|
148
|
+
before do
|
149
|
+
output_buffer.replace ''
|
150
|
+
concat(semantic_form_for(@new_post) do |builder|
|
151
|
+
concat(builder.input(:publish_at, :as => :date_select, :order => [:month, :day]))
|
152
|
+
end)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should include a hidden input for month" do
|
156
|
+
output_buffer.should have_tag("input[@type=\"hidden\"][@name=\"post[publish_at(1i)]\"][@value=\"#{Time.now.year}\"]")
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should not include a select for month" do
|
160
|
+
output_buffer.should_not have_tag('select[@name="post[publish_at(1i)]"]')
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|