rails_admin 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (87) hide show
  1. data/Gemfile +5 -30
  2. data/README.md +20 -2
  3. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +2 -2
  4. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +1 -1
  5. data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -1
  6. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +43 -3
  7. data/app/assets/javascripts/rails_admin/ui.js.coffee +2 -0
  8. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +3 -0
  9. data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -0
  10. data/app/controllers/rails_admin/main_controller.rb +3 -3
  11. data/app/helpers/rails_admin/application_helper.rb +15 -4
  12. data/app/helpers/rails_admin/form_builder.rb +35 -35
  13. data/app/views/layouts/rails_admin/application.html.haml +2 -1
  14. data/app/views/rails_admin/main/_delete_notice.html.haml +9 -8
  15. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -1
  16. data/app/views/rails_admin/main/_form_enumeration.html.haml +18 -1
  17. data/app/views/rails_admin/main/_form_file_upload.html.haml +2 -2
  18. data/app/views/rails_admin/main/_form_text.html.haml +7 -1
  19. data/app/views/rails_admin/main/dashboard.html.haml +26 -25
  20. data/app/views/rails_admin/main/index.html.haml +1 -1
  21. data/config/initializers/active_record_extensions.rb +2 -2
  22. data/config/locales/rails_admin.en.yml +1 -0
  23. data/lib/generators/rails_admin/install_generator.rb +1 -1
  24. data/lib/generators/rails_admin/templates/initializer.erb +66 -67
  25. data/lib/rails_admin/abstract_model.rb +7 -7
  26. data/lib/rails_admin/adapters/active_record.rb +17 -8
  27. data/lib/rails_admin/adapters/mongoid.rb +38 -42
  28. data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
  29. data/lib/rails_admin/config.rb +15 -1
  30. data/lib/rails_admin/config/actions/base.rb +16 -2
  31. data/lib/rails_admin/config/actions/dashboard.rb +17 -11
  32. data/lib/rails_admin/config/fields.rb +0 -1
  33. data/lib/rails_admin/config/fields/association.rb +2 -3
  34. data/lib/rails_admin/config/fields/base.rb +18 -6
  35. data/lib/rails_admin/config/fields/types/enum.rb +4 -0
  36. data/lib/rails_admin/config/fields/types/string.rb +6 -4
  37. data/lib/rails_admin/config/fields/types/text.rb +19 -2
  38. data/lib/rails_admin/config/model.rb +17 -0
  39. data/lib/rails_admin/config/sections/base.rb +17 -0
  40. data/lib/rails_admin/engine.rb +4 -0
  41. data/lib/rails_admin/extensions/history/auditing_adapter.rb +1 -1
  42. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +4 -4
  43. data/lib/rails_admin/support/csv_converter.rb +3 -3
  44. data/lib/rails_admin/version.rb +2 -2
  45. data/lib/tasks/rails_admin.rake +36 -6
  46. data/spec/controllers/main_controller_spec.rb +52 -9
  47. data/spec/dummy_app/Gemfile +7 -16
  48. data/spec/dummy_app/app/active_record/another_field_test.rb +4 -0
  49. data/spec/dummy_app/app/active_record/ball.rb +1 -1
  50. data/spec/dummy_app/app/active_record/nested_field_test.rb +2 -1
  51. data/spec/dummy_app/app/active_record/team.rb +3 -2
  52. data/spec/dummy_app/app/active_record/user.rb +6 -2
  53. data/spec/dummy_app/app/mongoid/another_field_test.rb +6 -0
  54. data/spec/dummy_app/app/mongoid/ball.rb +1 -1
  55. data/spec/dummy_app/app/mongoid/nested_field_test.rb +2 -1
  56. data/spec/dummy_app/app/mongoid/team.rb +1 -1
  57. data/spec/dummy_app/config/environments/development.rb +2 -2
  58. data/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +8 -0
  59. data/spec/dummy_app/db/seeds.rb +3 -3
  60. data/spec/dummy_app/db/test.sqlite3 +0 -0
  61. data/spec/dummy_app/log/test.log +53792 -0
  62. data/spec/helpers/application_helper_spec.rb +37 -0
  63. data/spec/helpers/form_builder_spec.rb +17 -0
  64. data/spec/integration/authorization/cancan_spec.rb +21 -13
  65. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +1 -8
  66. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +15 -4
  67. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +9 -12
  68. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +2 -10
  69. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +6 -0
  70. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +241 -300
  71. data/spec/integration/config/list/rails_admin_config_list_spec.rb +3 -81
  72. data/spec/integration/config/show/rails_admin_config_show_spec.rb +2 -2
  73. data/spec/spec_helper.rb +1 -0
  74. data/spec/unit/active_record_extension_spec.rb +16 -0
  75. data/spec/unit/adapters/active_record_spec.rb +11 -9
  76. data/spec/unit/adapters/mongoid_spec.rb +4 -4
  77. data/spec/unit/config/actions/base_spec.rb +32 -0
  78. data/spec/unit/config/fields/base_spec.rb +56 -0
  79. data/spec/unit/config/fields/date_spec.rb +53 -0
  80. data/spec/unit/config/fields/datetime_spec.rb +55 -0
  81. data/spec/unit/config/fields/time_spec.rb +39 -0
  82. data/spec/unit/config/fields/timestamp_spec.rb +20 -0
  83. data/spec/unit/config_spec.rb +1 -1
  84. data/spec/unit/support/csv_converter_spec.rb +16 -0
  85. metadata +44 -35
  86. data/lib/rails_admin/config/fields/factories/serialized.rb +0 -17
  87. data/lib/tasks/prepare_ci_env.rake +0 -27
