formtastic 1.0.1 → 1.1.0.beta
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/README.textile +2 -2
- data/Rakefile +33 -8
- data/generators/formtastic/templates/formtastic.css +3 -18
- data/init.rb +5 -0
- data/lib/formtastic.rb +180 -82
- data/lib/formtastic/i18n.rb +8 -9
- data/lib/formtastic/layout_helper.rb +0 -1
- data/lib/formtastic/railtie.rb +12 -0
- data/lib/formtastic/util.rb +7 -0
- data/lib/generators/formtastic/form/form_generator.rb +86 -0
- data/lib/generators/formtastic/install/install_generator.rb +24 -0
- data/rails/init.rb +1 -6
- data/spec/buttons_spec.rb +25 -8
- data/spec/commit_button_spec.rb +67 -29
- data/spec/custom_builder_spec.rb +40 -4
- data/spec/defaults_spec.rb +1 -1
- data/spec/error_proc_spec.rb +1 -1
- data/spec/errors_spec.rb +3 -2
- data/spec/form_helper_spec.rb +33 -17
- data/spec/helpers/layout_helper_spec.rb +21 -0
- data/spec/i18n_spec.rb +13 -9
- data/spec/include_blank_spec.rb +9 -5
- data/spec/input_spec.rb +188 -48
- data/spec/inputs/boolean_input_spec.rb +14 -7
- data/spec/inputs/check_boxes_input_spec.rb +150 -20
- data/spec/inputs/country_input_spec.rb +9 -5
- data/spec/inputs/date_input_spec.rb +21 -9
- data/spec/inputs/datetime_input_spec.rb +33 -14
- data/spec/inputs/file_input_spec.rb +4 -3
- data/spec/inputs/hidden_input_spec.rb +11 -4
- data/spec/inputs/numeric_input_spec.rb +3 -3
- data/spec/inputs/password_input_spec.rb +3 -3
- data/spec/inputs/radio_input_spec.rb +29 -10
- data/spec/inputs/select_input_spec.rb +66 -26
- data/spec/inputs/string_input_spec.rb +5 -4
- data/spec/inputs/text_input_spec.rb +4 -3
- data/spec/inputs/time_input_spec.rb +26 -10
- data/spec/inputs/time_zone_input_spec.rb +11 -5
- data/spec/inputs_spec.rb +103 -39
- data/spec/label_spec.rb +5 -3
- data/spec/semantic_errors_spec.rb +7 -7
- data/spec/semantic_fields_for_spec.rb +5 -4
- data/spec/spec_helper.rb +86 -38
- data/spec/{custom_macros.rb → support/custom_macros.rb} +69 -35
- data/spec/support/output_buffer.rb +4 -0
- data/spec/support/test_environment.rb +45 -0
- metadata +26 -28
- data/spec/layout_helper_spec.rb +0 -29
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'numeric input' do
|
5
5
|
|
@@ -9,7 +9,7 @@ describe 'numeric input' do
|
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
11
|
|
12
|
-
semantic_form_for(@new_post) do |builder|
|
12
|
+
@form = semantic_form_for(@new_post) do |builder|
|
13
13
|
concat(builder.input(:title, :as => :numeric))
|
14
14
|
end
|
15
15
|
end
|
@@ -28,7 +28,7 @@ describe 'numeric input' do
|
|
28
28
|
|
29
29
|
describe "when no object is provided" do
|
30
30
|
before do
|
31
|
-
semantic_form_for(:project, :url => 'http://test.host/') do |builder|
|
31
|
+
@form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
|
32
32
|
concat(builder.input(:title, :as => :numeric))
|
33
33
|
end
|
34
34
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'password input' do
|
5
5
|
|
@@ -9,7 +9,7 @@ describe 'password input' do
|
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
11
|
|
12
|
-
semantic_form_for(@new_post) do |builder|
|
12
|
+
@form = semantic_form_for(@new_post) do |builder|
|
13
13
|
concat(builder.input(:title, :as => :password))
|
14
14
|
end
|
15
15
|
end
|
@@ -31,7 +31,7 @@ describe 'password input' do
|
|
31
31
|
|
32
32
|
describe "when no object is provided" do
|
33
33
|
before do
|
34
|
-
semantic_form_for(:project, :url => 'http://test.host/') do |builder|
|
34
|
+
@form = semantic_form_for(:project, :url => 'http://test.host/') do |builder|
|
35
35
|
concat(builder.input(:title, :as => :password))
|
36
36
|
end
|
37
37
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'radio input' do
|
5
5
|
|
@@ -12,7 +12,7 @@ describe 'radio input' do
|
|
12
12
|
|
13
13
|
describe 'for belongs_to association' do
|
14
14
|
before do
|
15
|
-
semantic_form_for(@new_post) do |builder|
|
15
|
+
@form = semantic_form_for(@new_post) do |builder|
|
16
16
|
concat(builder.input(:author, :as => :radio, :value_as_class => true))
|
17
17
|
end
|
18
18
|
end
|
@@ -24,26 +24,31 @@ describe 'radio input' do
|
|
24
24
|
it_should_use_the_collection_when_provided(:radio, 'input')
|
25
25
|
|
26
26
|
it 'should generate a legend containing a label with text for the input' do
|
27
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
27
28
|
output_buffer.should have_tag('form li fieldset legend.label label')
|
28
29
|
output_buffer.should have_tag('form li fieldset legend.label label', /Author/)
|
29
30
|
end
|
30
31
|
|
31
32
|
it 'should not link the label within the legend to any input' do
|
33
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
32
34
|
output_buffer.should_not have_tag('form li fieldset legend label[@for]')
|
33
35
|
end
|
34
36
|
|
35
37
|
it 'should generate an ordered list with a list item for each choice' do
|
38
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
36
39
|
output_buffer.should have_tag('form li fieldset ol')
|
37
40
|
output_buffer.should have_tag('form li fieldset ol li', :count => ::Author.find(:all).size)
|
38
41
|
end
|
39
42
|
|
40
43
|
it 'should have one option with a "checked" attribute' do
|
44
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
41
45
|
output_buffer.should have_tag('form li input[@checked]', :count => 1)
|
42
46
|
end
|
43
47
|
|
44
48
|
describe "each choice" do
|
45
49
|
|
46
50
|
it 'should contain a label for the radio input with a nested input and label text' do
|
51
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
47
52
|
::Author.find(:all).each do |author|
|
48
53
|
output_buffer.should have_tag('form li fieldset ol li label', /#{author.to_label}/)
|
49
54
|
output_buffer.should have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
|
@@ -51,12 +56,14 @@ describe 'radio input' do
|
|
51
56
|
end
|
52
57
|
|
53
58
|
it 'should use values as li.class when value_as_class is true' do
|
59
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
54
60
|
::Author.find(:all).each do |author|
|
55
61
|
output_buffer.should have_tag("form li fieldset ol li.author_#{author.id} label")
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
59
65
|
it "should have a radio input" do
|
66
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
60
67
|
::Author.find(:all).each do |author|
|
61
68
|
output_buffer.should have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
|
62
69
|
output_buffer.should have_tag("form li fieldset ol li label input[@type='radio']")
|
@@ -70,19 +77,21 @@ describe 'radio input' do
|
|
70
77
|
@new_post.author.id.should == @bob.id
|
71
78
|
@new_post.author.should == @bob
|
72
79
|
|
73
|
-
semantic_form_for(@new_post) do |builder|
|
80
|
+
form = semantic_form_for(@new_post) do |builder|
|
74
81
|
concat(builder.input(:author, :as => :radio))
|
75
82
|
end
|
76
83
|
|
84
|
+
output_buffer.concat(form) if Formtastic::Util.rails3?
|
77
85
|
output_buffer.should have_tag("form li fieldset ol li label input[@checked='checked']")
|
78
86
|
end
|
79
87
|
|
80
88
|
it "should not contain invalid HTML attributes" do
|
81
89
|
|
82
|
-
semantic_form_for(@new_post) do |builder|
|
90
|
+
form = semantic_form_for(@new_post) do |builder|
|
83
91
|
concat(builder.input(:author, :as => :radio))
|
84
92
|
end
|
85
93
|
|
94
|
+
output_buffer.concat(form) if Formtastic::Util.rails3?
|
86
95
|
output_buffer.should_not have_tag("form li fieldset ol li input[@find_options]")
|
87
96
|
end
|
88
97
|
|
@@ -91,20 +100,23 @@ describe 'radio input' do
|
|
91
100
|
describe 'and no object is given' do
|
92
101
|
before(:each) do
|
93
102
|
output_buffer.replace ''
|
94
|
-
semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
103
|
+
@form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
95
104
|
concat(builder.input(:author_id, :as => :radio, :collection => ::Author.find(:all)))
|
96
105
|
end
|
97
106
|
end
|
98
107
|
|
99
108
|
it 'should generate a fieldset with legend' do
|
109
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
100
110
|
output_buffer.should have_tag('form li fieldset legend', /Author/)
|
101
111
|
end
|
102
112
|
|
103
113
|
it 'should generate an li tag for each item in the collection' do
|
114
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
104
115
|
output_buffer.should have_tag('form li fieldset ol li', :count => ::Author.find(:all).size)
|
105
116
|
end
|
106
117
|
|
107
118
|
it 'should generate labels for each item' do
|
119
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
108
120
|
::Author.find(:all).each do |author|
|
109
121
|
output_buffer.should have_tag('form li fieldset ol li label', /#{author.to_label}/)
|
110
122
|
output_buffer.should have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
|
@@ -113,15 +125,17 @@ describe 'radio input' do
|
|
113
125
|
|
114
126
|
it 'should html escape the label string' do
|
115
127
|
output_buffer.replace ''
|
116
|
-
semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
128
|
+
form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
117
129
|
concat(builder.input(:author_id, :as => :radio, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
|
118
130
|
end
|
131
|
+
output_buffer.concat(form) if Formtastic::Util.rails3?
|
119
132
|
output_buffer.should have_tag('form li fieldset ol li label') do |label|
|
120
133
|
label.body.should match /<b>Item [12]<\/b>$/
|
121
134
|
end
|
122
135
|
end
|
123
136
|
|
124
137
|
it 'should generate inputs for each item' do
|
138
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
125
139
|
::Author.find(:all).each do |author|
|
126
140
|
output_buffer.should have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
|
127
141
|
output_buffer.should have_tag("form li fieldset ol li label input[@type='radio']")
|
@@ -142,13 +156,14 @@ describe 'radio input' do
|
|
142
156
|
@new_post.stub!(:author_ids).and_return(nil)
|
143
157
|
|
144
158
|
with_deprecation_silenced do
|
145
|
-
semantic_form_for(@new_post) do |builder|
|
159
|
+
@form = semantic_form_for(@new_post) do |builder|
|
146
160
|
concat(builder.input(:authors, :as => :radio, :selected => nil))
|
147
161
|
end
|
148
162
|
end
|
149
163
|
end
|
150
164
|
|
151
165
|
it 'should not have any selected item(s)' do
|
166
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
152
167
|
output_buffer.should_not have_tag("form li fieldset ol li label input[@checked='checked']")
|
153
168
|
end
|
154
169
|
end
|
@@ -157,13 +172,14 @@ describe 'radio input' do
|
|
157
172
|
before do
|
158
173
|
@new_post.stub!(:author_ids).and_return(nil)
|
159
174
|
with_deprecation_silenced do
|
160
|
-
semantic_form_for(@new_post) do |builder|
|
175
|
+
@form = semantic_form_for(@new_post) do |builder|
|
161
176
|
concat(builder.input(:authors, :as => :radio, :selected => @fred.id))
|
162
177
|
end
|
163
178
|
end
|
164
179
|
end
|
165
180
|
|
166
181
|
it "should have one item selected; the specified one" do
|
182
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
167
183
|
output_buffer.should have_tag("form li fieldset ol li label input[@type='radio'][@checked='checked']", :count => 1)
|
168
184
|
output_buffer.should have_tag("form li fieldset ol li label[@for='post_author_ids_#{@fred.id}']", /fred/i)
|
169
185
|
output_buffer.should have_tag("form li fieldset ol li label input[@type='radio'][@checked='checked'][@value='#{@fred.id}']")
|
@@ -179,7 +195,7 @@ describe 'radio input' do
|
|
179
195
|
|
180
196
|
Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
|
181
197
|
@new_post.stub!(:author_ids).and_return(nil)
|
182
|
-
semantic_form_for(@new_post) do |builder|
|
198
|
+
@form = semantic_form_for(@new_post) do |builder|
|
183
199
|
concat(builder.input(:authors, :as => :radio))
|
184
200
|
end
|
185
201
|
end
|
@@ -190,6 +206,7 @@ describe 'radio input' do
|
|
190
206
|
end
|
191
207
|
|
192
208
|
it "should do foo" do
|
209
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
193
210
|
output_buffer.should have_tag("legend.label label", /Translated/)
|
194
211
|
end
|
195
212
|
|
@@ -204,6 +221,7 @@ describe 'radio input' do
|
|
204
221
|
end
|
205
222
|
|
206
223
|
it "should output the correct label title" do
|
224
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
207
225
|
output_buffer.should have_tag("legend.label label", /The authors/)
|
208
226
|
end
|
209
227
|
end
|
@@ -212,12 +230,13 @@ describe 'radio input' do
|
|
212
230
|
before do
|
213
231
|
@output_buffer = ''
|
214
232
|
@new_post.stub!(:author_ids).and_return(nil)
|
215
|
-
semantic_form_for(@new_post) do |builder|
|
233
|
+
@form = semantic_form_for(@new_post) do |builder|
|
216
234
|
concat(builder.input(:authors, :as => :radio, :label => false))
|
217
235
|
end
|
218
236
|
end
|
219
237
|
|
220
238
|
it "should not output the legend" do
|
239
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
221
240
|
output_buffer.should_not have_tag("legend.label")
|
222
241
|
end
|
223
242
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'select input' do
|
5
5
|
|
@@ -15,13 +15,14 @@ describe 'select input' do
|
|
15
15
|
before do
|
16
16
|
@array_with_values = ["Title A", "Title B", "Title C"]
|
17
17
|
@array_with_keys_and_values = [["Title D", 1], ["Title E", 2], ["Title F", 3]]
|
18
|
-
semantic_form_for(@new_post) do |builder|
|
18
|
+
@form = semantic_form_for(@new_post) do |builder|
|
19
19
|
concat(builder.input(:title, :as => :select, :collection => @array_with_values))
|
20
20
|
concat(builder.input(:title, :as => :select, :collection => @array_with_keys_and_values))
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should have a option for each key and/or value' do
|
25
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
25
26
|
@array_with_values.each do |v|
|
26
27
|
output_buffer.should have_tag("form li select option[@value='#{v}']", /^#{v}$/)
|
27
28
|
end
|
@@ -34,12 +35,13 @@ describe 'select input' do
|
|
34
35
|
describe 'using a range' do
|
35
36
|
before do
|
36
37
|
@range_with_values = 1..5
|
37
|
-
semantic_form_for(@new_post) do |builder|
|
38
|
+
@form = semantic_form_for(@new_post) do |builder|
|
38
39
|
concat(builder.input(:title, :as => :select, :collection => @range_with_values))
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
43
|
it 'should have an option for each value' do
|
44
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
43
45
|
@range_with_values.each do |v|
|
44
46
|
output_buffer.should have_tag("form li select option[@value='#{v}']", /^#{v}$/)
|
45
47
|
end
|
@@ -54,7 +56,7 @@ describe 'select input' do
|
|
54
56
|
::I18n.load_path = [File.join(File.dirname(__FILE__), *%w[.. .. lib locale en.yml])]
|
55
57
|
::I18n.backend.send(:init_translations)
|
56
58
|
|
57
|
-
semantic_form_for(@new_post) do |builder|
|
59
|
+
@form = semantic_form_for(@new_post) do |builder|
|
58
60
|
concat(builder.input(:published, :as => :select))
|
59
61
|
end
|
60
62
|
end
|
@@ -64,6 +66,7 @@ describe 'select input' do
|
|
64
66
|
end
|
65
67
|
|
66
68
|
it 'should render a select with at least options: true/false' do
|
69
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
67
70
|
output_buffer.should have_tag("form li select option[@value='true']", /^Yes$/)
|
68
71
|
output_buffer.should have_tag("form li select option[@value='false']", /^No$/)
|
69
72
|
end
|
@@ -74,7 +77,7 @@ describe 'select input' do
|
|
74
77
|
@boolean_select_labels = {:yes => 'Yep', :no => 'Nope'}
|
75
78
|
::I18n.backend.store_translations :en, :formtastic => @boolean_select_labels
|
76
79
|
|
77
|
-
semantic_form_for(@new_post) do |builder|
|
80
|
+
@form = semantic_form_for(@new_post) do |builder|
|
78
81
|
concat(builder.input(:published, :as => :select))
|
79
82
|
end
|
80
83
|
end
|
@@ -84,6 +87,7 @@ describe 'select input' do
|
|
84
87
|
end
|
85
88
|
|
86
89
|
it 'should render a select with at least options: true/false' do
|
90
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
87
91
|
output_buffer.should have_tag("form li select option[@value='true']", /#{@boolean_select_labels[:yes]}/)
|
88
92
|
output_buffer.should have_tag("form li select option[@value='false']", /#{@boolean_select_labels[:no]}/)
|
89
93
|
end
|
@@ -92,9 +96,9 @@ describe 'select input' do
|
|
92
96
|
|
93
97
|
describe 'for a belongs_to association' do
|
94
98
|
before do
|
95
|
-
semantic_form_for(@new_post) do |builder|
|
99
|
+
@form = semantic_form_for(@new_post) do |builder|
|
96
100
|
concat(builder.input(:author, :as => :select))
|
97
|
-
|
101
|
+
concat(builder.input(:reviewer, :as => :select))
|
98
102
|
end
|
99
103
|
end
|
100
104
|
|
@@ -107,30 +111,36 @@ describe 'select input' do
|
|
107
111
|
it_should_use_the_collection_when_provided(:select, 'option')
|
108
112
|
|
109
113
|
it 'should have a select inside the wrapper' do
|
114
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
110
115
|
output_buffer.should have_tag('form li select')
|
111
116
|
output_buffer.should have_tag('form li select#post_author_id')
|
112
|
-
|
117
|
+
output_buffer.should have_tag('form li select#post_reviewer_id')
|
113
118
|
end
|
114
119
|
|
115
120
|
it 'should have a valid name' do
|
121
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
116
122
|
output_buffer.should have_tag("form li select[@name='post[author_id]']")
|
117
123
|
output_buffer.should_not have_tag("form li select[@name='post[author_id][]']")
|
118
|
-
|
124
|
+
output_buffer.should_not have_tag("form li select[@name='post[reviewer_id][]']")
|
119
125
|
end
|
120
126
|
|
121
127
|
it 'should not create a multi-select' do
|
128
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
122
129
|
output_buffer.should_not have_tag('form li select[@multiple]')
|
123
130
|
end
|
124
131
|
|
125
132
|
it 'should create a select without size' do
|
133
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
126
134
|
output_buffer.should_not have_tag('form li select[@size]')
|
127
135
|
end
|
128
136
|
|
129
137
|
it 'should have a blank option' do
|
138
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
130
139
|
output_buffer.should have_tag("form li select option[@value='']")
|
131
140
|
end
|
132
141
|
|
133
142
|
it 'should have a select option for each Author' do
|
143
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
134
144
|
output_buffer.should have_tag("form li select[@name='post[author_id]'] option", :count => ::Author.find(:all).size + 1)
|
135
145
|
::Author.find(:all).each do |author|
|
136
146
|
output_buffer.should have_tag("form li select option[@value='#{author.id}']", /#{author.to_label}/)
|
@@ -138,6 +148,7 @@ describe 'select input' do
|
|
138
148
|
end
|
139
149
|
|
140
150
|
it 'should have one option with a "selected" attribute' do
|
151
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
141
152
|
output_buffer.should have_tag("form li select[@name='post[author_id]'] option[@selected]", :count => 1)
|
142
153
|
end
|
143
154
|
|
@@ -146,10 +157,11 @@ describe 'select input' do
|
|
146
157
|
@new_post.stub!(:author_status_id).and_return(@bob.id)
|
147
158
|
@new_post.stub!(:column_for_attribute).and_return(mock('column', :type => :integer, :limit => 255))
|
148
159
|
|
149
|
-
semantic_form_for(@new_post) do |builder|
|
160
|
+
form = semantic_form_for(@new_post) do |builder|
|
150
161
|
concat(builder.input(:author_status, :as => :select))
|
151
162
|
end
|
152
163
|
|
164
|
+
output_buffer.concat(form) if Formtastic::Util.rails3?
|
153
165
|
output_buffer.should have_tag('form li select#post_author_status_id')
|
154
166
|
end
|
155
167
|
end
|
@@ -176,7 +188,7 @@ describe 'select input' do
|
|
176
188
|
|
177
189
|
it "should call author.find with association conditions" do
|
178
190
|
::Author.should_receive(:merge_conditions).with({:active => true}, nil).and_return(:active => true)
|
179
|
-
::Author.should_receive(:
|
191
|
+
::Author.should_receive(:all).with(:conditions => {:active => true})
|
180
192
|
|
181
193
|
semantic_form_for(@new_post) do |builder|
|
182
194
|
concat(builder.input(:author, :as => :select))
|
@@ -185,7 +197,7 @@ describe 'select input' do
|
|
185
197
|
|
186
198
|
it "should call author.find with association conditions and find_options conditions" do
|
187
199
|
::Author.should_receive(:merge_conditions).with({:active => true}, {:publisher => true}).and_return(:active => true, :publisher => true)
|
188
|
-
::Author.should_receive(:
|
200
|
+
::Author.should_receive(:all).with(:conditions => {:active => true, :publisher => true})
|
189
201
|
|
190
202
|
semantic_form_for(@new_post) do |builder|
|
191
203
|
concat(builder.input(:author, :as => :select, :find_options => {:conditions => {:publisher => true}}))
|
@@ -210,7 +222,7 @@ describe 'select input' do
|
|
210
222
|
continent.stub!(:authors).and_return([@authors[i]])
|
211
223
|
end
|
212
224
|
|
213
|
-
semantic_form_for(@new_post) do |builder|
|
225
|
+
@form = semantic_form_for(@new_post) do |builder|
|
214
226
|
concat(builder.input(:author, :as => :select, :group_by => :continent ) )
|
215
227
|
concat(builder.input(:author, :as => :select, :group_by => :continent, :group_label_method => :id ) )
|
216
228
|
end
|
@@ -225,25 +237,29 @@ describe 'select input' do
|
|
225
237
|
|
226
238
|
0.upto(1) do |i|
|
227
239
|
it 'should have all option groups and the right values' do
|
240
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
228
241
|
output_buffer.should have_tag("form li select optgroup[@label='#{@continent_names[i]}']", @authors[i].to_label)
|
229
242
|
end
|
230
243
|
|
231
244
|
it 'should have custom group labels' do
|
245
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
232
246
|
output_buffer.should have_tag("form li select optgroup[@label='#{@continents[i].id}']", @authors[i].to_label)
|
233
247
|
end
|
234
248
|
end
|
235
249
|
|
236
250
|
it 'should have no duplicate groups' do
|
251
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
237
252
|
output_buffer.should have_tag('form li select optgroup', :count => 4)
|
238
253
|
end
|
239
254
|
|
240
255
|
it 'should sort the groups on the label method' do
|
256
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
241
257
|
output_buffer.should have_tag("form li select optgroup[@label='Africa']")
|
242
258
|
output_buffer.should have_tag("form li select optgroup[@label='99']")
|
243
259
|
end
|
244
260
|
|
245
261
|
it 'should call find with :include for more optimized queries' do
|
246
|
-
Author.should_receive(:
|
262
|
+
Author.should_receive(:all).with(:include => :continent)
|
247
263
|
|
248
264
|
semantic_form_for(@new_post) do |builder|
|
249
265
|
concat(builder.input(:author, :as => :select, :group_by => :continent ) )
|
@@ -253,7 +269,7 @@ describe 'select input' do
|
|
253
269
|
|
254
270
|
describe 'for a has_many association' do
|
255
271
|
before do
|
256
|
-
semantic_form_for(@fred) do |builder|
|
272
|
+
@form = semantic_form_for(@fred) do |builder|
|
257
273
|
concat(builder.input(:posts, :as => :select))
|
258
274
|
end
|
259
275
|
end
|
@@ -267,15 +283,18 @@ describe 'select input' do
|
|
267
283
|
it_should_use_the_collection_when_provided(:select, 'option')
|
268
284
|
|
269
285
|
it 'should have a select inside the wrapper' do
|
286
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
270
287
|
output_buffer.should have_tag('form li select')
|
271
288
|
output_buffer.should have_tag('form li select#author_post_ids')
|
272
289
|
end
|
273
290
|
|
274
291
|
it 'should have a multi-select select' do
|
292
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
275
293
|
output_buffer.should have_tag('form li select[@multiple="multiple"]')
|
276
294
|
end
|
277
295
|
|
278
296
|
it 'should have a select option for each Post' do
|
297
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
279
298
|
output_buffer.should have_tag('form li select option', :count => ::Post.find(:all).size)
|
280
299
|
::Post.find(:all).each do |post|
|
281
300
|
output_buffer.should have_tag("form li select option[@value='#{post.id}']", /#{post.to_label}/)
|
@@ -283,17 +302,19 @@ describe 'select input' do
|
|
283
302
|
end
|
284
303
|
|
285
304
|
it 'should not have a blank option' do
|
305
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
286
306
|
output_buffer.should_not have_tag("form li select option[@value='']")
|
287
307
|
end
|
288
308
|
|
289
309
|
it 'should have one option with a "selected" attribute' do
|
310
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
290
311
|
output_buffer.should have_tag('form li select option[@selected]', :count => 1)
|
291
312
|
end
|
292
313
|
end
|
293
314
|
|
294
315
|
describe 'for a has_and_belongs_to_many association' do
|
295
316
|
before do
|
296
|
-
semantic_form_for(@freds_post) do |builder|
|
317
|
+
@form = semantic_form_for(@freds_post) do |builder|
|
297
318
|
concat(builder.input(:authors, :as => :select))
|
298
319
|
end
|
299
320
|
end
|
@@ -307,15 +328,18 @@ describe 'select input' do
|
|
307
328
|
it_should_use_the_collection_when_provided(:select, 'option')
|
308
329
|
|
309
330
|
it 'should have a select inside the wrapper' do
|
331
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
310
332
|
output_buffer.should have_tag('form li select')
|
311
333
|
output_buffer.should have_tag('form li select#post_author_ids')
|
312
334
|
end
|
313
335
|
|
314
336
|
it 'should have a multi-select select' do
|
337
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
315
338
|
output_buffer.should have_tag('form li select[@multiple="multiple"]')
|
316
339
|
end
|
317
340
|
|
318
341
|
it 'should have a select option for each Author' do
|
342
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
319
343
|
output_buffer.should have_tag('form li select option', :count => ::Author.find(:all).size)
|
320
344
|
::Author.find(:all).each do |author|
|
321
345
|
output_buffer.should have_tag("form li select option[@value='#{author.id}']", /#{author.to_label}/)
|
@@ -323,10 +347,12 @@ describe 'select input' do
|
|
323
347
|
end
|
324
348
|
|
325
349
|
it 'should not have a blank option' do
|
350
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
326
351
|
output_buffer.should_not have_tag("form li select option[@value='']")
|
327
352
|
end
|
328
353
|
|
329
354
|
it 'should have one option with a "selected" attribute' do
|
355
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
330
356
|
output_buffer.should have_tag('form li select option[@selected]', :count => 1)
|
331
357
|
end
|
332
358
|
end
|
@@ -334,38 +360,43 @@ describe 'select input' do
|
|
334
360
|
describe 'when :prompt => "choose something" is set' do
|
335
361
|
before do
|
336
362
|
@new_post.stub!(:author_id).and_return(nil)
|
337
|
-
semantic_form_for(@new_post) do |builder|
|
363
|
+
@form = semantic_form_for(@new_post) do |builder|
|
338
364
|
concat(builder.input(:author, :as => :select, :prompt => "choose author"))
|
339
365
|
end
|
340
366
|
end
|
341
367
|
|
342
368
|
it 'should have a select with prompt' do
|
369
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
343
370
|
output_buffer.should have_tag("form li select option[@value='']", /choose author/)
|
344
371
|
end
|
345
372
|
|
346
373
|
it 'should not have a blank select option' do
|
374
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
347
375
|
output_buffer.should_not have_tag("form li select option[@value='']", "")
|
348
376
|
end
|
349
377
|
end
|
350
378
|
|
351
379
|
describe 'when no object is given' do
|
352
380
|
before(:each) do
|
353
|
-
semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
381
|
+
@form = semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
354
382
|
concat(builder.input(:author, :as => :select, :collection => ::Author.find(:all)))
|
355
383
|
end
|
356
384
|
end
|
357
385
|
|
358
386
|
it 'should generate label' do
|
387
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
359
388
|
output_buffer.should have_tag('form li label', /Author/)
|
360
389
|
output_buffer.should have_tag("form li label[@for='project_author']")
|
361
390
|
end
|
362
391
|
|
363
392
|
it 'should generate select inputs' do
|
393
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
364
394
|
output_buffer.should have_tag('form li select#project_author')
|
365
395
|
output_buffer.should have_tag('form li select option', :count => ::Author.find(:all).size + 1)
|
366
396
|
end
|
367
397
|
|
368
398
|
it 'should generate an option to each item' do
|
399
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
369
400
|
::Author.find(:all).each do |author|
|
370
401
|
output_buffer.should have_tag("form li select option[@value='#{author.id}']", /#{author.to_label}/)
|
371
402
|
end
|
@@ -381,13 +412,14 @@ describe 'select input' do
|
|
381
412
|
before do
|
382
413
|
@new_post.stub!(:author_id).and_return(nil)
|
383
414
|
with_deprecation_silenced do
|
384
|
-
semantic_form_for(@new_post) do |builder|
|
415
|
+
@form = semantic_form_for(@new_post) do |builder|
|
385
416
|
concat(builder.input(:author, :as => :select, :selected => nil))
|
386
417
|
end
|
387
418
|
end
|
388
419
|
end
|
389
420
|
|
390
421
|
it 'should not have any selected item(s)' do
|
422
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
391
423
|
output_buffer.should_not have_tag("form li select option[@selected='selected']")
|
392
424
|
end
|
393
425
|
end
|
@@ -396,13 +428,14 @@ describe 'select input' do
|
|
396
428
|
before do
|
397
429
|
@new_post.stub!(:author_id).and_return(nil)
|
398
430
|
with_deprecation_silenced do
|
399
|
-
semantic_form_for(@new_post) do |builder|
|
431
|
+
@form = semantic_form_for(@new_post) do |builder|
|
400
432
|
concat(builder.input(:author, :as => :select, :selected => @bob.id))
|
401
433
|
end
|
402
434
|
end
|
403
435
|
end
|
404
436
|
|
405
437
|
it 'should have a selected item; the specified one' do
|
438
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
406
439
|
output_buffer.should have_tag("form li select option[@selected='selected']", :count => 1)
|
407
440
|
output_buffer.should have_tag("form li select option[@selected='selected']", /bob/i)
|
408
441
|
output_buffer.should have_tag("form li select option[@selected='selected'][@value='#{@bob.id}']")
|
@@ -416,13 +449,14 @@ describe 'select input' do
|
|
416
449
|
@new_post.stub!(:author_ids).and_return(nil)
|
417
450
|
|
418
451
|
with_deprecation_silenced do
|
419
|
-
semantic_form_for(@new_post) do |builder|
|
452
|
+
@form = semantic_form_for(@new_post) do |builder|
|
420
453
|
concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id], :multiple => false))
|
421
454
|
end
|
422
455
|
end
|
423
456
|
end
|
424
457
|
|
425
458
|
it "should only select the first value" do
|
459
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
426
460
|
output_buffer.should have_tag("form li select option[@selected='selected']", :count => 1)
|
427
461
|
output_buffer.should have_tag("form li select:not([@multiple]) option[@selected='selected']", /bob/i)
|
428
462
|
output_buffer.should have_tag("form li select:not([@multiple]) option[@selected='selected'][@value='#{@bob.id}']")
|
@@ -434,13 +468,14 @@ describe 'select input' do
|
|
434
468
|
@new_post.stub!(:author_ids).and_return(nil)
|
435
469
|
|
436
470
|
with_deprecation_silenced do
|
437
|
-
semantic_form_for(@new_post) do |builder|
|
471
|
+
@form = semantic_form_for(@new_post) do |builder|
|
438
472
|
concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id]))
|
439
473
|
end
|
440
474
|
end
|
441
475
|
end
|
442
476
|
|
443
477
|
it "should have multiple items selected; the specified ones" do
|
478
|
+
output_buffer.concat(@form) if Formtastic::Util.rails3?
|
444
479
|
output_buffer.should have_tag("form li select option[@selected='selected']", :count => 2)
|
445
480
|
output_buffer.should have_tag("form li select[@multiple] option[@selected='selected']", /bob/i)
|
446
481
|
output_buffer.should have_tag("form li select[@multiple] option[@selected='selected'][@value='#{@bob.id}']")
|
@@ -462,15 +497,18 @@ describe 'select input' do
|
|
462
497
|
|
463
498
|
describe ":as is not set" do
|
464
499
|
before do
|
465
|
-
semantic_form_for(@new_post) do |builder|
|
500
|
+
@form_new_post = semantic_form_for(@new_post) do |builder|
|
466
501
|
concat(builder.input(:meta_description, :collection => @some_meta_descriptions))
|
467
502
|
end
|
468
|
-
semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
503
|
+
@form_project = semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
469
504
|
concat(builder.input(:meta_description, :collection => @some_meta_descriptions))
|
470
505
|
end
|
506
|
+
|
471
507
|
end
|
472
508
|
|
473
509
|
it "should render a select field" do
|
510
|
+
output_buffer.concat(@form_new_post) if Formtastic::Util.rails3?
|
511
|
+
output_buffer.concat(@form_project) if Formtastic::Util.rails3?
|
474
512
|
output_buffer.should have_tag("form li select", :count => 2)
|
475
513
|
end
|
476
514
|
end
|
@@ -478,15 +516,17 @@ describe 'select input' do
|
|
478
516
|
describe ":as is set" do
|
479
517
|
before do
|
480
518
|
# Should not be a case, but just checking :as got highest priority in setting input type.
|
481
|
-
semantic_form_for(@new_post) do |builder|
|
519
|
+
@form_new_post = semantic_form_for(@new_post) do |builder|
|
482
520
|
concat(builder.input(:meta_description, :as => :string, :collection => @some_meta_descriptions))
|
483
521
|
end
|
484
|
-
semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
522
|
+
@form_project = semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
485
523
|
concat(builder.input(:meta_description, :as => :string, :collection => @some_meta_descriptions))
|
486
524
|
end
|
487
525
|
end
|
488
526
|
|
489
527
|
it "should render a text field" do
|
528
|
+
output_buffer.concat(@form_new_post) if Formtastic::Util.rails3?
|
529
|
+
output_buffer.concat(@form_project) if Formtastic::Util.rails3?
|
490
530
|
output_buffer.should have_tag("form li input[@type='text']", :count => 2)
|
491
531
|
end
|
492
532
|
end
|