techthumb-formtastic 1.rails3.sha

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.
Files changed (58) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.textile +584 -0
  3. data/Rakefile +127 -0
  4. data/generators/form/USAGE +16 -0
  5. data/generators/form/form_generator.rb +120 -0
  6. data/generators/form/templates/view__form.html.erb +5 -0
  7. data/generators/form/templates/view__form.html.haml +4 -0
  8. data/generators/formtastic/formtastic_generator.rb +24 -0
  9. data/generators/formtastic/templates/formtastic.css +131 -0
  10. data/generators/formtastic/templates/formtastic.rb +54 -0
  11. data/generators/formtastic/templates/formtastic_changes.css +14 -0
  12. data/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +16 -0
  13. data/init.rb +5 -0
  14. data/lib/formtastic/i18n.rb +35 -0
  15. data/lib/formtastic/layout_helper.rb +10 -0
  16. data/lib/formtastic/railtie.rb +12 -0
  17. data/lib/formtastic/util.rb +36 -0
  18. data/lib/formtastic.rb +1870 -0
  19. data/lib/generators/formtastic/form/form_generator.rb +86 -0
  20. data/lib/generators/formtastic/install/install_generator.rb +24 -0
  21. data/lib/locale/en.yml +8 -0
  22. data/rails/init.rb +2 -0
  23. data/spec/buttons_spec.rb +166 -0
  24. data/spec/commit_button_spec.rb +401 -0
  25. data/spec/custom_builder_spec.rb +98 -0
  26. data/spec/defaults_spec.rb +20 -0
  27. data/spec/error_proc_spec.rb +27 -0
  28. data/spec/errors_spec.rb +105 -0
  29. data/spec/form_helper_spec.rb +142 -0
  30. data/spec/helpers/layout_helper_spec.rb +21 -0
  31. data/spec/i18n_spec.rb +152 -0
  32. data/spec/include_blank_spec.rb +74 -0
  33. data/spec/input_spec.rb +786 -0
  34. data/spec/inputs/boolean_input_spec.rb +104 -0
  35. data/spec/inputs/check_boxes_input_spec.rb +426 -0
  36. data/spec/inputs/country_input_spec.rb +118 -0
  37. data/spec/inputs/date_input_spec.rb +168 -0
  38. data/spec/inputs/datetime_input_spec.rb +310 -0
  39. data/spec/inputs/file_input_spec.rb +34 -0
  40. data/spec/inputs/hidden_input_spec.rb +78 -0
  41. data/spec/inputs/numeric_input_spec.rb +44 -0
  42. data/spec/inputs/password_input_spec.rb +46 -0
  43. data/spec/inputs/radio_input_spec.rb +243 -0
  44. data/spec/inputs/select_input_spec.rb +546 -0
  45. data/spec/inputs/string_input_spec.rb +64 -0
  46. data/spec/inputs/text_input_spec.rb +34 -0
  47. data/spec/inputs/time_input_spec.rb +206 -0
  48. data/spec/inputs/time_zone_input_spec.rb +110 -0
  49. data/spec/inputs_spec.rb +476 -0
  50. data/spec/label_spec.rb +89 -0
  51. data/spec/semantic_errors_spec.rb +98 -0
  52. data/spec/semantic_fields_for_spec.rb +45 -0
  53. data/spec/spec.opts +2 -0
  54. data/spec/spec_helper.rb +289 -0
  55. data/spec/support/custom_macros.rb +494 -0
  56. data/spec/support/output_buffer.rb +4 -0
  57. data/spec/support/test_environment.rb +45 -0
  58. metadata +235 -0