@@ -263,6 +263,43 @@ describe RailsAdmin::ApplicationHelper do
263
263
  end
264
264
  end
265
265
 
266
+ describe '#static_navigation' do
267
+ it 'should show not show static nav if no static links defined' do
268
+ RailsAdmin.config do |config|
269
+ config.navigation_static_links = {}
270
+ end
271
+ helper.static_navigation.should be_empty
272
+ end
273
+
274
+ it 'should show links if defined' do
275
+ RailsAdmin.config do |config|
276
+ config.navigation_static_links = {
277
+ 'Test Link' => 'http://www.google.com'
278
+ }
279
+ end
280
+ helper.static_navigation.should match /Test Link/
281
+ end
282
+
283
+ it 'should show default header if navigation_static_label not defined in config' do
284
+ RailsAdmin.config do |config|
285
+ config.navigation_static_links = {
286
+ 'Test Link' => 'http://www.google.com'
287
+ }
288
+ end
289
+ helper.static_navigation.should match I18n.t('admin.misc.navigation_static_label')
290
+ end
291
+
292
+ it 'should show custom header if defined' do
293
+ RailsAdmin.config do |config|
294
+ config.navigation_static_label = "Test Header"
295
+ config.navigation_static_links = {
296
+ 'Test Link' => 'http://www.google.com'
297
+ }
298
+ end
299
+ helper.static_navigation.should match /Test Header/
300
+ end
301
+ end
302
+
266
303
  describe "#bulk_menu" do
267
304
  it 'should include all visible bulkable actions' do
268
305
  RailsAdmin.config do |config|
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin::FormBuilder" do
4
+ describe '#generate' do
5
+ before do
6
+ helper.stub(:authorized?).and_return(true)
7
+ (@object = Player.new).save
8
+ @builder = RailsAdmin::FormBuilder.new(:player, @object, helper, {}, nil)
9
+ @builder.stub(:field_for).and_return("field")
10
+ end
11
+
12
+ it 'should not add additional error div from default ActionView::Base.field_error_proc' do
13
+ @builder.generate({ :action => :create, :model_config => RailsAdmin.config(Player) }).should_not have_css(".field_with_errors")
14
+ @builder.generate({ :action => :create, :model_config => RailsAdmin.config(Player) }).should have_css(".control-group.error")
15
+ end
16
+ end
17
+ end
@@ -18,7 +18,15 @@ class Ability
18
18
  can :access, :rails_admin
19
19
  can :manage, :all
20
20
  can :show_in_app, :all
21
- cannot [:update, :destroy], Player, :retired => true
21
+
22
+
23
+ # fix for buggy and inconsistent behaviour in Cancan 1.6.8 => https://github.com/ryanb/cancan/issues/721
24
+ if CI_ORM != :mongoid
25
+ cannot [:update, :destroy], Player
26
+ can [:update, :destroy], Player, :retired => false
27
+ else
28
+ cannot [:update, :destroy], Player, :retired => true
29
+ end
22
30
  end
23
31
  end
24
32
  end
@@ -47,7 +55,7 @@ describe "RailsAdmin CanCan Authorization" do
47
55
 
48
56
  describe "with no roles" do
49
57
  before(:each) do
50
- @user.update_attribute(:roles, [])
58
+ @user.update_attributes(:roles => [])
51
59
  end
52
60
 
53
61
  it "GET /admin should raise CanCan::AccessDenied" do
@@ -63,7 +71,7 @@ describe "RailsAdmin CanCan Authorization" do
63
71
 
64
72
  describe "with read player role" do
65
73
  before(:each) do
66
- @user.update_attribute(:roles, [:admin, :read_player])
74
+ @user.update_attributes(:roles => [:admin, :read_player])
67
75
  end
68
76
 
69
77
  it "GET /admin should show Player but not League" do
@@ -111,7 +119,7 @@ describe "RailsAdmin CanCan Authorization" do
111
119
 
112
120
  describe "with create and read player role" do
113
121
  before(:each) do
114
- @user.update_attribute(:roles, [:admin, :read_player, :create_player])
122
+ @user.update_attributes(:roles => [:admin, :read_player, :create_player])
115
123
  end
116
124
 
117
125
  it "GET /admin/player/new should render and create record upon submission" do
@@ -144,7 +152,7 @@ describe "RailsAdmin CanCan Authorization" do
144
152
 
145
153
  describe "with update and read player role" do
146
154
  before(:each) do
147
- @user.update_attribute(:roles, [:admin, :read_player, :update_player])
155
+ @user.update_attributes(:roles => [:admin, :read_player, :update_player])
148
156
  end
149
157
 
150
158
  it "GET /admin/player/1/edit should render and update record upon submission" do
@@ -179,7 +187,7 @@ describe "RailsAdmin CanCan Authorization" do
179
187
  describe "with history role" do
180
188
  it 'shows links to history action' do
181
189
 
