presenting 1.0.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/app/controllers/presentation/assets_controller.rb +1 -1
- data/app/views/presentations/_details.erb +1 -1
- data/app/views/presentations/_field_search.erb +1 -1
- data/app/views/presentations/_form.erb +1 -1
- data/app/views/presentations/_grid.erb +1 -1
- data/app/views/presentations/_search.erb +1 -1
- data/config/routes.rb +7 -2
- data/lib/presentation/base.rb +10 -27
- data/lib/presentation/details.rb +2 -0
- data/lib/presentation/field_search.rb +2 -0
- data/lib/presentation/grid.rb +1 -1
- data/lib/presenting/engine.rb +7 -0
- data/lib/presenting/form_helpers.rb +1 -1
- data/lib/presenting/helpers.rb +7 -3
- data/lib/presenting/view.rb +3 -3
- data/lib/presenting.rb +38 -5
- data/test/assets_test.rb +5 -7
- data/test/details_test.rb +1 -1
- data/test/field_search_test.rb +1 -1
- data/test/form_test.rb +316 -287
- data/test/grid_test.rb +28 -8
- data/test/helpers_test.rb +2 -2
- data/test/presenting_test.rb +1 -1
- data/test/r3/Gemfile +7 -0
- data/test/r3/Gemfile.lock +82 -0
- data/test/r3/config/application.rb +12 -0
- data/test/r3/config/boot.rb +6 -0
- data/test/{rails → r3}/config/database.yml +6 -1
- data/test/r3/config/environment.rb +5 -0
- data/test/r3/config/environments/test.rb +35 -0
- data/test/r3/config.ru +4 -0
- data/test/r3/db/test.sqlite3 +0 -0
- data/test/r3/log/test.log +2354 -0
- data/test/r3/public/javascripts/presenting/grid.js +0 -0
- data/test/r3/public/javascripts/presenting/search.js +13 -0
- data/test/r3/public/stylesheets/presenting/details-color.css +7 -0
- data/test/r3/public/stylesheets/presenting/details.css +10 -0
- data/test/r3/public/stylesheets/presenting/form.css +1 -0
- data/test/r3/public/stylesheets/presenting/grid-color.css +71 -0
- data/test/r3/public/stylesheets/presenting/grid.css +64 -0
- data/test/r3/public/stylesheets/presenting/search-color.css +16 -0
- data/test/r3/public/stylesheets/presenting/search.css +45 -0
- data/test/search_conditions_test.rb +2 -2
- data/test/search_test.rb +1 -1
- data/test/test_helper.rb +8 -39
- metadata +45 -79
- data/rails/init.rb +0 -12
- data/test/rails/app/controllers/application_controller.rb +0 -15
- data/test/rails/app/controllers/users_controller.rb +0 -36
- data/test/rails/app/helpers/application_helper.rb +0 -3
- data/test/rails/app/helpers/users_helper.rb +0 -2
- data/test/rails/app/models/user.rb +0 -2
- data/test/rails/app/views/layouts/application.html.erb +0 -15
- data/test/rails/app/views/users/index.html.erb +0 -10
- data/test/rails/app/views/users/new.html.erb +0 -2
- data/test/rails/app/views/users/show.html.erb +0 -1
- data/test/rails/config/boot.rb +0 -109
- data/test/rails/config/environment.rb +0 -13
- data/test/rails/config/environments/development.rb +0 -17
- data/test/rails/config/environments/production.rb +0 -24
- data/test/rails/config/environments/test.rb +0 -22
- data/test/rails/config/locales/en.yml +0 -5
- data/test/rails/config/routes.rb +0 -5
- data/test/rails/db/development.sqlite3 +0 -0
- data/test/rails/db/migrate/20090213085444_create_users.rb +0 -13
- data/test/rails/db/migrate/20090213085607_populate_users.rb +0 -13
- data/test/rails/db/schema.rb +0 -23
- data/test/rails/db/test.sqlite3 +0 -0
- data/test/rails/log/development.log +0 -858
- data/test/rails/public/404.html +0 -30
- data/test/rails/public/422.html +0 -30
- data/test/rails/public/500.html +0 -33
- data/test/rails/public/javascripts/application.js +0 -2
- data/test/rails/public/javascripts/jquery.livequery.min.js +0 -11
- data/test/rails/public/javascripts/prototype.js +0 -4320
- data/test/rails/script/console +0 -3
- data/test/rails/script/dbconsole +0 -3
- data/test/rails/script/destroy +0 -3
- data/test/rails/script/generate +0 -3
- data/test/rails/script/plugin +0 -3
- data/test/rails/script/runner +0 -3
- data/test/rails/script/server +0 -3
- /data/app/assets/{javascript → javascripts}/grid.js +0 -0
- /data/app/assets/{javascript → javascripts}/search.js +0 -0
data/test/form_test.rb
CHANGED
@@ -1,287 +1,316 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class FormTest < Presenting::Test
|
4
|
-
def setup
|
5
|
-
@f = Presentation::Form.new
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_method_for_new_record
|
9
|
-
@f.presentable = stub('record', :new_record? => true)
|
10
|
-
assert_equal :post, @f.method
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_method_for_existing_record
|
14
|
-
@f.presentable = stub('record', :new_record? => false)
|
15
|
-
assert_equal :put, @f.method
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_button_for_new_record
|
19
|
-
@f.presentable = stub('record', :new_record? => true)
|
20
|
-
assert_equal 'Create', @f.button
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_button_for_existing_record
|
24
|
-
@f.presentable = stub('record', :new_record? => false)
|
25
|
-
assert_equal 'Update', @f.button
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_adding_a_field_by_name
|
29
|
-
@f.fields = [:a]
|
30
|
-
|
31
|
-
assert_equal :a, @f.fields.first.name
|
32
|
-
assert_equal 'A', @f.fields.first.label
|
33
|
-
assert_equal :string, @f.fields.first.type
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_adding_a_field_by_name_and_type
|
37
|
-
@f.fields = [{:b => :boolean}]
|
38
|
-
|
39
|
-
assert_equal :b, @f.fields.first.name
|
40
|
-
assert_equal 'B', @f.fields.first.label
|
41
|
-
assert_equal :boolean, @f.fields.first.type
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_adding_a_field_by_name_and_options
|
45
|
-
@f.fields = [{:foo => {:label => "Foo Bar", :type => :select}}]
|
46
|
-
|
47
|
-
assert_equal :foo, @f.fields.first.name
|
48
|
-
assert_equal 'Foo Bar', @f.fields.first.label
|
49
|
-
assert_equal :select, @f.fields.first.type
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_fields_accessors_are_shortcuts_to_first_group
|
53
|
-
@f.fields = [:a]
|
54
|
-
assert_equal :a, @f.groups.first.fields.first.name
|
55
|
-
assert_equal @f.fields, @f.groups.first.fields
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_adding_an_unnamed_group_of_fields
|
59
|
-
@f.groups = [[:a]]
|
60
|
-
|
61
|
-
assert_nil @f.groups.first.name
|
62
|
-
assert_equal :a, @f.groups.first.fields.first.name
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_adding_a_named_group_of_fields
|
66
|
-
@f.groups = [{"foo" => [:a]}]
|
67
|
-
|
68
|
-
assert_equal "foo", @f.groups.first.name
|
69
|
-
assert_equal :a, @f.groups.first.fields.first.name
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class FormFieldTest < Presenting::Test
|
74
|
-
def setup
|
75
|
-
@f = Presentation::Form::Field.new
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_default_value
|
79
|
-
@f.name = 'foo'
|
80
|
-
assert_equal :foo, @f.value
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_symbol_value
|
84
|
-
@f.value = :foo
|
85
|
-
assert_equal 'bar', @f.value_from(stub('record', :foo => 'bar'))
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_string_value
|
89
|
-
@f.value = 'foo'
|
90
|
-
assert_equal 'foo', @f.value_from(stub('record', :foo => 'bar'))
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_proc_value
|
94
|
-
@f.value = proc{|r| r.foo }
|
95
|
-
assert_equal 'bar', @f.value_from(stub('record', :foo => 'bar'))
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
class FormRenderingTest < Presentation::RenderTest
|
100
|
-
def setup
|
101
|
-
|
102
|
-
@presentation
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
assert_select
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
assert_select "form fieldset:nth-of-type(
|
249
|
-
assert_select "legend",
|
250
|
-
assert_select "div.field input[name='user[
|
251
|
-
assert_select "div.field input[name='user[
|
252
|
-
end
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
attr_accessor :
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class FormTest < Presenting::Test
|
4
|
+
def setup
|
5
|
+
@f = Presentation::Form.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_method_for_new_record
|
9
|
+
@f.presentable = stub('record', :new_record? => true)
|
10
|
+
assert_equal :post, @f.method
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_method_for_existing_record
|
14
|
+
@f.presentable = stub('record', :new_record? => false)
|
15
|
+
assert_equal :put, @f.method
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_button_for_new_record
|
19
|
+
@f.presentable = stub('record', :new_record? => true)
|
20
|
+
assert_equal 'Create', @f.button
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_button_for_existing_record
|
24
|
+
@f.presentable = stub('record', :new_record? => false)
|
25
|
+
assert_equal 'Update', @f.button
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_adding_a_field_by_name
|
29
|
+
@f.fields = [:a]
|
30
|
+
|
31
|
+
assert_equal :a, @f.fields.first.name
|
32
|
+
assert_equal 'A', @f.fields.first.label
|
33
|
+
assert_equal :string, @f.fields.first.type
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_adding_a_field_by_name_and_type
|
37
|
+
@f.fields = [{:b => :boolean}]
|
38
|
+
|
39
|
+
assert_equal :b, @f.fields.first.name
|
40
|
+
assert_equal 'B', @f.fields.first.label
|
41
|
+
assert_equal :boolean, @f.fields.first.type
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_adding_a_field_by_name_and_options
|
45
|
+
@f.fields = [{:foo => {:label => "Foo Bar", :type => :select}}]
|
46
|
+
|
47
|
+
assert_equal :foo, @f.fields.first.name
|
48
|
+
assert_equal 'Foo Bar', @f.fields.first.label
|
49
|
+
assert_equal :select, @f.fields.first.type
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_fields_accessors_are_shortcuts_to_first_group
|
53
|
+
@f.fields = [:a]
|
54
|
+
assert_equal :a, @f.groups.first.fields.first.name
|
55
|
+
assert_equal @f.fields, @f.groups.first.fields
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_adding_an_unnamed_group_of_fields
|
59
|
+
@f.groups = [[:a]]
|
60
|
+
|
61
|
+
assert_nil @f.groups.first.name
|
62
|
+
assert_equal :a, @f.groups.first.fields.first.name
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_adding_a_named_group_of_fields
|
66
|
+
@f.groups = [{"foo" => [:a]}]
|
67
|
+
|
68
|
+
assert_equal "foo", @f.groups.first.name
|
69
|
+
assert_equal :a, @f.groups.first.fields.first.name
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class FormFieldTest < Presenting::Test
|
74
|
+
def setup
|
75
|
+
@f = Presentation::Form::Field.new
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_default_value
|
79
|
+
@f.name = 'foo'
|
80
|
+
assert_equal :foo, @f.value
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_symbol_value
|
84
|
+
@f.value = :foo
|
85
|
+
assert_equal 'bar', @f.value_from(stub('record', :foo => 'bar'))
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_string_value
|
89
|
+
@f.value = 'foo'
|
90
|
+
assert_equal 'foo', @f.value_from(stub('record', :foo => 'bar'))
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_proc_value
|
94
|
+
@f.value = proc{|r| r.foo }
|
95
|
+
assert_equal 'bar', @f.value_from(stub('record', :foo => 'bar'))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class FormRenderingTest < Presentation::RenderTest
|
100
|
+
def setup
|
101
|
+
Rails.application.routes.draw do resources :users end
|
102
|
+
@presentation = Presentation::Form.new
|
103
|
+
@presentation.controller = ActionView::TestCase::TestController.new
|
104
|
+
end
|
105
|
+
|
106
|
+
def teardown
|
107
|
+
Rails.application.reload_routes!
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_rendering_a_string_field
|
111
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
112
|
+
@presentation.fields = [:name]
|
113
|
+
|
114
|
+
assert_select 'form div.field' do
|
115
|
+
assert_select 'label', 'Name'
|
116
|
+
assert_select "input[type=text][name='user[name]'][value='bob smith']"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_rendering_a_string_field_with_a_custom_value
|
121
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
122
|
+
@presentation.fields << {:name => {:value => 'test'}}
|
123
|
+
|
124
|
+
assert_select 'form div.field' do
|
125
|
+
assert_select "input[type=text][name='user[name]'][value='test']"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_rendering_a_text_field
|
130
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
131
|
+
@presentation.fields = [{:name => :text}]
|
132
|
+
|
133
|
+
assert_select 'form div.field' do
|
134
|
+
assert_select 'label', 'Name'
|
135
|
+
assert_select "textarea[name='user[name]']", 'bob smith'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_rendering_a_text_field_with_a_custom_value
|
140
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
141
|
+
@presentation.fields << {:name => {:type => :text, :value => 'test'}}
|
142
|
+
|
143
|
+
assert_select 'form div.field' do
|
144
|
+
assert_select "textarea[name='user[name]']", 'test'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_rendering_a_readonly_field
|
149
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
150
|
+
@presentation.fields = [{:name => :readonly}]
|
151
|
+
|
152
|
+
assert_select 'form div.field' do
|
153
|
+
assert_select 'label', 'Name'
|
154
|
+
assert_select "input[type=text][disabled=disabled][name='user[name]'][value='bob smith']"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_rendering_a_readonly_field_with_a_custom_value
|
159
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
160
|
+
@presentation.fields << {:name => {:type => :readonly, :value => 'test'}}
|
161
|
+
|
162
|
+
assert_select 'form div.field' do
|
163
|
+
assert_select "input[type=text][disabled=disabled][name='user[name]'][value='test']"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_rendering_a_password_field
|
168
|
+
@presentation.presentable = User.new(:name => 'bob smith')
|
169
|
+
@presentation.fields = [{:name => :password}]
|
170
|
+
|
171
|
+
assert_select 'form div.field' do
|
172
|
+
assert_select 'label', 'Name'
|
173
|
+
assert_select "input[type=password][name='user[name]'][value='bob smith']"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_rendering_a_boolean_field
|
178
|
+
@presentation.presentable = User.new(:suspended => false, :registered => true)
|
179
|
+
@presentation.fields = [{:suspended => :boolean}, {:registered => :boolean}]
|
180
|
+
|
181
|
+
assert_select 'form div.field:nth-of-type(1)' do
|
182
|
+
assert_select 'label', 'Suspended'
|
183
|
+
assert_select "input[type=checkbox][name='user[suspended]']"
|
184
|
+
end
|
185
|
+
assert_select 'form div.field:nth-of-type(2)' do
|
186
|
+
assert_select 'label', 'Registered'
|
187
|
+
assert_select "input[type=checkbox][name='user[registered]'][checked=checked]"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_rendering_a_hidden_field
|
192
|
+
@presentation.presentable = User.new(:suspended => false)
|
193
|
+
@presentation.fields = [{:suspended => :hidden}]
|
194
|
+
|
195
|
+
assert_select 'form' do
|
196
|
+
assert_select 'label', {:text => 'Suspended', :count => 0}
|
197
|
+
assert_select "input[type=hidden][name='user[suspended]']"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_rendering_a_dropdown_field
|
202
|
+
@presentation.presentable = User.new(:prefix => 'mr')
|
203
|
+
@presentation.fields = [{:prefix => {:type => :dropdown, :type_options => [['Mr.', 'mr'], ['Mrs.', 'mrs']]}}]
|
204
|
+
|
205
|
+
assert_select 'form div.field' do
|
206
|
+
assert_select 'label', 'Prefix'
|
207
|
+
assert_select "select[name='user[prefix]']" do
|
208
|
+
assert_select "option[value=mr][selected=selected]", "Mr."
|
209
|
+
assert_select "option[value=mrs]", "Mrs."
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_rendering_a_radios_field
|
215
|
+
@presentation.presentable = User.new(:prefix => 'mr')
|
216
|
+
@presentation.fields = [{:prefix => {:type => :radios, :type_options => [['Mr.', 'mr'], ['Mrs.', 'mrs']]}}]
|
217
|
+
|
218
|
+
assert_select 'form div.field' do
|
219
|
+
assert_select 'label', 'Prefix'
|
220
|
+
assert_select "label[for=user_prefix_mr]", "Mr."
|
221
|
+
assert_select "input[type=radio][name='user[prefix]'][value=mr][checked=checked]"
|
222
|
+
assert_select "label[for=user_prefix_mrs]", "Mrs."
|
223
|
+
assert_select "input[type=radio][name='user[prefix]'][value=mrs]"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_rendering_a_multi_select_field
|
228
|
+
@presentation.presentable = User.new(:role_ids => [1,3])
|
229
|
+
@presentation.fields = [{:role_ids => {:type => :multi_select, :type_options => [['A', 1], ['B', 2], ['C', 3]], :label => "Roles"}}]
|
230
|
+
|
231
|
+
assert_select 'form div.field' do
|
232
|
+
assert_select 'label', 'Roles'
|
233
|
+
assert_select "select[name='user[role_ids][]'][multiple=multiple]" do
|
234
|
+
assert_select "option[value=1][selected=selected]", "A"
|
235
|
+
assert_select "option[value=2]", "B"
|
236
|
+
assert_select "option[value=3][selected=selected]", "C"
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def test_rendering_a_group_of_fields
|
242
|
+
@presentation.presentable = User.new
|
243
|
+
@presentation.groups = [
|
244
|
+
[:name, :email],
|
245
|
+
{"flags" => [:registered, :suspended]}
|
246
|
+
]
|
247
|
+
|
248
|
+
assert_select "form fieldset:nth-of-type(1)" do
|
249
|
+
assert_select "legend", false
|
250
|
+
assert_select "div.field input[name='user[name]']"
|
251
|
+
assert_select "div.field input[name='user[email]']"
|
252
|
+
end
|
253
|
+
assert_select "form fieldset:nth-of-type(2)" do
|
254
|
+
assert_select "legend", "flags"
|
255
|
+
assert_select "div.field input[name='user[registered]']"
|
256
|
+
assert_select "div.field input[name='user[suspended]']"
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
class User
|
261
|
+
include Presenting::Configurable
|
262
|
+
|
263
|
+
attr_accessor :prefix
|
264
|
+
attr_accessor :name
|
265
|
+
attr_accessor :email
|
266
|
+
attr_accessor :registered
|
267
|
+
attr_accessor :suspended
|
268
|
+
attr_accessor :role_ids
|
269
|
+
|
270
|
+
##
|
271
|
+
## duck typing
|
272
|
+
##
|
273
|
+
|
274
|
+
def new_record=(val)
|
275
|
+
@new_record = val
|
276
|
+
end
|
277
|
+
|
278
|
+
def new_record?
|
279
|
+
!! @new_record
|
280
|
+
end
|
281
|
+
|
282
|
+
##
|
283
|
+
## Keys
|
284
|
+
##
|
285
|
+
|
286
|
+
def id
|
287
|
+
@id ||= new_record? ? nil : '12345'
|
288
|
+
end
|
289
|
+
|
290
|
+
def to_key
|
291
|
+
new_record? ? nil : [ id ]
|
292
|
+
end
|
293
|
+
|
294
|
+
def to_param
|
295
|
+
id
|
296
|
+
end
|
297
|
+
|
298
|
+
##
|
299
|
+
## Naming
|
300
|
+
##
|
301
|
+
|
302
|
+
extend ActiveModel::Naming
|
303
|
+
|
304
|
+
# i actually want this model's name to not include the FormRenderingTest namespace
|
305
|
+
# so i'm stubbing out the ActiveModel::Name with my own structure
|
306
|
+
def self.model_name
|
307
|
+
@_model_name ||= Name.new(:plural => 'users', :singular => 'user')
|
308
|
+
end
|
309
|
+
class Name
|
310
|
+
attr_accessor :plural, :singular
|
311
|
+
def initialize(hash)
|
312
|
+
hash.each { |k, v| self.instance_variable_set("@#{k}", v) }
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|