@@ -0,0 +1,168 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'date 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
+ @form = semantic_form_for(@new_post) do |builder|
18
+ concat(builder.input(:publish_at, :as => :date))
19
+ end
20
+ end
21
+
22
+ it_should_have_input_wrapper_with_class("date")
23
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
24
+ it_should_have_a_nested_fieldset
25
+ it_should_apply_error_logic_for_input_type(:date)
26
+
27
+ it 'should have a legend and label with the label text inside the fieldset' do
28
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
29
+ output_buffer.should have_tag('form li.date fieldset legend.label label', /Publish at/)
30
+ end
31
+
32
+ it 'should associate the legend label with the first select' do
33
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
34
+ output_buffer.should have_tag('form li.date fieldset legend.label')
35
+ output_buffer.should have_tag('form li.date fieldset legend.label label')
36
+ output_buffer.should have_tag('form li.date fieldset legend.label label[@for]')
37
+ output_buffer.should have_tag('form li.date fieldset legend.label label[@for="post_publish_at_1i"]')
38
+ end
39
+
40
+ it 'should have an ordered list of three items inside the fieldset' do
41
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
42
+ output_buffer.should have_tag('form li.date fieldset ol')
43
+ output_buffer.should have_tag('form li.date fieldset ol li', :count => 3)
44
+ end
45
+
46
+ it 'should have three labels for year, month and day' do
47
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
48
+ output_buffer.should have_tag('form li.date fieldset ol li label', :count => 3)
49
+ output_buffer.should have_tag('form li.date fieldset ol li label', /year/i)
50
+ output_buffer.should have_tag('form li.date fieldset ol li label', /month/i)
51
+ output_buffer.should have_tag('form li.date fieldset ol li label', /day/i)
52
+ end
53
+
54
+ it 'should have three selects for year, month and day' do
55
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
56
+ output_buffer.should have_tag('form li.date fieldset ol li select', :count => 3)
57
+ end
58
+ end
59
+
60
+ describe ':selected option' do
61
+
62
+ describe "when the object has a value" do
63
+ it "should select the object value (ignoring :selected)" do
64
+ output_buffer.replace ''
65
+ @new_post.stub!(:created_at => Time.mktime(2012))
66
+ with_deprecation_silenced do
67
+ @form = semantic_form_for(@new_post) do |builder|
68
+ concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999)))
69
+ end
70
+ end
71
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
72
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
73
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='2012'][@selected]", :count => 1)
74
+ end
75
+ end
76
+
77
+ describe 'when the object has no value (nil)' do
78
+ it "should select the :selected if provided as a Date" do
79
+ output_buffer.replace ''
80
+ @new_post.stub!(:created_at => nil)
81
+ with_deprecation_silenced do
82
+ @form = semantic_form_for(@new_post) do |builder|
83
+ concat(builder.input(:created_at, :as => :date, :selected => Date.new(1999)))
84
+ end
85
+ end
86
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
87
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
88
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
89
+ end
90
+
91
+ it "should select the :selected if provided as a Time" do
92
+ output_buffer.replace ''
93
+ @new_post.stub!(:created_at => nil)
94
+ with_deprecation_silenced do
95
+ @form = semantic_form_for(@new_post) do |builder|
96
+ concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999)))
97
+ end
98
+ end
99
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
100
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
101
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
102
+ end
103
+
104
+ it "should not select an option if the :selected is provided as nil" do
105
+ output_buffer.replace ''
106
+ @new_post.stub!(:created_at => nil)
107
+ with_deprecation_silenced do
108
+ @form = semantic_form_for(@new_post) do |builder|
109
+ concat(builder.input(:created_at, :as => :date, :selected => nil))
110
+ end
111
+ end
112
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
113
+ output_buffer.should_not have_tag("form li ol li select#post_created_at_1i option[@selected]")
114
+ end
115
+
116
+ it "should select nothing if a :selected is not provided" do
117
+ output_buffer.replace ''
118
+ @new_post.stub!(:created_at => nil)
119
+ form = semantic_form_for(@new_post) do |builder|
120
+ concat(builder.input(:created_at, :as => :date))
121
+ end
122
+ output_buffer.concat(form) if Formtastic::Util.rails3?
123
+ output_buffer.should_not have_tag("form li ol li select option[@selected]")
124
+
125
+ end
126
+ end
127
+
128
+ end
129
+
130
+ describe ':labels option' do
131
+ fields = [:year, :month, :day]
132
+ fields.each do |field|
133
+ it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
134
+ output_buffer.replace ''
135
+ form = semantic_form_for(@new_post) do |builder|
136
+ concat(builder.input(:created_at, :as => :date, :labels => { field => "another #{field} label" }))
137
+ end
138
+ output_buffer.concat(form) if Formtastic::Util.rails3?
139
+ output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length)
140
+ fields.each do |f|
141
+ output_buffer.should have_tag('form li.date fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
142
+ end
143
+ end
144
+
145
+ it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
146
+ output_buffer.replace ''
147
+ form = semantic_form_for(@new_post) do |builder|
148
+ concat(builder.input(:created_at, :as => :date, :labels => { field => "" }))
149
+ end
150
+ output_buffer.concat(form) if Formtastic::Util.rails3?
151
+ output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length-1)
152
+ fields.each do |f|
153
+ output_buffer.should have_tag('form li.date fieldset ol li label', /#{f}/i) unless field == f
154
+ end
155
+ end
156
+ end
157
+ end
158
+
159
+ it 'should warn about :selected deprecation' do
160
+ with_deprecation_silenced do
161
+ ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
162
+ semantic_form_for(@new_post) do |builder|
163
+ concat(builder.input(:created_at, :as => :date, :selected => Date.new(1999)))
164
+ end
165
+ end
166
+ end
167
+
168
+ end
@@ -0,0 +1,310 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'datetime input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @new_post.should_receive(:publish_at=).any_number_of_times
13
+ @new_post.should_receive(:created_at=).any_number_of_times
14
+ @bob.should_receive(:created_at=).any_number_of_times
15
+ @new_post.should_receive(:title=).any_number_of_times # Macro stuff forces this.
16
+ end
17
+
18
+ describe "general" do
19
+
20
+ before do
21
+ output_buffer.replace ''
22
+ @form = semantic_form_for(@new_post) do |builder|
23
+ concat(builder.input(:publish_at, :as => :datetime))
24
+ end
25
+ end
26
+
27
+ it_should_have_input_wrapper_with_class("datetime")
28
+ it_should_have_input_wrapper_with_id("post_publish_at_input")
29
+ it_should_have_a_nested_fieldset
30
+ it_should_apply_error_logic_for_input_type(:datetime)
31
+
32
+ it 'should have a legend and label with the label text inside the fieldset' do
33
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
34
+ output_buffer.should have_tag('form li.datetime fieldset legend.label label', /Publish at/)
35
+ end
36
+
37
+ it 'should associate the legend label with the first select' do
38
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
39
+ output_buffer.should have_tag('form li.datetime fieldset legend.label label[@for="post_publish_at_1i"]')
40
+ end
41
+
42
+ it 'should have an ordered list of five items inside the fieldset' do
43
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
44
+ output_buffer.should have_tag('form li.datetime fieldset ol')
45
+ output_buffer.should have_tag('form li.datetime fieldset ol li', :count => 5)
46
+ end
47
+
48
+ it 'should have five labels for year, month, day, hour and minute' do
49
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
50
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', :count => 5)
51
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /year/i)
52
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /month/i)
53
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /day/i)
54
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /hour/i)
55
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /minute/i)
56
+ end
57
+
58
+ it 'should have five selects for year, month, day, hour and minute' do
59
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
60
+ output_buffer.should have_tag('form li.datetime fieldset ol li select', :count => 5)
61
+ end
62
+
63
+ it 'should generate a sanitized label and matching ids for attribute' do
64
+ form = semantic_form_for(@new_post) do |builder|
65
+ fields = builder.semantic_fields_for(@bob, :index => 10) do |bob_builder|
66
+ concat(bob_builder.input(:created_at, :as => :datetime))
67
+ end
68
+ concat(fields)
69
+ end
70
+ output_buffer.concat(form) if Formtastic::Util.rails3?
71
+
72
+ 1.upto(5) do |i|
73
+ output_buffer.should have_tag("form li fieldset ol li label[@for='post_author_10_created_at_#{i}i']")
74
+ output_buffer.should have_tag("form li fieldset ol li #post_author_10_created_at_#{i}i")
75
+ end
76
+ end
77
+ end
78
+
79
+ describe 'when :discard_input => true is set' do
80
+ it 'should use default attribute value when it is not nil' do
81
+ @new_post.stub!(:publish_at).and_return(Date.new(2007,12,27))
82
+ form = semantic_form_for(@new_post) do |builder|
83
+ concat(builder.input(:publish_at, :as => :datetime, :discard_day => true))
84
+ end
85
+
86
+ output_buffer.concat(form) if Formtastic::Util.rails3?
87
+ output_buffer.should have_tag("form li input[@type='hidden'][@value='27']")
88
+ end
89
+ end
90
+
91
+ describe 'inputs order' do
92
+ it 'should have a default' do
93
+ output_buffer.replace ''
94
+ semantic_form_for(@new_post) do |builder|
95
+ self.should_receive(:select_year).once.ordered.and_return('')
96
+ self.should_receive(:select_month).once.ordered.and_return('')
97
+ self.should_receive(:select_day).once.ordered.and_return('')
98
+ builder.input(:publish_at, :as => :datetime)
99
+ end
100
+ end
101
+
102
+ it 'should be specified with :order option' do
103
+ ::I18n.backend.store_translations 'en', :date => { :order => [:month, :year, :day] }
104
+ output_buffer.replace ''
105
+ semantic_form_for(@new_post) do |builder|
106
+ self.should_receive(:select_month).once.ordered.and_return('')
107
+ self.should_receive(:select_year).once.ordered.and_return('')
108
+ self.should_receive(:select_day).once.ordered.and_return('')
109
+ builder.input(:publish_at, :as => :datetime)
110
+ ::I18n.backend.store_translations 'en', :date => nil
111
+ end
112
+ end
113
+
114
+ it 'should be changed through I18n' do
115
+ output_buffer.replace ''
116
+ semantic_form_for(@new_post) do |builder|
117
+ self.should_receive(:select_day).once.ordered.and_return('')
118
+ self.should_receive(:select_month).once.ordered.and_return('')
119
+ self.should_receive(:select_year).once.ordered.and_return('')
120
+ builder.input(:publish_at, :as => :datetime, :order => [:day, :month, :year])
121
+ end
122
+ end
123
+ end
124
+
125
+ describe 'when the locale changes the label text' do
126
+ before do
127
+ ::I18n.backend.store_translations 'en', :datetime => {:prompts => {
128
+ :year => 'The Year', :month => 'The Month', :day => 'The Day',
129
+ :hour => 'The Hour', :minute => 'The Minute'
130
+ }}
131
+ output_buffer.replace ''
132
+ @form = semantic_form_for(@new_post) do |builder|
133
+ concat(builder.input(:publish_at, :as => :datetime))
134
+ end
135
+ end
136
+
137
+ after do
138
+ ::I18n.backend.store_translations 'en', :formtastic => {
139
+ :year => nil, :month => nil, :day => nil,
140
+ :hour => nil, :minute => nil
141
+ }
142
+ end
143
+
144
+ it 'should have translated labels for year, month, day, hour and minute' do
145
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
146
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /The Year/)
147
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /The Month/)
148
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /The Day/)
149
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /The Hour/)
150
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /The Minute/)
151
+ end
152
+ end
153
+
154
+ describe 'when no object is given' do
155
+ before(:each) do
156
+ output_buffer.replace ''
157
+ @form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
158
+ concat(builder.input(:publish_at, :as => :datetime))
159
+ end
160
+ end
161
+
162
+ it 'should have fieldset with legend - classified as a label' do
163
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
164
+ output_buffer.should have_tag('form li.datetime fieldset legend.label', /Publish at/)
165
+ end
166
+
167
+ it 'should have labels for each input' do
168
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
169
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', :count => 5)
170
+ end
171
+
172
+ it 'should have selects for each inputs' do
173
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
174
+ output_buffer.should have_tag('form li.datetime fieldset ol li select', :count => 5)
175
+ end
176
+ end
177
+
178
+ #describe 'when an object is given and the attribute value is nil' do
179
+ # before(:each) do
180
+ # @new_post.stub!(:publish_at).and_return(nil)
181
+ # output_buffer.replace ''
182
+ # semantic_form_for(@new_post) do |builder|
183
+ # concat(builder.input(:publish_at, :as => :datetime))
184
+ # end
185
+ # end
186
+ #
187
+ # it 'should not select a value' do
188
+ # output_buffer.should_not have_tag('form li.datetime option[@selected]')
189
+ # end
190
+ #
191
+ #end
192
+
193
+ describe ':selected option' do
194
+
195
+ describe "when the object has a value" do
196
+ it "should select the object value (ignoring :selected)" do
197
+ output_buffer.replace ''
198
+ @new_post.stub!(:created_at => Time.mktime(2012))
199
+ with_deprecation_silenced do
200
+ @form = semantic_form_for(@new_post) do |builder|
201
+ concat(builder.input(:created_at, :as => :datetime, :selected => Time.mktime(1999)))
202
+ end
203
+ end
204
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
205
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
206
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='2012'][@selected]", :count => 1)
207
+ end
208
+ end
209
+
210
+ describe 'when the object has no value' do
211
+ it "should select the :selected if provided as a Date" do
212
+ output_buffer.replace ''
213
+ @new_post.stub!(:created_at => nil)
214
+ with_deprecation_silenced do
215
+ @form = semantic_form_for(@new_post) do |builder|
216
+ concat(builder.input(:created_at, :as => :datetime, :selected => Date.new(1999)))
217
+ end
218
+ end
219
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
220
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
221
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
222
+ end
223
+
224
+ it "should select the :selected if provided as a Time" do
225
+ output_buffer.replace ''
226
+ @new_post.stub!(:created_at => nil)
227
+ with_deprecation_silenced do
228
+ @form = semantic_form_for(@new_post) do |builder|
229
+ concat(builder.input(:created_at, :as => :datetime, :selected => Time.mktime(1999)))
230
+ end
231
+ end
232
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
233
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
234
+ output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
235
+ end
236
+
237
+ it "should not select an option if the :selected is provided as nil" do
238
+ output_buffer.replace ''
239
+ @new_post.stub!(:created_at => nil)
240
+ with_deprecation_silenced do
241
+ @form = semantic_form_for(@new_post) do |builder|
242
+ concat(builder.input(:created_at, :as => :datetime, :selected => nil))
243
+ end
244
+ end
245
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
246
+ output_buffer.should_not have_tag("form li ol li select#post_created_at_1i option[@selected]")
247
+ end
248
+
249
+ it "should select nothing if a :selected is not provided" do
250
+ output_buffer.replace ''
251
+ @new_post.stub!(:created_at => nil)
252
+ form = semantic_form_for(@new_post) do |builder|
253
+ concat(builder.input(:created_at, :as => :datetime))
254
+ end
255
+ output_buffer.concat(form) if Formtastic::Util.rails3?
256
+ output_buffer.should_not have_tag("form li ol li select option[@selected]")
257
+ end
258
+ end
259
+
260
+ it 'should warn about :selected deprecation' do
261
+ with_deprecation_silenced do
262
+ ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
263
+ semantic_form_for(@new_post) do |builder|
264
+ concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999)))
265
+ end
266
+ end
267
+ end
268
+
269
+ end
270
+
271
+ describe ':labels option' do
272
+ fields = [:year, :month, :day, :hour, :minute]
273
+ fields.each do |field|
274
+ it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
275
+ output_buffer.replace ''
276
+ form = semantic_form_for(@new_post) do |builder|
277
+ concat(builder.input(:created_at, :as => :datetime, :labels => { field => "another #{field} label" }))
278
+ end
279
+ output_buffer.concat(form) if Formtastic::Util.rails3?
280
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', :count => fields.length)
281
+ fields.each do |f|
282
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
283
+ end
284
+ end
285
+
286
+ it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
287
+ output_buffer.replace ''
288
+ form = semantic_form_for(@new_post) do |builder|
289
+ concat(builder.input(:created_at, :as => :datetime, :labels => { field => "" }))
290
+ end
291
+ output_buffer.concat(form) if Formtastic::Util.rails3?
292
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', :count => fields.length-1)
293
+ fields.each do |f|
294
+ output_buffer.should have_tag('form li.datetime fieldset ol li label', /#{f}/i) unless field == f
295
+ end
296
+ end
297
+ end
298
+ end
299
+
300
+ it 'should warn about :selected deprecation' do
301
+ with_deprecation_silenced do
302
+ ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
303
+ semantic_form_for(@new_post) do |builder|
304
+ concat(builder.input(:created_at, :as => :datetime, :selected => Time.mktime(1999)))
305
+ end
306
+ end
307
+ end
308
+
309
+ end
310
+
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'file input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @form = semantic_form_for(@new_post) do |builder|
13
+ concat(builder.input(:body, :as => :file))
14
+ end
15
+ end
16
+
17
+ it_should_have_input_wrapper_with_class("file")
18
+ it_should_have_input_wrapper_with_id("post_body_input")
19
+ it_should_have_label_with_text(/Body/)
20
+ it_should_have_label_for("post_body")
21
+ it_should_have_input_with_id("post_body")
22
+ it_should_have_input_with_name("post[body]")
23
+ it_should_apply_error_logic_for_input_type(:file)
24
+
25
+ it 'should use input_html to style inputs' do
26
+ form = semantic_form_for(@new_post) do |builder|
27
+ concat(builder.input(:title, :as => :file, :input_html => { :class => 'myclass' }))
28
+ end
29
+ output_buffer.concat(form) if Formtastic::Util.rails3?
30
+ output_buffer.should have_tag("form li input.myclass")
31
+ end
32
+
33
+ end
34
+
@@ -0,0 +1,78 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'hidden input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @form = semantic_form_for(@new_post) do |builder|
13
+ concat(builder.input(:secret, :as => :hidden))
14
+ concat(builder.input(:author_id, :as => :hidden, :value => 99))
15
+ concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
16
+ concat(builder.input(:reviewer, :as => :hidden, :input_html => {:class => 'new_post_reviewer', :id => 'new_post_reviewer'}))
17
+ concat(builder.input(:author, :as => :hidden, :value => 'direct_value', :input_html => {:value => "formtastic_value"}))
18
+ end
19
+ end
20
+
21
+ it_should_have_input_wrapper_with_class("hidden")
22
+ it_should_have_input_wrapper_with_id("post_secret_input")
23
+ it_should_not_have_a_label
24
+
25
+ it "should generate a input field" do
26
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
27
+ output_buffer.should have_tag("form li input#post_secret")
28
+ output_buffer.should have_tag("form li input#post_secret[@type=\"hidden\"]")
29
+ output_buffer.should have_tag("form li input#post_secret[@name=\"post[secret]\"]")
30
+ end
31
+
32
+ it "should pass any explicitly specified value - using :value" do
33
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
34
+ output_buffer.should have_tag("form li input#post_author_id[@type=\"hidden\"][@value=\"99\"]")
35
+ end
36
+
37
+ # Handle Formtastic :input_html options for consistency.
38
+ it "should pass any explicitly specified value - using :input_html options" do
39
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
40
+ output_buffer.should have_tag("form li input#post_published[@type=\"hidden\"][@value=\"true\"]")
41
+ end
42
+
43
+ it "should pass any option specified using :input_html" do
44
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
45
+ output_buffer.should have_tag("form li input#new_post_reviewer[@type=\"hidden\"][@class=\"new_post_reviewer\"]")
46
+ end
47
+
48
+ it "should prefer :input_html over directly supplied options" do
49
+ output_buffer.concat(@form) if Formtastic::Util.rails3?
50
+ output_buffer.should have_tag("form li input#post_author[@type=\"hidden\"][@value=\"formtastic_value\"]")
51
+ end
52
+
53
+ it "should not render inline errors" do
54
+ @errors = mock('errors')
55
+ @errors.stub!(:[]).with(:secret).and_return(["foo", "bah"])
56
+ @new_post.stub!(:errors).and_return(@errors)
57
+
58
+ form = semantic_form_for(@new_post) do |builder|
59
+ concat(builder.input(:secret, :as => :hidden))
60
+ end
61
+
62
+ output_buffer.concat(form) if Formtastic::Util.rails3?
63
+ output_buffer.should_not have_tag("form li p.inline-errors")
64
+ output_buffer.should_not have_tag("form li ul.errors")
65
+ end
66
+
67
+ it "should not render inline hints" do
68
+ form = semantic_form_for(@new_post) do |builder|
69
+ concat(builder.input(:secret, :as => :hidden, :hint => "all your base are belong to use"))
70
+ end
71
+
72
+ output_buffer.concat(form) if Formtastic::Util.rails3?
73
+ output_buffer.should_not have_tag("form li p.inline-hints")
74
+ output_buffer.should_not have_tag("form li ul.hints")
75
+ end
76
+
77
+ end
78
+
@@ -0,0 +1,44 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'numeric input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @form = semantic_form_for(@new_post) do |builder|
13
+ concat(builder.input(:title, :as => :numeric))
14
+ end
15
+ end
16
+
17
+ it_should_have_input_wrapper_with_class(:numeric)
18
+ it_should_have_input_wrapper_with_id("post_title_input")
19
+ it_should_have_label_with_text(/Title/)
20
+ it_should_have_label_for("post_title")
21
+ it_should_have_input_with_id("post_title")
22
+ it_should_have_input_with_type(:text)
23
+ it_should_have_input_with_name("post[title]")
24
+ it_should_use_default_text_field_size_when_method_has_no_database_column(:string)
25
+ it_should_apply_custom_input_attributes_when_input_html_provided(:string)
26
+ it_should_apply_custom_for_to_label_when_input_html_id_provided(:string)
27
+ it_should_apply_error_logic_for_input_type(:numeric)
28
+
29
+ describe "when no object is provided" do
30
+ before do
31
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
32
+ concat(builder.input(:title, :as => :numeric))
33
+ end
34
+ end
35
+
36
+ it_should_have_label_with_text(/Title/)
37
+ it_should_have_label_for("project_title")
38
+ it_should_have_input_with_id("project_title")
39
+ it_should_have_input_with_type(:text)
40
+ it_should_have_input_with_name("project[title]")
41
+ end
42
+
43
+ end
44
+
@@ -0,0 +1,46 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'password input' do
5
+
6
+ include FormtasticSpecHelper
7
+
8
+ before do
9
+ @output_buffer = ''
10
+ mock_everything
11
+
12
+ @form = semantic_form_for(@new_post) do |builder|
13
+ concat(builder.input(:title, :as => :password))
14
+ end
15
+ end
16
+
17
+ it_should_have_input_wrapper_with_class(:password)
18
+ it_should_have_input_wrapper_with_id("post_title_input")
19
+ it_should_have_label_with_text(/Title/)
20
+ it_should_have_label_for("post_title")
21
+ it_should_have_input_with_id("post_title")
22
+ it_should_have_input_with_type(:password)
23
+ it_should_have_input_with_name("post[title]")
24
+ it_should_have_maxlength_matching_column_limit
25
+ it_should_use_default_text_field_size_for_columns_longer_than_default_text_field_size(:string)
26
+ it_should_use_column_size_for_columns_shorter_than_default_text_field_size(:string)
27
+ it_should_use_default_text_field_size_when_method_has_no_database_column(:string)
28
+ it_should_apply_custom_input_attributes_when_input_html_provided(:string)
29
+ it_should_apply_custom_for_to_label_when_input_html_id_provided(:string)
30
+ it_should_apply_error_logic_for_input_type(:password)
31
+
32
+ describe "when no object is provided" do
33
+ before do
34
+ @form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
35
+ concat(builder.input(:title, :as => :password))
36
+ end
37
+ end
38
+
39
+ it_should_have_label_with_text(/Title/)
40
+ it_should_have_label_for("project_title")
41
+ it_should_have_input_with_id("project_title")
42
+ it_should_have_input_with_type(:password)
43
+ it_should_have_input_with_name("project[title]")
44
+ end
45
+
46
+ end