182
- @user.update_attribute(:roles, [:admin, :read_player, :history_player])
190
+ @user.update_attributes(:roles => [:admin, :read_player, :history_player])
183
191
  @player = FactoryGirl.create :player
184
192
 
185
193
  visit index_path(:model_name => "player")
@@ -200,7 +208,7 @@ describe "RailsAdmin CanCan Authorization" do
200
208
  describe "with show in app role" do
201
209
  it 'shows links to show in app action' do
202
210
 
203
- @user.update_attribute(:roles, [:admin, :read_player, :show_in_app_player])
211
+ @user.update_attributes(:roles => [:admin, :read_player, :show_in_app_player])
204
212
  @player = FactoryGirl.create :player
205
213
 
206
214
  visit index_path(:model_name => "player")
@@ -223,7 +231,7 @@ describe "RailsAdmin CanCan Authorization" do
223
231
  describe "with all roles" do
224
232
  it 'shows links to all actions' do
225
233
 
226
- @user.update_attribute(:roles, [:admin, :manage_player])
234
+ @user.update_attributes(:roles => [:admin, :manage_player])
227
235
  @player = FactoryGirl.create :player
228
236
 
229
237
  visit index_path(:model_name => "player")
@@ -245,7 +253,7 @@ describe "RailsAdmin CanCan Authorization" do
245
253
 
246
254
  describe "with destroy and read player role" do
247
255
  before(:each) do
248
- @user.update_attribute(:roles, [:admin, :read_player, :destroy_player])
256
+ @user.update_attributes(:roles => [:admin, :read_player, :destroy_player])
249
257
  end
250
258
 
251
259
  it "GET /admin/player/1/delete should render and destroy record upon submission" do
@@ -286,18 +294,18 @@ describe "RailsAdmin CanCan Authorization" do
286
294
 
287
295
  describe "with exception role" do
288
296
  it "GET /admin/player/bulk_delete should render records which are authorized to" do
289
- @user.update_attribute(:roles, [:admin, :test_exception])
297
+ @user.update_attributes(:roles => [:admin, :test_exception])
290
298
  active_player = FactoryGirl.create :player, :retired => false
291
299
  retired_player = FactoryGirl.create :player, :retired => true
292
300
 
293
301
  page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id)))
294
-
302
+
295
303
  should have_content(active_player.name)
296
304
  should_not have_content(retired_player.name)
297
305
  end
298
306
 
299
307
  it "POST /admin/player/bulk_destroy should destroy records which are authorized to" do
300
- @user.update_attribute(:roles, [:admin, :test_exception])
308
+ @user.update_attributes(:roles => [:admin, :test_exception])
301
309
  active_player = FactoryGirl.create :player, :retired => false
302
310
  retired_player = FactoryGirl.create :player, :retired => true
303
311
 
@@ -316,7 +324,7 @@ describe "RailsAdmin CanCan Authorization" do
316
324
 
317
325
  describe "with admin role only" do
318
326
  before(:each) do
319
- @user.update_attribute(:roles, [:admin])
327
+ @user.update_attributes(:roles => [:admin])
320
328
  end
321
329
 
322
330
  it "GET /admin/team should render successfully" do
@@ -4,18 +4,11 @@ describe "RailsAdmin Namespaced Model Create" do
4
4
 
5
5
  subject { page }
6
6
 
7
- before(:each) do
7
+ it 'should create object with correct attributes' do
8
8
  visit new_path(:model_name => "cms~basic_page")
9
9
 
10
10
  fill_in "cms_basic_page[title]", :with => "Hello"
11
11
  fill_in "cms_basic_page[content]", :with => "World"
12
- end
13
-
14
- it 'should be successful' do
15
- click_button "Save"
16
- end
17
-
18
- it 'should create object with correct attributes' do
19
12
  expect {
20
13
  click_button "Save"
21
14
  }.to change(Cms::BasicPage, :count).by(1)
@@ -5,14 +5,11 @@ describe "RailsAdmin Basic Delete" do
5
5
  subject { page }
6
6
 
7
7
  describe "delete" do
8
- before(:each) do
8
+ it "should show \"Delete model\"" do
9
9
  @draft = FactoryGirl.create :draft
10
10
  @player = @draft.player
11
11
  @comment = @player.comments.create
12
12
  visit delete_path(:model_name => "player", :id => @player.id)
13
- end
14
-
15
- it "should show \"Delete model\"" do
16
13
  should have_content("delete this player")
17
14
  should have_link(@player.name, :href => "/admin/player/#{@player.id}")
18
15
  should have_link("Draft ##{@draft.id}", :href => "/admin/draft/#{@draft.id}")
@@ -50,4 +47,18 @@ describe "RailsAdmin Basic Delete" do
50
47
  should_not have_selector("a[href=\"/admin/comment/#{@comment.id}\"]")
51
48
  end
52
49
  end
50
+
51
+ describe "delete of an object which has an associated item without id" do
52
+ before(:each) do
53
+ @player = FactoryGirl.create :player
54
+ Player.any_instance.stub(:draft).and_return(Draft.new)
55
+ visit delete_path(:model_name => "player", :id => @player.id)
56
+ end
57
+
58
+ it "should show \"Delete model\"" do
59
+ should_not have_content("Routing Error")
60
+ should have_content("delete this player")
61
+ should have_link(@player.name, :href => "/admin/player/#{@player.id}")
62
+ end
63
+ end
53
64
  end
@@ -29,12 +29,9 @@ describe "RailsAdmin Basic List" do
29
29
  end
30
30
 
31
31
  describe "GET /admin/player as list" do
32
- before do
32
+ it "should show \"List of Models\", should show filters and should show column headers" do
33
33
  21.times { FactoryGirl.create :player } # two pages of players
34
34
  visit index_path(:model_name => "player")
35
- end
36
-
37
- it "should show \"List of Models\", should show filters and should show column headers" do
38
35
  should have_content("List of Players")
39
36
  should have_content("Created at")
40
37
  should have_content("Updated at")
@@ -281,31 +278,31 @@ describe "RailsAdmin Basic List" do
281
278
  end
282
279
  end
283
280
 
284
- describe "GET /admin/player with 20 pages, page 8" do
281
+ describe "GET /admin/player with 3 pages, page 2" do
285
282
  before(:each) do
286
283
  items_per_page = RailsAdmin.config.default_items_per_page
287
- (items_per_page * 20).times { FactoryGirl.create(:player) }
288
- visit index_path(:model_name => "player", :page => 8)
284
+ (items_per_page * 3).times { FactoryGirl.create(:player) }
285
+ visit index_path(:model_name => "player", :page => 2)
289
286
  end
290
287
 
291
288
  it "should paginate correctly" do
292
289
  find('.pagination ul li:first').should have_content("« Prev")
293
290
  find('.pagination ul li:last').should have_content("Next »")
294
- find('.pagination ul li.active').should have_content("8")
291
+ find('.pagination ul li.active').should have_content("2")
295
292
  end
296
293
  end
297
294
 
298
- describe "list with 20 pages, page 20" do
295
+ describe "list with 3 pages, page 3" do
299
296
  before(:each) do
300
297
  items_per_page = RailsAdmin.config.default_items_per_page
301
- @players = (items_per_page * 20).times.map { FactoryGirl.create(:player) }
302
- visit index_path(:model_name => "player", :page => 20)
298
+ @players = (items_per_page * 3).times.map { FactoryGirl.create(:player) }
299
+ visit index_path(:model_name => "player", :page => 3)
303
300
  end
304
301
 
305
302
  it "should paginate correctly and contain the right item" do
306
303
  find('.pagination ul li:first').should have_content("« Prev")
307
304
  find('.pagination ul li:last').should have_content("Next »")
308
- find('.pagination ul li.active').should have_content("20")
305
+ find('.pagination ul li.active').should have_content("3")
309
306
  end
310
307
  end
311
308
 
@@ -4,22 +4,14 @@ describe "RailsAdmin Basic Show" do
4
4
  subject { page }
5
5
 
6
6
  describe "show" do
7
- before(:each) do
7
+ it "should have History, Edit, Delete, Details and attributes" do
8
8
  @player = FactoryGirl.create :player
9
9
  visit show_path(:model_name => "player", :id => @player.id)
10
- end
11
10
 
12
- it "should have History, Edit, Delete" do
13
11
  should have_selector("a", :text => "History")
14
12
  should have_selector("a", :text => "Edit")
15
13
  should have_selector("a", :text => "Delete")
16
- end
17
-
18
- it "should show 'Details'" do
19
14
  should have_content("Details")
20
- end
21
-
22
- it "should show attributes" do
23
15
  should have_content("Name")
24
16
  should have_content(@player.name)
25
17
  should have_content("Number")
@@ -39,7 +31,7 @@ describe "RailsAdmin Basic Show" do
39
31
  before(:each) do
40
32
  @player = FactoryGirl.create :player
41
33
  @team = FactoryGirl.create :team
42
- @player.update_attribute(:team_id, @team.id)
34
+ @player.update_attributes(:team_id => @team.id)
43
35
  visit show_path(:model_name => "player", :id => @player.id)
44
36
  end
45
37
 
@@ -143,6 +143,12 @@ describe "RailsAdmin Basic Update" do
143
143
 
144
144
  describe "update with serialized objects" do
145
145
  before(:each) do
146
+ RailsAdmin.config do |c|
147
+ c.model User do
148
+ configure :roles, :serialized
149
+ end
150
+ end
151
+
146
152
  @user = FactoryGirl.create :user
147
153
 
148
154
  visit edit_path(:model_name => "user", :id => @user.id)
@@ -5,6 +5,22 @@ require 'spec_helper'
5
5
  describe "RailsAdmin Config DSL Edit Section" do
6
6
 
7
7
  subject { page }
8
+
9
+ describe " a field with 'format' as a name (Kernel function)" do
10
+
11
+ it "should be updatable without any error" do
12
+ RailsAdmin.config FieldTest do
13
+ edit do
14
+ field :format
15
+ end
16
+ end
17
+ visit new_path(:model_name => "field_test")
18
+ fill_in "field_test[format]", :with => "test for format"
19
+ click_button "Save"
20
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
21
+ @record.format.should eql("test for format")
22
+ end
23
+ end
8
24
 
9
25
  describe "default_value" do
10
26
 
@@ -154,7 +170,7 @@ describe "RailsAdmin Config DSL Edit Section" do
154
170
  column :name, 'string(50)'
155
171
  column :division, :string
156
172
  end
157
- RailsAdmin.config.included_models = [HelpTest]
173
+ RailsAdmin.config.included_models = [HelpTest, Team]
158
174
  end
159
175
 
160
176
  after(:each) do
@@ -163,6 +179,41 @@ describe "RailsAdmin Config DSL Edit Section" do
163
179
  HelpTest.reset_callbacks(:validate)
164
180
  end
165
181
 
182
+ context "using mongoid", :skip_active_record => true do
183
+ it "should use the db column size for the maximum length" do
184
+ visit new_path(:model_name => "help_test")
185
+ find("#help_test_name_field .help-block").should have_content("Length up to 255.")
186
+ end
187
+
188
+ it "should return nil for the maximum length" do
189
+ visit new_path(:model_name => "team")
190
+ find("#team_custom_field_field .help-block").should_not have_content("Length")
191
+ end
192
+ end
193
+
194
+ context "using active_record", :skip_mongoid => true do
195
+ it "should use the db column size for the maximum length" do
196
+ visit new_path(:model_name => "help_test")
197
+ find("#help_test_name_field .help-block").should have_content("Length up to 50.")
198
+ end
199
+
200
+ it "should use the :minimum setting from the validation" do
201
+ HelpTest.class_eval do
202
+ validates_length_of :name, :minimum => 1
203
+ end
204
+ visit new_path(:model_name => "help_test")
205
+ find("#help_test_name_field .help-block").should have_content("Length of 1-50.")
206
+ end
207
+
208
+ it "should use the minimum of db column size or :maximum setting from the validation" do
209
+ HelpTest.class_eval do
210
+ validates_length_of :name, :maximum => 51
211
+ end
212
+ visit new_path(:model_name => "help_test")
213
+ find("#help_test_name_field .help-block").should have_content("Length up to 50.")
214
+ end
215
+ end
216
+
166
217
  it "should show help section if present" do
167
218
  RailsAdmin.config HelpTest do
168
219
  edit do
@@ -215,35 +266,12 @@ describe "RailsAdmin Config DSL Edit Section" do
215
266
  find("#help_test_name_field .help-block").should have_content("Length of 3.")
216
267
  end
217
268
 
218
- describe "using ORM column size", :skip_mongoid => true do
219
- it "should use the db column size for the maximum length" do
220
- visit new_path(:model_name => "help_test")
221
- find("#help_test_name_field .help-block").should have_content("Length up to 50.")
222
- end
223
-
224
- it "should use the :minimum setting from the validation" do
225
- HelpTest.class_eval do
226
- validates_length_of :name, :minimum => 1
227
- end
228
- visit new_path(:model_name => "help_test")
229
- find("#help_test_name_field .help-block").should have_content("Length of 1-50.")
230
- end
231
-
232
- it "should use the :maximum setting from the validation" do
233
- HelpTest.class_eval do
234
- validates_length_of :name, :maximum => 49
235
- end
236
- visit new_path(:model_name => "help_test")
237
- find("#help_test_name_field .help-block").should have_content("Length up to 49.")
238
- end
239
-
240
- it "should use the minimum of db column size or :maximum setting from the validation" do
241
- HelpTest.class_eval do
242
- validates_length_of :name, :maximum => 51
243
- end
244
- visit new_path(:model_name => "help_test")
245
- find("#help_test_name_field .help-block").should have_content("Length up to 50.")
269
+ it "should use the :maximum setting from the validation" do
270
+ HelpTest.class_eval do
271
+ validates_length_of :name, :maximum => 49
246
272
  end
273
+ visit new_path(:model_name => "help_test")
274
+ find("#help_test_name_field .help-block").should have_content("Length up to 49.")
247
275
  end
248
276
 
249
277
  it "should use the :minimum and :maximum from the validation" do
@@ -424,7 +452,7 @@ describe "RailsAdmin Config DSL Edit Section" do
424
452
  end
425
453
 
426
454
  it "should be globally renameable by type" do
427
- RailsAdmin::Config.models do
455
+ RailsAdmin.config 'Team' do
428
456
  edit do
429
457
  fields_of_type :string do
430
458
  label { "#{label} (STRING)" }
@@ -503,7 +531,7 @@ describe "RailsAdmin Config DSL Edit Section" do
503
531
  end
504
532
 
505
533
  it "should be globally hideable by type" do
506
- RailsAdmin::Config.models do
534
+ RailsAdmin.config 'Team' do
507
535
  edit do
508
536
  fields_of_type :string do
509
537
  hide
@@ -563,203 +591,6 @@ describe "RailsAdmin Config DSL Edit Section" do
563
591
  end
564
592
  end
565
593
 
566
- describe "input format of" do
567
-
568
- before(:each) do
569
- @time = ::Time.now.getutc
570
- end
571
-
572
- after(:each) do
573
- Time.zone = 'UTC'
574
- end
575
-
576
- describe "a datetime field" do
577
-
578
- it "should default to %B %d, %Y %H:%M" do
579
- visit new_path(:model_name => "field_test")
580
- fill_in "field_test[datetime_field]", :with => @time.strftime("%B %d, %Y %H:%M")
581
- click_button "Save"
582
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
583
- @record.datetime_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
584
- end
585
-
586
- it "should have a simple customization option" do
587
- RailsAdmin.config FieldTest do
588
- edit do
589
- field :datetime_field do
590
- date_format :default
591
- end
592
- end
593
- end
594
- visit new_path(:model_name => "field_test")
595
- fill_in "field_test[datetime_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
596
- click_button "Save"
597
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
598
- @record.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
599
- end
600
-
601
- it "should have a customization option" do
602
- RailsAdmin.config FieldTest do
603
- list do
604
- field :datetime_field do
605
- strftime_format "%Y-%m-%d %H:%M:%S"
606
- end
607
- end
608
- end
609
- visit new_path(:model_name => "field_test")
610
- fill_in "field_test[datetime_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
611
- click_button "Save"
612
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
613
- @record.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
614
- end
615
- end
616
-
617
- describe "a timestamp field", :active_record => true do
618
-
619
- it "should default to %B %d, %Y %H:%M" do
620
- visit new_path(:model_name => "field_test")
621
- fill_in "field_test[timestamp_field]", :with => @time.strftime("%B %d, %Y %H:%M")
622
- click_button "Save"
623
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
624
- @record.timestamp_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
625
- end
626
-
627
- it "should have a simple customization option" do
628
- RailsAdmin.config FieldTest do
629
- edit do
630
- field :timestamp_field do
631
- date_format :default
632
- end
633
- end
634
- end
635
- visit new_path(:model_name => "field_test")
636
- fill_in "field_test[timestamp_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
637
- click_button "Save"
638
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
639
- @record.timestamp_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
640
- end
641
-
642
- it "should have a customization option" do
643
- RailsAdmin.config FieldTest do
644
- edit do
645
- field :timestamp_field do
646
- strftime_format "%Y-%m-%d %H:%M:%S"
647
- end
648
- end
649
- end
650
- visit new_path(:model_name => "field_test")
651
- fill_in "field_test[timestamp_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
652
- click_button "Save"
653
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
654
- @record.timestamp_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
655
- end
656
- end
657
-
658
- describe " a field with 'format' as a name (Kernel function)" do
659
-
660
- it "should be updatable without any error" do
661
- RailsAdmin.config FieldTest do
662
- edit do
663
- field :format
664
- end
665
- end
666
- visit new_path(:model_name => "field_test")
667
- fill_in "field_test[format]", :with => "test for format"
668
- click_button "Save"
669
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
670
- @record.format.should eql("test for format")
671
- end
672
- end
673
-
674
-
675
- describe "a time field" do
676
-
677
- it "should default to %H:%M" do
678
- visit new_path(:model_name => "field_test")
679
- fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
680
- click_button "Save"
681
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
682
- @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
683
- end
684
-
685
- it "should interpret time value as UTC when timezone is specified" do
686
- Time.zone = 'Eastern Time (US & Canada)' # -05:00
687
-
688
- visit new_path(:model_name => "field_test")
689
- fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
690
- click_button "Save"
691
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
692
- @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
693
- end
694
-
695
- it "should have a customization option" do
696
- RailsAdmin.config FieldTest do
697
- edit do
698
- field :time_field do
699
- strftime_format "%I:%M %p"
700
- end
701
- end
702
- end
703
- visit new_path(:model_name => "field_test")
704
- fill_in "field_test[time_field]", :with => @time.strftime("%I:%M %p")
705
- click_button "Save"
706
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
707
- @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
708
- end
709
- end
710
-
711
- describe "a date field" do
712
-
713
- it "should default to %B %d, %Y" do
714
- visit new_path(:model_name => "field_test")
715
- fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
716
- click_button "Save"
717
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
718
- @record.date_field.should eql(::Date.parse(@time.to_s))
719
- end
720
-
721
- it "should cover a timezone lag even if in UTC+n:00 timezone." do
722
- Time.zone = 'Tokyo' # +09:00
723
-
724
- visit new_path(:model_name => "field_test")
725
- fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
726
- click_button "Save"
727
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
728
- @record.date_field.should eql(::Date.parse(@time.to_s))
729
- end
730
-
731
- it "should have a simple customization option" do
732
- RailsAdmin.config FieldTest do
733
- edit do
734
- field :date_field do
735
- date_format :default
736
- end
737
- end
738
- end
739
- visit new_path(:model_name => "field_test")
740
- fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
741
- click_button "Save"
742
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
743
- @record.date_field.should eql(::Date.parse(@time.to_s))
744
- end
745
-
746
- it "should have a customization option" do
747
- RailsAdmin.config FieldTest do
748
- edit do
749
- field :date_field do
750
- strftime_format "%Y-%m-%d"
751
- end
752
- end
753
- end
754
- visit new_path(:model_name => "field_test")
755
- fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
756
- click_button "Save"
757
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
758
- @record.date_field.should eql(::Date.parse(@time.to_s))
759
- end
760
- end
761
- end
762
-
763
594
  describe 'bindings' do
764
595
  it 'should be present at creation time' do
765
596
  RailsAdmin.config do |config|
@@ -785,17 +616,15 @@ describe "RailsAdmin Config DSL Edit Section" do
785
616
 
786
617
  describe 'nested form' do
787
618
  it 'should work' do
788
- visit new_path(:model_name => "field_test")
789
- fill_in "field_test_comment_attributes_content", :with => 'nested comment content'
790
- click_button "Save"
791
- @record = RailsAdmin::AbstractModel.new("FieldTest").first
792
- @record.comment.content.should == 'nested comment content'
619
+ @record = FactoryGirl.create :field_test
793
620
  @record.nested_field_tests = [NestedFieldTest.create!(:title => 'title 1'), NestedFieldTest.create!(:title => 'title 2')]
794
621
  visit edit_path(:model_name => "field_test", :id => @record.id)
622
+ fill_in "field_test_comment_attributes_content", :with => 'nested comment content'
795
623
  fill_in "field_test_nested_field_tests_attributes_0_title", :with => 'nested field test title 1 edited'
796
624
  page.find('#field_test_nested_field_tests_attributes_1__destroy').set('true')
797
625
  click_button "Save"
798
626
  @record.reload
627
+ @record.comment.content.should == 'nested comment content'
799
628
  @record.nested_field_tests.length.should == 1
800
629
  @record.nested_field_tests[0].title.should == 'nested field test title 1 edited'
801
630
  end
@@ -850,7 +679,15 @@ describe "RailsAdmin Config DSL Edit Section" do
850
679
  visit edit_path(:model_name => "field_test", :id => @record.id)
851
680
  find('#field_test_nested_field_tests_attributes_0_title').value.should == 'nested title 1'
852
681
  should_not have_selector('form .remove_nested_fields')
853
- should have_selector('.fields_blueprint .remove_nested_fields')
682
+ should have_selector('[id$="_fields_blueprint"] .remove_nested_fields')
683
+ end
684
+ end
685
+
686
+ describe "when a field which have the same name of nested_in field's" do
687
+ it "should not hide fields which is not associated with nesting parent field's model" do
688
+ visit new_path(:model_name => "field_test")
689
+ should_not have_selector('select#field_test_nested_field_tests_attributes_new_nested_field_tests_field_test_id')
690
+ should have_selector('select#field_test_nested_field_tests_attributes_new_nested_field_tests_another_field_test_id')
854
691
  end
855
692
  end
856
693
  end
@@ -938,6 +775,26 @@ describe "RailsAdmin Config DSL Edit Section" do
938
775
  end
939
776
  end
940
777
 
778
+ describe "bootstrap_wysihtml5 Support" do
779
+
780
+ it "should start with bootstrap_wysihtml5 disabled" do
781
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :notes}
782
+ field.bootstrap_wysihtml5.should be false
783
+ end
784
+
785
+ it "should add Javascript to enable bootstrap_wysihtml5" do
786
+ RailsAdmin.config Draft do
787
+ edit do
788
+ field :notes do
789
+ bootstrap_wysihtml5 true
790
+ end
791
+ end
792
+ end
793
+ visit new_path(:model_name => "draft")
794
+ should have_selector('textarea#draft_notes[data-richtext="bootstrap-wysihtml5"]')
795
+ end
796
+ end
797
+
941
798
  describe "Paperclip Support" do
942
799
 
943
800
  it "should show a file upload field" do
@@ -952,101 +809,185 @@ describe "RailsAdmin Config DSL Edit Section" do
952
809
  end
953
810
 
954
811
  describe "Enum field support" do
955
- it "should auto-detect enumeration when object responds to '\#{method}_enum'" do
956
- Team.class_eval do
957
- def color_enum
958
- ["blue", "green", "red"]
812
+ describe "when object responds to '\#{method}_enum'" do
813
+ before do
814
+ Team.class_eval do
815
+ def color_enum
816
+ ["blue", "green", "red"]
817
+ end
959
818
  end
960
- end
961
- RailsAdmin.config Team do
962
- edit do
963
- field :color
819
+ RailsAdmin.config Team do
820
+ edit do
821
+ field :color
822
+ end
964
823
  end
824
+ visit new_path(:model_name => "team")
825
+ end
826
+
827
+ after do
828
+ Team.send(:remove_method, :color_enum)
829
+ end
830
+
831
+ it "should auto-detect enumeration" do
832
+ should have_selector(".enum_type select")
833
+ should_not have_selector(".enum_type select[multiple]")
834
+ should have_content("green")
965
835
  end
966
- visit new_path(:model_name => "team")
967
- should have_selector(".enum_type select")
968
- should have_content("green")
969
- Team.send(:remove_method, :color_enum) # Reset
970
836
  end
971
837
 
972
- it "should auto-detect enumeration when class responds to '::{method}_enum'" do
973
- Team.instance_eval do
974
- def color_enum
975
- ["blue", "green", "red"]
838
+ describe "when class responds to '\#{method}_enum'" do
839
+ before do
840
+ Team.instance_eval do
841
+ def color_enum
842
+ ["blue", "green", "red"]
843
+ end
976
844
  end
977
- end
978
- RailsAdmin.config Team do
979
- edit do
980
- field :color
845
+ RailsAdmin.config Team do
846
+ edit do
847
+ field :color
848
+ end
981
849
  end
850
+ visit new_path(:model_name => "team")
851
+ end
852
+
853
+ after do
854
+ Team.instance_eval { undef :color_enum }
855
+ end
856
+
857
+ it "should auto-detect enumeration" do
858
+ should have_selector(".enum_type select")
859
+ should have_content("green")
982
860
  end
983
- visit new_path(:model_name => "team")
984
- should have_selector(".enum_type select")
985
- should have_content("green")
986
- Team.instance_eval { undef :color_enum } # Reset
987
861
  end
988
862
 
989
- it "should allow configuration of the enum method" do
990
- Team.class_eval do
991
- def color_list
992
- ["blue", "green", "red"]
863
+ describe "the enum instance method" do
864
+ before do
865
+ Team.class_eval do
866
+ def color_list
867
+ ["blue", "green", "red"]
868
+ end
993
869
  end
994
- end
995
- RailsAdmin.config Team do
996
- edit do
997
- field :color, :enum do
998
- enum_method :color_list
870
+ RailsAdmin.config Team do
871
+ edit do
872
+ field :color, :enum do
873
+ enum_method :color_list
874
+ end
999
875
  end
1000
876
  end
877
+ visit new_path(:model_name => "team")
878
+ end
879
+
880
+ after do
881
+ Team.send(:remove_method, :color_list)
882
+ end
883
+
884
+ it "should allow configuration" do
885
+ should have_selector(".enum_type select")
886
+ should have_content("green")
1001
887
  end
1002
- visit new_path(:model_name => "team")
1003
- should have_selector(".enum_type select")
1004
- should have_content("green")
1005
- Team.send(:remove_method, :color_list) # Reset
1006
888
  end
1007
889
 
1008
- it "should allow configuration of the enum class method" do
1009
- Team.instance_eval do
1010
- def color_list
1011
- ["blue", "green", "red"]
890
+ describe "the enum class method" do
891
+ before do
892
+ Team.instance_eval do
893
+ def color_list
894
+ ["blue", "green", "red"]
895
+ end
1012
896
  end
1013
- end
1014
- RailsAdmin.config Team do
1015
- edit do
1016
- field :color, :enum do
1017
- enum_method :color_list
897
+ RailsAdmin.config Team do
898
+ edit do
899
+ field :color, :enum do
900
+ enum_method :color_list
901
+ end
1018
902
  end
1019
903
  end
904
+ visit new_path(:model_name => "team")
905
+ end
906
+
907
+ after do
908
+ Team.instance_eval { undef :color_list }
909
+ end
910
+
911
+ it "should allow configuration" do
912
+ should have_selector(".enum_type select")
913
+ should have_content("green")
1020
914
  end
1021
- visit new_path(:model_name => "team")
1022
- should have_selector(".enum_type select")
1023
- should have_content("green")
1024
- Team.instance_eval { undef :color_list } # Reset
1025
915
  end
1026
916
 
1027
- it "should allow direct listing of enumeration options and override enum method" do
1028
- Team.class_eval do
1029
- def color_list
1030
- ["blue", "green", "red"]
917
+ describe "when overriding enum configuration" do
918
+ before do
919
+ Team.class_eval do
920
+ def color_list
921
+ ["blue", "green", "red"]
922
+ end
1031
923
  end
1032
- end
1033
- RailsAdmin.config Team do
1034
- edit do
1035
- field :color, :enum do
1036
- enum_method :color_list
1037
- enum do
1038
- ["yellow", "black"]
924
+ RailsAdmin.config Team do
925
+ edit do
926
+ field :color, :enum do
927
+ enum_method :color_list
928
+ enum do
929
+ ["yellow", "black"]
930
+ end
1039
931
  end
1040
932
  end
1041
933
  end
934
+ visit new_path(:model_name => "team")
935
+ end
936
+
937
+ after do
938
+ Team.send(:remove_method, :color_list)
939
+ end
940
+
941
+ it "should allow direct listing of enumeration options and override enum method" do
942
+ should have_selector(".enum_type select")
943
+ should have_no_content("green")
944
+ should have_content("yellow")
945
+ end
946
+ end
947
+
948
+ describe "when serialize is enabled in ActiveRecord model", :active_record => true do
949
+ before do
950
+ Team.instance_eval do
951
+ serialize :color
952
+ def color_enum
953
+ ["blue", "green", "red"]
954
+ end
955
+ end
956
+ visit new_path(:model_name => "team")
957
+ end
958
+
959
+ after do
960
+ Team.serialized_attributes.clear
961
+ Team.instance_eval { undef :color_enum }
962
+ end
963
+
964
+ it "should make enumeration multi-selectable" do
965
+ should have_selector(".enum_type select[multiple]")
1042
966
  end
1043
- visit new_path(:model_name => "team")
1044
- should have_selector(".enum_type select")
1045
- should have_no_content("green")
1046
- should have_content("yellow")
1047
- Team.send(:remove_method, :color_list) # Reset
1048
967
  end
1049
968
 
969
+ describe "when serialize is enabled in Mongoid model", :mongoid => true do
970
+ before do
971
+ Team.instance_eval do
972
+ field :color, :type => Array
973
+ def color_enum
974
+ ["blue", "green", "red"]
975
+ end
976
+ end
977
+ visit new_path(:model_name => "team")
978
+ end
979
+
980
+ after do
981
+ Team.instance_eval do
982
+ field :color, :type => String
983
+ undef :color_enum
984
+ end
985
+ end
986
+
987
+ it "should make enumeration multi-selectable" do
988
+ should have_selector(".enum_type select[multiple]")
989
+ end
990
+ end
1050
991
  end
1051
992
 
1052
993
  describe "ColorPicker Support" do