obitum-rails_admin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. data/Gemfile +57 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +206 -0
  4. data/Rakefile +14 -0
  5. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  6. data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
  7. data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
  8. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  9. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  10. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  11. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  12. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  13. data/app/assets/images/rails_admin/calendar.png +0 -0
  14. data/app/assets/images/rails_admin/clock.png +0 -0
  15. data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  16. data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  17. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  18. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  19. data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  20. data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  21. data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  22. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  23. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  24. data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  25. data/app/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  26. data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  27. data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  28. data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  29. data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  30. data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  31. data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  32. data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  33. data/app/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  34. data/app/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  35. data/app/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  36. data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  37. data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
  38. data/app/assets/images/rails_admin/colorpicker/select2.png +0 -0
  39. data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
  40. data/app/assets/images/rails_admin/logo.png +0 -0
  41. data/app/assets/images/rails_admin/magnifier.png +0 -0
  42. data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
  43. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  44. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
  45. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  46. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  47. data/app/assets/javascripts/rails_admin/custom/ui.js +12 -0
  48. data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +5271 -0
  49. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
  50. data/app/assets/javascripts/rails_admin/jquery.pjax.js +266 -0
  51. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1219 -0
  52. data/app/assets/javascripts/rails_admin/jquery_nested_form.js +58 -0
  53. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
  54. data/app/assets/javascripts/rails_admin/ra.filter-box.js +120 -0
  55. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +280 -0
  56. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +181 -0
  57. data/app/assets/javascripts/rails_admin/ra.remote-form.js +148 -0
  58. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +19 -0
  59. data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
  60. data/app/assets/javascripts/rails_admin/ui.js.coffee +33 -0
  61. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  66. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  67. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  68. data/app/assets/stylesheets/rails_admin/base/README +2 -0
  69. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  70. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +145 -0
  71. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  72. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
  73. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
  74. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
  75. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +41 -0
  76. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
  77. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +53 -0
  78. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
  79. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +85 -0
  80. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  81. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
  82. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  83. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  84. data/app/controllers/rails_admin/application_controller.rb +87 -0
  85. data/app/controllers/rails_admin/main_controller.rb +148 -0
  86. data/app/helpers/rails_admin/application_helper.rb +97 -0
  87. data/app/helpers/rails_admin/form_builder.rb +106 -0
  88. data/app/helpers/rails_admin/main_helper.rb +36 -0
  89. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  90. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  91. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  92. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  93. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  94. data/app/views/layouts/rails_admin/_navigation.html.haml +17 -0
  95. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +11 -0
  96. data/app/views/layouts/rails_admin/application.html.haml +39 -0
  97. data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
  98. data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
  99. data/app/views/rails_admin/main/_form_colorpicker.html.haml +23 -0
  100. data/app/views/rails_admin/main/_form_datetime.html.haml +4 -0
  101. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -0
  102. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  103. data/app/views/rails_admin/main/_form_file_upload.html.haml +17 -0
  104. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +57 -0
  105. data/app/views/rails_admin/main/_form_filtering_select.html.haml +46 -0
  106. data/app/views/rails_admin/main/_form_nested_many.html.haml +6 -0
  107. data/app/views/rails_admin/main/_form_nested_one.html.haml +6 -0
  108. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +34 -0
  109. data/app/views/rails_admin/main/_form_text.html.haml +9 -0
  110. data/app/views/rails_admin/main/_submit_buttons.html.haml +13 -0
  111. data/app/views/rails_admin/main/bulk_delete.html.haml +7 -0
  112. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  113. data/app/views/rails_admin/main/delete.html.haml +14 -0
  114. data/app/views/rails_admin/main/edit.html.haml +2 -0
  115. data/app/views/rails_admin/main/export.html.haml +71 -0
  116. data/app/views/rails_admin/main/history.html.haml +42 -0
  117. data/app/views/rails_admin/main/index.html.haml +123 -0
  118. data/app/views/rails_admin/main/new.html.haml +2 -0
  119. data/app/views/rails_admin/main/show.html.haml +14 -0
  120. data/config/initializers/active_record_extensions.rb +19 -0
  121. data/config/initializers/devise_patch.rb +9 -0
  122. data/config/initializers/haml.rb +3 -0
  123. data/config/locales/rails_admin.en.yml +129 -0
  124. data/config/routes.rb +12 -0
  125. data/lib/generators/rails_admin/install_generator.rb +84 -0
  126. data/lib/generators/rails_admin/templates/drop.rb +18 -0
  127. data/lib/generators/rails_admin/templates/initializer.erb +101 -0
  128. data/lib/generators/rails_admin/templates/migration.rb +18 -0
  129. data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
  130. data/lib/generators/rails_admin/utils.rb +30 -0
  131. data/lib/rails_admin.rb +39 -0
  132. data/lib/rails_admin/abstract_model.rb +73 -0
  133. data/lib/rails_admin/abstract_object.rb +28 -0
  134. data/lib/rails_admin/adapters/active_record.rb +347 -0
  135. data/lib/rails_admin/config.rb +293 -0
  136. data/lib/rails_admin/config/actions.rb +121 -0
  137. data/lib/rails_admin/config/actions/base.rb +105 -0
  138. data/lib/rails_admin/config/actions/bulk_delete.rb +56 -0
  139. data/lib/rails_admin/config/actions/dashboard.rb +40 -0
  140. data/lib/rails_admin/config/actions/delete.rb +50 -0
  141. data/lib/rails_admin/config/actions/edit.rb +52 -0
  142. data/lib/rails_admin/config/actions/export.rb +37 -0
  143. data/lib/rails_admin/config/actions/history_index.rb +34 -0
  144. data/lib/rails_admin/config/actions/history_show.rb +34 -0
  145. data/lib/rails_admin/config/actions/index.rb +73 -0
  146. data/lib/rails_admin/config/actions/new.rb +60 -0
  147. data/lib/rails_admin/config/actions/show.rb +27 -0
  148. data/lib/rails_admin/config/actions/show_in_app.rb +23 -0
  149. data/lib/rails_admin/config/base.rb +111 -0
  150. data/lib/rails_admin/config/fields.rb +97 -0
  151. data/lib/rails_admin/config/fields/association.rb +115 -0
  152. data/lib/rails_admin/config/fields/base.rb +274 -0
  153. data/lib/rails_admin/config/fields/factories/carrierwave.rb +12 -0
  154. data/lib/rails_admin/config/fields/factories/devise.rb +30 -0
  155. data/lib/rails_admin/config/fields/factories/dragonfly.rb +21 -0
  156. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  157. data/lib/rails_admin/config/fields/factories/paperclip.rb +27 -0
  158. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  159. data/lib/rails_admin/config/fields/group.rb +65 -0
  160. data/lib/rails_admin/config/fields/groupable.rb +25 -0
  161. data/lib/rails_admin/config/fields/types.rb +26 -0
  162. data/lib/rails_admin/config/fields/types/all.rb +23 -0
  163. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +43 -0
  164. data/lib/rails_admin/config/fields/types/boolean.rb +29 -0
  165. data/lib/rails_admin/config/fields/types/carrierwave.rb +40 -0
  166. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  167. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  168. data/lib/rails_admin/config/fields/types/datetime.rb +165 -0
  169. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  170. data/lib/rails_admin/config/fields/types/dragonfly.rb +59 -0
  171. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  172. data/lib/rails_admin/config/fields/types/file_upload.rb +65 -0
  173. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  174. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  175. data/lib/rails_admin/config/fields/types/has_many_association.rb +37 -0
  176. data/lib/rails_admin/config/fields/types/has_one_association.rb +35 -0
  177. data/lib/rails_admin/config/fields/types/hidden.rb +19 -0
  178. data/lib/rails_admin/config/fields/types/integer.rb +20 -0
  179. data/lib/rails_admin/config/fields/types/paperclip.rb +46 -0
  180. data/lib/rails_admin/config/fields/types/password.rb +42 -0
  181. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
  182. data/lib/rails_admin/config/fields/types/string.rb +43 -0
  183. data/lib/rails_admin/config/fields/types/text.rb +38 -0
  184. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  185. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  186. data/lib/rails_admin/config/has_fields.rb +135 -0
  187. data/lib/rails_admin/config/has_groups.rb +23 -0
  188. data/lib/rails_admin/config/hideable.rb +28 -0
  189. data/lib/rails_admin/config/model.rb +82 -0
  190. data/lib/rails_admin/config/proxy.rb +40 -0
  191. data/lib/rails_admin/config/sections.rb +38 -0
  192. data/lib/rails_admin/config/sections/base.rb +19 -0
  193. data/lib/rails_admin/config/sections/create.rb +11 -0
  194. data/lib/rails_admin/config/sections/edit.rb +11 -0
  195. data/lib/rails_admin/config/sections/export.rb +11 -0
  196. data/lib/rails_admin/config/sections/list.rb +27 -0
  197. data/lib/rails_admin/config/sections/nested.rb +10 -0
  198. data/lib/rails_admin/config/sections/show.rb +10 -0
  199. data/lib/rails_admin/config/sections/update.rb +10 -0
  200. data/lib/rails_admin/engine.rb +21 -0
  201. data/lib/rails_admin/extension.rb +29 -0
  202. data/lib/rails_admin/extensions/cancan.rb +5 -0
  203. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
  204. data/lib/rails_admin/extensions/history.rb +5 -0
  205. data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
  206. data/lib/rails_admin/extensions/history/history.rb +68 -0
  207. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  208. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -0
  209. data/lib/rails_admin/generic_support.rb +18 -0
  210. data/lib/rails_admin/i18n_support.rb +43 -0
  211. data/lib/rails_admin/support/core_extensions.rb +44 -0
  212. data/lib/rails_admin/support/csv_converter.rb +109 -0
  213. data/lib/rails_admin/version.rb +6 -0
  214. data/lib/tasks/prepare_ci_env.rake +27 -0
  215. data/lib/tasks/rails_admin.rake +18 -0
  216. data/spec/ci.sh +2 -0
  217. data/spec/controllers/application_controller_spec.rb +30 -0
  218. data/spec/controllers/main_controller_spec.rb +114 -0
  219. data/spec/database_helpers.rb +15 -0
  220. data/spec/dummy_app/Gemfile +53 -0
  221. data/spec/dummy_app/Rakefile +7 -0
  222. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  223. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  224. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  225. data/spec/dummy_app/app/locales/models.en.yml +16 -0
  226. data/spec/dummy_app/app/models/abstract.rb +5 -0
  227. data/spec/dummy_app/app/models/ball.rb +8 -0
  228. data/spec/dummy_app/app/models/category.rb +3 -0
  229. data/spec/dummy_app/app/models/cms.rb +5 -0
  230. data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
  231. data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
  232. data/spec/dummy_app/app/models/comment.rb +3 -0
  233. data/spec/dummy_app/app/models/division.rb +8 -0
  234. data/spec/dummy_app/app/models/draft.rb +11 -0
  235. data/spec/dummy_app/app/models/fan.rb +5 -0
  236. data/spec/dummy_app/app/models/field_test.rb +20 -0
  237. data/spec/dummy_app/app/models/hardball.rb +2 -0
  238. data/spec/dummy_app/app/models/league.rb +10 -0
  239. data/spec/dummy_app/app/models/nested_field_test.rb +3 -0
  240. data/spec/dummy_app/app/models/player.rb +23 -0
  241. data/spec/dummy_app/app/models/rel_test.rb +6 -0
  242. data/spec/dummy_app/app/models/team.rb +25 -0
  243. data/spec/dummy_app/app/models/user.rb +21 -0
  244. data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
  245. data/spec/dummy_app/app/views/layouts/application.html.erb +13 -0
  246. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  247. data/spec/dummy_app/config.ru +4 -0
  248. data/spec/dummy_app/config/application.rb +47 -0
  249. data/spec/dummy_app/config/boot.rb +6 -0
  250. data/spec/dummy_app/config/database.yml +22 -0
  251. data/spec/dummy_app/config/environment.rb +5 -0
  252. data/spec/dummy_app/config/environments/development.rb +27 -0
  253. data/spec/dummy_app/config/environments/production.rb +51 -0
  254. data/spec/dummy_app/config/environments/test.rb +39 -0
  255. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  256. data/spec/dummy_app/config/initializers/devise.rb +142 -0
  257. data/spec/dummy_app/config/initializers/inflections.rb +10 -0
  258. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  259. data/spec/dummy_app/config/initializers/quiet_assets.rb +10 -0
  260. data/spec/dummy_app/config/initializers/rails_admin.rb +11 -0
  261. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  262. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  263. data/spec/dummy_app/config/routes.rb +10 -0
  264. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  265. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  266. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  267. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  268. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  269. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +19 -0
  270. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  271. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  272. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  273. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  274. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  275. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  276. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  277. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  278. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  279. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  280. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  281. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  282. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  283. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  284. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  285. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  286. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  287. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  288. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  289. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  290. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  291. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  292. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  293. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  294. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  295. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  296. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  297. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  298. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  299. data/spec/dummy_app/db/seeds.rb +18 -0
  300. data/spec/dummy_app/foo/Gemfile +17 -0
  301. data/spec/dummy_app/foo/MIT-LICENSE +20 -0
  302. data/spec/dummy_app/foo/README.rdoc +3 -0
  303. data/spec/dummy_app/foo/Rakefile +39 -0
  304. data/spec/dummy_app/foo/app/assets/javascripts/foo/application.js +9 -0
  305. data/spec/dummy_app/foo/app/assets/stylesheets/foo/application.css +7 -0
  306. data/spec/dummy_app/foo/app/controllers/foo/application_controller.rb +4 -0
  307. data/spec/dummy_app/foo/app/helpers/foo/application_helper.rb +4 -0
  308. data/spec/dummy_app/foo/app/models/foo/bar.rb +4 -0
  309. data/spec/dummy_app/foo/app/views/layouts/foo/application.html.erb +14 -0
  310. data/spec/dummy_app/foo/config/routes.rb +2 -0
  311. data/spec/dummy_app/foo/foo.gemspec +23 -0
  312. data/spec/dummy_app/foo/lib/foo.rb +4 -0
  313. data/spec/dummy_app/foo/lib/foo/engine.rb +5 -0
  314. data/spec/dummy_app/foo/lib/foo/version.rb +3 -0
  315. data/spec/dummy_app/foo/lib/tasks/foo_tasks.rake +4 -0
  316. data/spec/dummy_app/foo/script/rails +6 -0
  317. data/spec/dummy_app/foo/test/dummy/Rakefile +7 -0
  318. data/spec/dummy_app/foo/test/dummy/app/assets/javascripts/application.js +9 -0
  319. data/spec/dummy_app/foo/test/dummy/app/assets/stylesheets/application.css +7 -0
  320. data/spec/dummy_app/foo/test/dummy/app/controllers/application_controller.rb +3 -0
  321. data/spec/dummy_app/foo/test/dummy/app/helpers/application_helper.rb +2 -0
  322. data/spec/dummy_app/foo/test/dummy/app/views/layouts/application.html.erb +14 -0
  323. data/spec/dummy_app/foo/test/dummy/config.ru +4 -0
  324. data/spec/dummy_app/foo/test/dummy/config/application.rb +45 -0
  325. data/spec/dummy_app/foo/test/dummy/config/boot.rb +10 -0
  326. data/spec/dummy_app/foo/test/dummy/config/database.yml +25 -0
  327. data/spec/dummy_app/foo/test/dummy/config/environment.rb +5 -0
  328. data/spec/dummy_app/foo/test/dummy/config/environments/development.rb +30 -0
  329. data/spec/dummy_app/foo/test/dummy/config/environments/production.rb +60 -0
  330. data/spec/dummy_app/foo/test/dummy/config/environments/test.rb +39 -0
  331. data/spec/dummy_app/foo/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  332. data/spec/dummy_app/foo/test/dummy/config/initializers/inflections.rb +10 -0
  333. data/spec/dummy_app/foo/test/dummy/config/initializers/mime_types.rb +5 -0
  334. data/spec/dummy_app/foo/test/dummy/config/initializers/secret_token.rb +7 -0
  335. data/spec/dummy_app/foo/test/dummy/config/initializers/session_store.rb +8 -0
  336. data/spec/dummy_app/foo/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  337. data/spec/dummy_app/foo/test/dummy/config/locales/en.yml +5 -0
  338. data/spec/dummy_app/foo/test/dummy/config/routes.rb +4 -0
  339. data/spec/dummy_app/foo/test/dummy/db/schema.rb +21 -0
  340. data/spec/dummy_app/foo/test/dummy/public/404.html +26 -0
  341. data/spec/dummy_app/foo/test/dummy/public/422.html +26 -0
  342. data/spec/dummy_app/foo/test/dummy/public/500.html +26 -0
  343. data/spec/dummy_app/foo/test/dummy/public/favicon.ico +0 -0
  344. data/spec/dummy_app/foo/test/dummy/script/rails +6 -0
  345. data/spec/dummy_app/foo/test/fixtures/foo/bars.yml +11 -0
  346. data/spec/dummy_app/foo/test/foo_test.rb +7 -0
  347. data/spec/dummy_app/foo/test/integration/navigation_test.rb +10 -0
  348. data/spec/dummy_app/foo/test/test_helper.rb +10 -0
  349. data/spec/dummy_app/foo/test/unit/foo/bar_test.rb +9 -0
  350. data/spec/dummy_app/public/404.html +0 -0
  351. data/spec/dummy_app/public/favicon.ico +0 -0
  352. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  353. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  354. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  355. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  356. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  357. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  358. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  359. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  360. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  361. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  362. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  363. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  364. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  365. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  366. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  367. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  368. data/spec/dummy_app/script/rails +6 -0
  369. data/spec/factories.rb +66 -0
  370. data/spec/generator_helpers.rb +30 -0
  371. data/spec/generators/install_generator_spec.rb +85 -0
  372. data/spec/generators/uninstall_generator_spec.rb +35 -0
  373. data/spec/helpers/application_helper_spec.rb +212 -0
  374. data/spec/lib/abstract_object_spec.rb +119 -0
  375. data/spec/lib/custom_field.rb +7 -0
  376. data/spec/lib/rails_admin_spec.rb +301 -0
  377. data/spec/requests/actions.rb +161 -0
  378. data/spec/requests/authorization/cancan_spec.rb +350 -0
  379. data/spec/requests/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  380. data/spec/requests/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +57 -0
  381. data/spec/requests/basic/create/rails_admin_basic_create_spec.rb +143 -0
  382. data/spec/requests/basic/create/rails_admin_namespaced_model_create_spec.rb +39 -0
  383. data/spec/requests/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
  384. data/spec/requests/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  385. data/spec/requests/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  386. data/spec/requests/basic/export/rails_admin_basic_export_spec.rb +87 -0
  387. data/spec/requests/basic/list/rails_admin_basic_list_spec.rb +417 -0
  388. data/spec/requests/basic/new/rails_admin_basic_new_spec.rb +74 -0
  389. data/spec/requests/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  390. data/spec/requests/basic/show/rails_admin_basic_show_spec.rb +92 -0
  391. data/spec/requests/basic/update/rails_admin_basic_update_spec.rb +191 -0
  392. data/spec/requests/config/edit/rails_admin_config_edit_spec.rb +913 -0
  393. data/spec/requests/config/list/rails_admin_config_list_spec.rb +509 -0
  394. data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +107 -0
  395. data/spec/requests/config/rails_admin_config_spec.rb +227 -0
  396. data/spec/requests/config/show/rails_admin_config_show_spec.rb +282 -0
  397. data/spec/requests/history/rails_admin_history_spec.rb +66 -0
  398. data/spec/requests/rails_admin_spec.rb +146 -0
  399. data/spec/requests/relation_spec.rb +26 -0
  400. data/spec/spec_helper.rb +91 -0
  401. metadata +967 -0
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic New" do
4
+
5
+ subject { page }
6
+
7
+ describe "GET /admin/player/new" do
8
+ before(:each) do
9
+ visit new_path(:model_name => "player")
10
+ end
11
+
12
+ it "should show \"New Model\"" do
13
+ should have_content("New Player")
14
+ end
15
+
16
+ it "should show required fields as \"Required\"" do
17
+ should have_selector("div", :text => /Name\s*Required/)
18
+ should have_selector("div", :text => /Number\s*Required/)
19
+ end
20
+
21
+ it "should show non-required fields as \"Optional\"" do
22
+ should have_selector("#player_position_field .help-block", :text => "Optional")
23
+ should have_selector("#player_born_on_field .help-block", :text => "Optional")
24
+ should have_selector("#player_notes_field .help-block", :text => "Optional")
25
+ end
26
+
27
+ # https://github.com/sferik/rails_admin/issues/362
28
+ # test that no link uses the "wildcard route" with the main
29
+ # controller and new method
30
+ it "should not use the 'wildcard route'" do
31
+ should have_no_selector("a[href^='/rails_admin/main/new']")
32
+ end
33
+ end
34
+
35
+ describe "GET /admin/player/new with has-one/belongs_to/has_many association" do
36
+ before(:each) do
37
+ FactoryGirl.create :draft
38
+ visit new_path(:model_name => "player")
39
+ end
40
+
41
+ it "should show selects" do
42
+ should have_selector("select#player_draft_id")
43
+ should have_selector("select#player_team_id")
44
+ should have_selector("select#player_comment_ids")
45
+ end
46
+ end
47
+
48
+ describe "GET /admin/player/new with missing label" do
49
+ before(:each) do
50
+ FactoryGirl.create :team, :name => ""
51
+ visit new_path(:model_name => "player")
52
+ end
53
+ end
54
+
55
+ describe "GET /admin/player/new with parameters for pre-population" do
56
+ it "should populate form field when corresponding parameters are passed in" do
57
+ visit new_path(:model_name => 'player', :player => {:name => 'Sam'})
58
+ page.should have_css('input[value=Sam]')
59
+ end
60
+
61
+ it "should prepropulate belongs to relationships" do
62
+ @team = FactoryGirl.create :team, :name => "belongs_to association prepopulated"
63
+ visit new_path(:model_name => 'player', :associations => { :team => @team.id } )
64
+ page.should have_css("select#player_team_id option[selected='selected'][value='#{@team.id}']")
65
+ end
66
+
67
+ it "should prepropulate has_many relationships" do
68
+ @player = FactoryGirl.create :player, :name => "has_many association prepopulated"
69
+ visit new_path(:model_name => 'team', :associations => { :players => @player.id } )
70
+ page.should have_css("select#team_player_ids option[selected='selected'][value='#{@player.id}']")
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Namespaced Model New" do
4
+
5
+ subject { page }
6
+
7
+ describe "AbstractModel#to_param" do
8
+ it 'turns namespaces into prefixes with ~' do
9
+ RailsAdmin::AbstractModel.new("Cms::BasicPage").to_param.should == 'cms~basic_page'
10
+ end
11
+ end
12
+
13
+ describe "ApplicationController#to_model_name" do
14
+ it 'turns cms~basic_page into Cms::BasicPage' do
15
+ RailsAdmin::ApplicationController.new.to_model_name('cms~basic_page').should == 'Cms::BasicPage'
16
+ end
17
+ end
18
+
19
+ describe "GET /admin/cms_basic_page/new" do
20
+ before(:each) do
21
+ visit new_path(:model_name => "cms~basic_page")
22
+ end
23
+
24
+ it 'should have correct input field names' do
25
+ should have_selector("label[for=cms_basic_page_title]")
26
+ should have_selector("input#cms_basic_page_title[name='cms_basic_page[title]']")
27
+ should have_selector("label[for=cms_basic_page_content]")
28
+ should have_selector("textarea#cms_basic_page_content[name='cms_basic_page[content]']")
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Show" do
4
+ subject { page }
5
+
6
+ describe "show" do
7
+ before(:each) do
8
+
9
+ @player = FactoryGirl.create :player
10
+ visit show_path(:model_name => "player", :id => @player.id)
11
+ end
12
+
13
+ it "should have History, Edit, Delete" do
14
+ should have_selector("a", :text => "History")
15
+ should have_selector("a", :text => "Edit")
16
+ should have_selector("a", :text => "Delete")
17
+ end
18
+
19
+ it "should show 'Details'" do
20
+ should have_content("Details")
21
+ end
22
+
23
+ it "should show attributes" do
24
+ should have_content("Name")
25
+ should have_content(@player.name)
26
+ should have_content("Number")
27
+ should have_content(@player.number)
28
+ end
29
+ end
30
+
31
+ describe "GET /admin/players/123this-id-doesnt-exist" do
32
+ it "should raise NotFound" do
33
+ visit '/admin/players/123this-id-doesnt-exist'
34
+ page.driver.status_code.should eql(404)
35
+ end
36
+ end
37
+
38
+
39
+ describe "show with belongs_to association" do
40
+ before(:each) do
41
+ @player = FactoryGirl.create :player
42
+ @team = FactoryGirl.create :team
43
+ @player.update_attribute(:team, @team)
44
+ visit show_path(:model_name => "player", :id => @player.id)
45
+ end
46
+
47
+ it "should show associated objects" do
48
+ should have_css("a[href='/admin/team/#{@team.id}']")
49
+ end
50
+ end
51
+
52
+ describe "show with has-one association" do
53
+ before(:each) do
54
+ @player = FactoryGirl.create :player
55
+ @draft = FactoryGirl.create :draft, :player => @player
56
+ visit show_path(:model_name => "player", :id => @player.id)
57
+ end
58
+
59
+ it "should show associated objects" do
60
+ should have_css("a[href='/admin/draft/#{@draft.id}']")
61
+ end
62
+ end
63
+
64
+ describe "show with has-and-belongs-to-many association" do
65
+ before(:each) do
66
+ @player = FactoryGirl.create :player
67
+ @comment1 = FactoryGirl.create :comment, :commentable => @player
68
+ @comment2 = FactoryGirl.create :comment, :commentable => @player
69
+ @comment3 = FactoryGirl.create :comment, :commentable => FactoryGirl.create(:player)
70
+
71
+ visit show_path(:model_name => "player", :id => @player.id)
72
+ end
73
+
74
+ it "should show associated objects" do
75
+ should have_css("a[href='/admin/comment/#{@comment1.id}']")
76
+ should have_css("a[href='/admin/comment/#{@comment2.id}']")
77
+ should_not have_css("a[href='/admin/comment/#{@comment3.id}']")
78
+ end
79
+ end
80
+
81
+ describe "show for polymorphic objects" do
82
+ before(:each) do
83
+ @player = FactoryGirl.create :player
84
+ @comment = FactoryGirl.create :comment, :commentable => @player
85
+ visit show_path(:model_name => "comment", :id => @comment.id)
86
+ end
87
+
88
+ it "should show associated object" do
89
+ should have_css("a[href='/admin/player/#{@player.id}']")
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,191 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Update" do
4
+
5
+ subject { page }
6
+
7
+ describe "update with errors" do
8
+ before(:each) do
9
+ @player = FactoryGirl.create :player
10
+ visit edit_path(:model_name => "player", :id => @player.id)
11
+ end
12
+
13
+ it "should return to edit page" do
14
+ fill_in "player[name]", :with => ""
15
+ click_button "Save"
16
+ page.driver.status_code.should eql(406)
17
+ should have_selector "form", :action => "/admin/players/#{@player.id}"
18
+ end
19
+ end
20
+
21
+ describe "update and add another" do
22
+ before(:each) do
23
+ @player = FactoryGirl.create :player
24
+
25
+ visit edit_path(:model_name => "player", :id => @player.id)
26
+
27
+ fill_in "player[name]", :with => "Jackie Robinson"
28
+ fill_in "player[number]", :with => "42"
29
+ fill_in "player[position]", :with => "Second baseman"
30
+ click_button "Save"
31
+
32
+ @player = RailsAdmin::AbstractModel.new("Player").first
33
+ end
34
+
35
+ it "should update an object with correct attributes" do
36
+ @player.name.should eql("Jackie Robinson")
37
+ @player.number.should eql(42)
38
+ @player.position.should eql("Second baseman")
39
+ end
40
+ end
41
+
42
+ describe "update and edit" do
43
+ before(:each) do
44
+ @player = FactoryGirl.create :player
45
+
46
+ visit edit_path(:model_name => "player", :id => @player.id)
47
+
48
+ fill_in "player[name]", :with => "Jackie Robinson"
49
+ fill_in "player[number]", :with => "42"
50
+ fill_in "player[position]", :with => "Second baseman"
51
+ click_button "Save and edit"
52
+
53
+ @player.reload
54
+ end
55
+
56
+ it "should update an object with correct attributes" do
57
+ @player.name.should eql("Jackie Robinson")
58
+ @player.number.should eql(42)
59
+ @player.position.should eql("Second baseman")
60
+ end
61
+ end
62
+
63
+ describe "update with has-one association" do
64
+ before(:each) do
65
+ @player = FactoryGirl.create :player
66
+ @draft = FactoryGirl.create :draft
67
+ page.driver.put edit_path(:model_name => "player", :id => @player.id, :player => {:name => "Jackie Robinson", :draft_id => @draft.id, :number => 42, :position => "Second baseman"})
68
+ @player.reload
69
+ end
70
+
71
+ it "should update an object with correct attributes" do
72
+ @player.name.should eql("Jackie Robinson")
73
+ @player.number.should eql(42)
74
+ @player.position.should eql("Second baseman")
75
+ end
76
+
77
+ it "should update an object with correct associations" do
78
+ @draft.reload
79
+ @player.draft.should eql(@draft)
80
+ end
81
+ end
82
+
83
+ describe "update with has-many association" do
84
+ it "should be fillable and emptyable" do
85
+ RailsAdmin.config do |c|
86
+ c.audit_with :history
87
+ end
88
+
89
+ @league = FactoryGirl.create :league
90
+ @divisions = 3.times.map { Division.create!(:name => "div #{Time.now.to_f}", :league => League.create!(:name => "league #{Time.now.to_f}")) }
91
+
92
+ page.driver.put edit_path(:model_name => "league", :id => @league.id, :league => {:name => "National League", :division_ids => [@divisions[0].id] })
93
+
94
+ @league.reload
95
+ @league.name.should eql("National League")
96
+ @divisions[0].reload
97
+ @league.divisions.should include(@divisions[0])
98
+ @league.divisions.should_not include(@divisions[1])
99
+ @league.divisions.should_not include(@divisions[2])
100
+
101
+ RailsAdmin::History.where(:item => @league.id).collect(&:message).should include("Added Divisions ##{@divisions[0].id} associations, Changed name")
102
+
103
+ page.driver.put edit_path(:model_name => "league", :id => @league.id, :league => {:division_ids => [""]})
104
+
105
+ @league.reload
106
+ @league.divisions.should be_empty
107
+ RailsAdmin::History.where(:item => @league.id).collect(&:message).should include("Removed Divisions ##{@divisions[0].id} associations")
108
+ end
109
+ end
110
+
111
+ describe "update with missing object" do
112
+ before(:each) do
113
+ page.driver.put(edit_path(:model_name => "player", :id => 1), :params => {:player => {:name => "Jackie Robinson", :number => 42, :position => "Second baseman"}})
114
+ end
115
+
116
+ it "should raise NotFound" do
117
+ page.driver.status_code.should eql(404)
118
+ end
119
+ end
120
+
121
+ describe "update with invalid object" do
122
+ before(:each) do
123
+ @player = FactoryGirl.create :player
124
+
125
+ visit edit_path(:model_name => "player", :id => @player.id)
126
+
127
+ fill_in "player[name]", :with => "Jackie Robinson"
128
+ fill_in "player[number]", :with => "a"
129
+ fill_in "player[position]", :with => "Second baseman"
130
+ click_button "Save"
131
+
132
+ @player.reload
133
+ end
134
+
135
+ it "should show an error message" do
136
+ body.should have_content("Player failed to be updated")
137
+ end
138
+ end
139
+
140
+ describe "update with serialized objects" do
141
+ before(:each) do
142
+ @user = FactoryGirl.create :user
143
+
144
+ visit edit_path(:model_name => "user", :id => @user.id)
145
+
146
+ fill_in "user[roles]", :with => %{['admin', 'user']}
147
+ click_button "Save"
148
+
149
+ @user.reload
150
+ end
151
+
152
+ it "should save the serialized data" do
153
+ @user.roles.should eql(['admin','user'])
154
+ end
155
+ end
156
+
157
+ describe "update with overridden to_param" do
158
+ before(:each) do
159
+ @ball = FactoryGirl.create :ball
160
+
161
+ visit edit_path(:model_name => "ball", :id => @ball.id)
162
+
163
+ fill_in "ball[color]", :with => "gray"
164
+ click_button "Save and edit"
165
+
166
+ @ball.reload
167
+ end
168
+
169
+ it "should update an object with correct attributes" do
170
+ @ball.color.should eql("gray")
171
+ end
172
+ end
173
+
174
+ describe "update of STI subclass on superclass view" do
175
+ before(:each) do
176
+ @hardball = FactoryGirl.create :hardball
177
+
178
+ visit edit_path(:model_name => "ball", :id => @hardball.id)
179
+
180
+ fill_in "ball[color]", :with => "cyan"
181
+ click_button "Save and edit"
182
+
183
+ @hardball.reload
184
+ end
185
+
186
+ it "should update an object with correct attributes" do
187
+ @hardball.color.should eql("cyan")
188
+ end
189
+ end
190
+
191
+ end
@@ -0,0 +1,913 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "RailsAdmin Config DSL Edit Section" do
6
+
7
+ subject { page }
8
+
9
+ describe "attr_accessible" do
10
+
11
+
12
+ it "should be configurable in the controller scope" do
13
+
14
+ RailsAdmin.config do |config|
15
+ config.excluded_models = []
16
+ config.attr_accessible_role do
17
+ _current_user.attr_accessible_role # sould be :custom_role
18
+ end
19
+
20
+ config.model FieldTest do
21
+ edit do
22
+ field :string_field
23
+ field :restricted_field
24
+ field :protected_field
25
+ end
26
+ end
27
+ end
28
+
29
+ visit new_path(:model_name => "field_test")
30
+ fill_in "field_test[string_field]", :with => "No problem here"
31
+ fill_in "field_test[restricted_field]", :with => "I'm allowed to do that as :custom_role only"
32
+ should have_no_selector "field_test[protected_field]"
33
+ click_button "Save"
34
+ @field_test = FieldTest.first
35
+ @field_test.string_field.should == "No problem here"
36
+ @field_test.restricted_field.should == "I'm allowed to do that as :custom_role only"
37
+ end
38
+ end
39
+
40
+ describe "css hooks" do
41
+ it "should be present" do
42
+ visit new_path(:model_name => "team")
43
+ should have_selector("#team_division_id_field.field.belongs_to_association_type.division_field")
44
+ end
45
+ end
46
+
47
+ describe "field groupings" do
48
+
49
+ it "should be hideable" do
50
+ RailsAdmin.config Team do
51
+ edit do
52
+ group :default do
53
+ label "Hidden group"
54
+ hide
55
+ end
56
+ end
57
+ end
58
+ visit new_path(:model_name => "team")
59
+ # Should not have the group header
60
+ should have_no_selector("legend", :text => "Hidden Group")
61
+ # Should not have any of the group's fields either
62
+ should have_no_selector("select#team_division")
63
+ should have_no_selector("input#team_name")
64
+ should have_no_selector("input#team_logo_url")
65
+ should have_no_selector("input#team_manager")
66
+ should have_no_selector("input#team_ballpark")
67
+ should have_no_selector("input#team_mascot")
68
+ should have_no_selector("input#team_founded")
69
+ should have_no_selector("input#team_wins")
70
+ should have_no_selector("input#team_losses")
71
+ should have_no_selector("input#team_win_percentage")
72
+ should have_no_selector("input#team_revenue")
73
+ end
74
+
75
+ it "should hide association groupings" do
76
+ RailsAdmin.config Team do
77
+ edit do
78
+ group :players do
79
+ label "Players"
80
+ field :players
81
+ hide
82
+ end
83
+ end
84
+ end
85
+ visit new_path(:model_name => "team")
86
+ # Should not have the group header
87
+ should have_no_selector("legend", :text => "Players")
88
+ # Should not have any of the group's fields either
89
+ should have_no_selector("select#team_player_ids")
90
+ end
91
+
92
+ it "should be renameable" do
93
+ RailsAdmin.config Team do
94
+ edit do
95
+ group :default do
96
+ label "Renamed group"
97
+ end
98
+ end
99
+ end
100
+ visit new_path(:model_name => "team")
101
+ should have_selector("legend", :text => "Renamed group")
102
+ end
103
+
104
+ describe "help" do
105
+
106
+ it "should show help section if present" do
107
+ RailsAdmin.config Team do
108
+ edit do
109
+ group :default do
110
+ help "help paragraph to display"
111
+ end
112
+ end
113
+ end
114
+ visit new_path(:model_name => "team")
115
+ should have_selector('legend small', :text => "help paragraph to display")
116
+ end
117
+
118
+ it "should not show help if not present" do
119
+ RailsAdmin.config Team do
120
+ edit do
121
+ group :default do
122
+ label 'no help'
123
+ end
124
+ end
125
+ end
126
+ visit new_path(:model_name => "team")
127
+ should_not have_selector('legend small')
128
+ end
129
+
130
+ it "should be able to display multiple help if there are multiple sections" do
131
+ RailsAdmin.config Team do
132
+ edit do
133
+ group :default do
134
+ field :name
135
+ help 'help for default'
136
+ end
137
+ group :other_section do
138
+ label "Other Section"
139
+ field :division
140
+ help 'help for other section'
141
+ end
142
+ end
143
+ end
144
+ visit new_path(:model_name => "team")
145
+ should have_selector("legend small", :text => 'help for default')
146
+ should have_selector("legend small", :text => 'help for other section')
147
+ should have_selector("legend small", :count => 2)
148
+ end
149
+
150
+ it "should use the db column size for the maximum length" do
151
+ visit new_path(:model_name => "team")
152
+ find("#team_name_field .help-block").should have_content("Length up to 50.")
153
+ end
154
+
155
+ # FIXME validates_length_of are leaking in FactoryGirl WTF?
156
+
157
+ it "should use the :is setting from the validation" do
158
+ # class Team
159
+ # validates_length_of :name, :is => 3
160
+ # end
161
+ # visit new_path(:model_name => "team")
162
+ # find("#team_name_field .help-block").should have_content("Length of 3.")
163
+ # Team._validators[:name] = []
164
+ end
165
+
166
+ it "should use the :minimum setting from the validation" do
167
+ class Team
168
+ validates_length_of :name, :minimum => 1
169
+ end
170
+ visit new_path(:model_name => "team")
171
+ find("#team_name_field .help-block").should have_content("Length of 1-50.")
172
+ Team._validators[:name] = []
173
+ end
174
+
175
+ it "should use the :maximum setting from the validation" do
176
+ class Team
177
+ validates_length_of :name, :maximum => 49
178
+ end
179
+ visit new_path(:model_name => "team")
180
+ find("#team_name_field .help-block").should have_content("Length up to 49.")
181
+ Team._validators[:name] = []
182
+ end
183
+
184
+ it "should use the minimum of db column size or :maximum setting from the validation" do
185
+ class Team
186
+ validates_length_of :name, :maximum => 51
187
+ end
188
+ visit new_path(:model_name => "team")
189
+ find("#team_name_field .help-block").should have_content("Length up to 50.")
190
+ Team._validators[:name] = []
191
+ end
192
+
193
+ it "should use the :minimum and :maximum from the validation" do
194
+ class Team
195
+ validates_length_of :name, :minimum => 1, :maximum => 49
196
+ end
197
+ visit new_path(:model_name => "team")
198
+ find("#team_name_field .help-block").should have_content("Length of 1-49.")
199
+ Team._validators[:name] = []
200
+ end
201
+
202
+ it "should use the range from the validation" do
203
+ class Team
204
+ validates_length_of :name, :in => 1..49
205
+ end
206
+ visit new_path(:model_name => "team")
207
+ find("#team_name_field .help-block").should have_content("Length of 1-49.")
208
+ Team._validators[:name] = []
209
+ end
210
+
211
+ end
212
+
213
+ it "should have accessor for its fields" do
214
+ RailsAdmin.config Team do
215
+ edit do
216
+ group :default do
217
+ field :name
218
+ field :logo_url
219
+ end
220
+ group :belongs_to_associations do
221
+ label "Belong's to associations"
222
+ field :division
223
+ end
224
+ end
225
+ end
226
+ visit new_path(:model_name => "team")
227
+ should have_selector("legend", :text => "Basic info")
228
+ should have_selector("legend", :text => "Belong's to associations")
229
+ should have_selector("label", :text => "Name")
230
+ should have_selector("label", :text => "Logo url")
231
+ should have_selector("label", :text => "Division")
232
+ should have_selector(".field", :count => 3)
233
+ end
234
+
235
+ it "should have accessor for its fields by type" do
236
+ RailsAdmin.config Team do
237
+ edit do
238
+ group :default do
239
+ field :name
240
+ field :logo_url
241
+ end
242
+ group :other do
243
+ field :division_id
244
+ field :manager
245
+ field :ballpark
246
+ fields_of_type :string do
247
+ label { "#{label} (STRING)" }
248
+ end
249
+ end
250
+ end
251
+ end
252
+ visit new_path(:model_name => "team")
253
+ should have_selector("label", :text => "Name")
254
+ should have_selector("label", :text => "Logo url")
255
+ should have_selector("label", :text => "Division")
256
+ should have_selector("label", :text => "Manager (STRING)")
257
+ should have_selector("label", :text => "Ballpark (STRING)")
258
+ end
259
+ end
260
+
261
+ describe "items' fields" do
262
+
263
+ it "should show all by default" do
264
+ visit new_path(:model_name => "team")
265
+ should have_selector("select#team_division_id")
266
+ should have_selector("input#team_name")
267
+ should have_selector("input#team_logo_url")
268
+ should have_selector("input#team_manager")
269
+ should have_selector("input#team_ballpark")
270
+ should have_selector("input#team_mascot")
271
+ should have_selector("input#team_founded")
272
+ should have_selector("input#team_wins")
273
+ should have_selector("input#team_losses")
274
+ should have_selector("input#team_win_percentage")
275
+ should have_selector("input#team_revenue")
276
+ should have_selector("select#team_player_ids")
277
+ should have_selector("select#team_fan_ids")
278
+ end
279
+
280
+ it "should appear in order defined" do
281
+ RailsAdmin.config Team do
282
+ edit do
283
+ field :manager
284
+ field :division
285
+ field :name
286
+ end
287
+ end
288
+ visit new_path(:model_name => "team")
289
+ should have_selector(:xpath, "//*[contains(@class, 'field')][1]//*[@id='team_manager']")
290
+ should have_selector(:xpath, "//*[contains(@class, 'field')][2]//*[@id='team_division_id']")
291
+ should have_selector(:xpath, "//*[contains(@class, 'field')][3]//*[@id='team_name']")
292
+ end
293
+
294
+ it "should only show the defined fields if some fields are defined" do
295
+ RailsAdmin.config Team do
296
+ edit do
297
+ field :division
298
+ field :name
299
+ end
300
+ end
301
+ visit new_path(:model_name => "team")
302
+ should have_selector("label", :text => "Division")
303
+ should have_selector("label", :text => "Name")
304
+ should have_selector(".field", :count => 2)
305
+ end
306
+
307
+ it "should delegates the label option to the ActiveModel API and memoize I18n awarly" do
308
+ RailsAdmin.config Team do
309
+ edit do
310
+ field :manager
311
+ field :fans
312
+ end
313
+ end
314
+ visit new_path(:model_name => "team")
315
+ should have_selector("label", :text => "Team Manager")
316
+ should have_selector("label", :text => "Some Fans")
317
+ I18n.locale = :fr
318
+ visit new_path(:model_name => "team")
319
+ should have_selector("label", :text => "Manager de l'équipe")
320
+ should have_selector("label", :text => "Quelques fans")
321
+ I18n.locale = :en
322
+ end
323
+
324
+ it "should be renameable" do
325
+ RailsAdmin.config Team do
326
+ edit do
327
+ field :manager do
328
+ label "Renamed field"
329
+ end
330
+ field :division
331
+ field :name
332
+ end
333
+ end
334
+ visit new_path(:model_name => "team")
335
+ should have_selector("label", :text => "Renamed field")
336
+ should have_selector("label", :text => "Division")
337
+ should have_selector("label", :text => "Name")
338
+ end
339
+
340
+ it "should be renameable by type" do
341
+ RailsAdmin.config Team do
342
+ edit do
343
+ fields_of_type :string do
344
+ label { "#{label} (STRING)" }
345
+ end
346
+ end
347
+ end
348
+ visit new_path(:model_name => "team")
349
+ should have_selector("label", :text => "Division")
350
+ should have_selector("label", :text => "Name (STRING)")
351
+ should have_selector("label", :text => "Logo url (STRING)")
352
+ should have_selector("label", :text => "Manager (STRING)")
353
+ should have_selector("label", :text => "Ballpark (STRING)")
354
+ should have_selector("label", :text => "Mascot (STRING)")
355
+ should have_selector("label", :text => "Founded")
356
+ should have_selector("label", :text => "Wins")
357
+ should have_selector("label", :text => "Losses")
358
+ should have_selector("label", :text => "Win percentage")
359
+ should have_selector("label", :text => "Revenue")
360
+ should have_selector("label", :text => "Players")
361
+ should have_selector("label", :text => "Fans")
362
+ end
363
+
364
+ it "should be globally renameable by type" do
365
+ RailsAdmin::Config.models do
366
+ edit do
367
+ fields_of_type :string do
368
+ label { "#{label} (STRING)" }
369
+ end
370
+ end
371
+ end
372
+ visit new_path(:model_name => "team")
373
+ should have_selector("label", :text => "Division")
374
+ should have_selector("label", :text => "Name (STRING)")
375
+ should have_selector("label", :text => "Logo url (STRING)")
376
+ should have_selector("label", :text => "Manager (STRING)")
377
+ should have_selector("label", :text => "Ballpark (STRING)")
378
+ should have_selector("label", :text => "Mascot (STRING)")
379
+ should have_selector("label", :text => "Founded")
380
+ should have_selector("label", :text => "Wins")
381
+ should have_selector("label", :text => "Losses")
382
+ should have_selector("label", :text => "Win percentage")
383
+ should have_selector("label", :text => "Revenue")
384
+ should have_selector("label", :text => "Players")
385
+ should have_selector("label", :text => "Fans")
386
+ end
387
+
388
+ it "should be flaggable as read only and be configurable with formatted_value" do
389
+ RailsAdmin.config Team do
390
+ edit do
391
+ field :name do
392
+ read_only true
393
+ formatted_value do
394
+ "I'm outputed in the form"
395
+ end
396
+ end
397
+ end
398
+ end
399
+ visit new_path(:model_name => "team")
400
+ should have_content("I'm outputed in the form")
401
+ end
402
+
403
+ it "should be hideable" do
404
+ RailsAdmin.config Team do
405
+ edit do
406
+ field :manager do
407
+ hide
408
+ end
409
+ field :division
410
+ field :name
411
+ end
412
+ end
413
+ visit new_path(:model_name => "team")
414
+ should have_no_selector("#team_manager")
415
+ should have_selector("#team_division_id")
416
+ should have_selector("#team_name")
417
+ end
418
+
419
+ it "should be hideable by type" do
420
+ RailsAdmin.config Team do
421
+ edit do
422
+ fields_of_type :string do
423
+ hide
424
+ end
425
+ end
426
+ end
427
+ visit new_path(:model_name => "team")
428
+ should have_selector("label", :text => "Division")
429
+ should have_no_selector("label", :text => "Name")
430
+ should have_no_selector("label", :text => "Logo url")
431
+ should have_no_selector("label", :text => "Manager")
432
+ should have_no_selector("label", :text => "Ballpark")
433
+ should have_no_selector("label", :text => "Mascot")
434
+ should have_selector("label", :text => "Founded")
435
+ should have_selector("label", :text => "Wins")
436
+ should have_selector("label", :text => "Losses")
437
+ should have_selector("label", :text => "Win percentage")
438
+ should have_selector("label", :text => "Revenue")
439
+ should have_selector("label", :text => "Players")
440
+ should have_selector("label", :text => "Fans")
441
+ end
442
+
443
+ it "should be globally hideable by type" do
444
+ RailsAdmin::Config.models do
445
+ edit do
446
+ fields_of_type :string do
447
+ hide
448
+ end
449
+ end
450
+ end
451
+ visit new_path(:model_name => "team")
452
+ should have_selector("label", :text => "Division")
453
+ should have_no_selector("label", :text => "Name")
454
+ should have_no_selector("label", :text => "Logo url")
455
+ should have_no_selector("label", :text => "Manager")
456
+ should have_no_selector("label", :text => "Ballpark")
457
+ should have_no_selector("label", :text => "Mascot")
458
+ should have_selector("label", :text => "Founded")
459
+ should have_selector("label", :text => "Wins")
460
+ should have_selector("label", :text => "Losses")
461
+ should have_selector("label", :text => "Win percentage")
462
+ should have_selector("label", :text => "Revenue")
463
+ should have_selector("label", :text => "Players")
464
+ should have_selector("label", :text => "Fans")
465
+ end
466
+
467
+ it "should have option to customize the help text" do
468
+ RailsAdmin.config Team do
469
+ edit do
470
+ field :manager do
471
+ help "#{help} Additional help text for manager field."
472
+ end
473
+ field :division
474
+ field :name
475
+ end
476
+ end
477
+ visit new_path(:model_name => "team")
478
+ find("#team_manager_field .help-block").should have_content("Required. Length up to 100. Additional help text for manager field.")
479
+ find("#team_division_id_field .help-block").should have_content("Required")
480
+ find("#team_name_field .help-block").should have_content("Optional. Length up to 50.")
481
+ end
482
+
483
+ it "should have option to override required status" do
484
+ RailsAdmin.config Team do
485
+ edit do
486
+ field :manager do
487
+ optional true
488
+ end
489
+ field :division do
490
+ optional true
491
+ end
492
+ field :name do
493
+ required true
494
+ end
495
+ end
496
+ end
497
+ visit new_path(:model_name => "team")
498
+ find("#team_manager_field .help-block").should have_content("Optional. Length up to 100.")
499
+ find("#team_division_id_field .help-block").should have_content("Optional")
500
+ find("#team_name_field .help-block").should have_content("Required. Length up to 50.")
501
+ end
502
+ end
503
+
504
+ describe "input format of" do
505
+
506
+ before(:each) do
507
+ RailsAdmin::Config.excluded_models = [RelTest]
508
+ @time = ::Time.now.getutc
509
+ end
510
+
511
+ after(:each) do
512
+ Time.zone = 'UTC'
513
+ end
514
+
515
+ describe "a datetime field" do
516
+
517
+ it "should default to %B %d, %Y %H:%M" do
518
+ visit new_path(:model_name => "field_test")
519
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%B %d, %Y %H:%M")
520
+ click_button "Save"
521
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
522
+ @record.datetime_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
523
+ end
524
+
525
+ it "should have a simple customization option" do
526
+ RailsAdmin.config FieldTest do
527
+ edit do
528
+ field :datetime_field do
529
+ date_format :default
530
+ end
531
+ end
532
+ end
533
+ visit new_path(:model_name => "field_test")
534
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
535
+ click_button "Save"
536
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
537
+ @record.datetime_field.should eql(::DateTime.parse(@time.to_s))
538
+ end
539
+
540
+ it "should have a customization option" do
541
+ RailsAdmin.config FieldTest do
542
+ list do
543
+ field :datetime_field do
544
+ strftime_format "%Y-%m-%d %H:%M:%S"
545
+ end
546
+ end
547
+ end
548
+ visit new_path(:model_name => "field_test")
549
+ fill_in "field_test[datetime_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
550
+ click_button "Save"
551
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
552
+ @record.datetime_field.should eql(::DateTime.parse(@time.to_s))
553
+ end
554
+ end
555
+
556
+ describe "a timestamp field" do
557
+
558
+ it "should default to %B %d, %Y %H:%M" do
559
+ visit new_path(:model_name => "field_test")
560
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%B %d, %Y %H:%M")
561
+ click_button "Save"
562
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
563
+ @record.timestamp_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
564
+ end
565
+
566
+ it "should have a simple customization option" do
567
+ RailsAdmin.config FieldTest do
568
+ edit do
569
+ field :timestamp_field do
570
+ date_format :default
571
+ end
572
+ end
573
+ end
574
+ visit new_path(:model_name => "field_test")
575
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%a, %d %b %Y %H:%M:%S")
576
+ click_button "Save"
577
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
578
+ @record.timestamp_field.should eql(::DateTime.parse(@time.to_s))
579
+ end
580
+
581
+ it "should have a customization option" do
582
+ RailsAdmin.config FieldTest do
583
+ edit do
584
+ field :timestamp_field do
585
+ strftime_format "%Y-%m-%d %H:%M:%S"
586
+ end
587
+ end
588
+ end
589
+ visit new_path(:model_name => "field_test")
590
+ fill_in "field_test[timestamp_field]", :with => @time.strftime("%Y-%m-%d %H:%M:%S")
591
+ click_button "Save"
592
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
593
+ @record.timestamp_field.should eql(::DateTime.parse(@time.to_s))
594
+ end
595
+ end
596
+
597
+ describe " a field with 'format' as a name (Kernel function)" do
598
+
599
+ it "should be updatable without any error" do
600
+ RailsAdmin.config FieldTest do
601
+ edit do
602
+ field :format
603
+ end
604
+ end
605
+ visit new_path(:model_name => "field_test")
606
+ fill_in "field_test[format]", :with => "test for format"
607
+ click_button "Save"
608
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
609
+ @record.format.should eql("test for format")
610
+ end
611
+ end
612
+
613
+
614
+ describe "a time field" do
615
+
616
+ it "should default to %H:%M" do
617
+ visit new_path(:model_name => "field_test")
618
+ fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
619
+ click_button "Save"
620
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
621
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
622
+ end
623
+
624
+ it "should interpret time value as UTC when timezone is specified" do
625
+ Time.zone = 'Eastern Time (US & Canada)' # -05:00
626
+
627
+ visit new_path(:model_name => "field_test")
628
+ fill_in "field_test[time_field]", :with => @time.strftime("%H:%M")
629
+ click_button "Save"
630
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
631
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
632
+ end
633
+
634
+ it "should have a customization option" do
635
+ RailsAdmin.config FieldTest do
636
+ edit do
637
+ field :time_field do
638
+ strftime_format "%I:%M %p"
639
+ end
640
+ end
641
+ end
642
+ visit new_path(:model_name => "field_test")
643
+ fill_in "field_test[time_field]", :with => @time.strftime("%I:%M %p")
644
+ click_button "Save"
645
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
646
+ @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M"))
647
+ end
648
+ end
649
+
650
+ describe "a date field" do
651
+
652
+ it "should default to %B %d, %Y" do
653
+ visit new_path(:model_name => "field_test")
654
+ fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
655
+ click_button "Save"
656
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
657
+ @record.date_field.should eql(::Date.parse(@time.to_s))
658
+ end
659
+
660
+ it "should cover a timezone lag even if in UTC+n:00 timezone." do
661
+ Time.zone = 'Tokyo' # +09:00
662
+
663
+ visit new_path(:model_name => "field_test")
664
+ fill_in "field_test[date_field]", :with => @time.strftime("%B %d, %Y")
665
+ click_button "Save"
666
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
667
+ @record.date_field.should eql(::Date.parse(@time.to_s))
668
+ end
669
+
670
+ it "should have a simple customization option" do
671
+ RailsAdmin.config FieldTest do
672
+ edit do
673
+ field :date_field do
674
+ date_format :default
675
+ end
676
+ end
677
+ end
678
+ visit new_path(:model_name => "field_test")
679
+ fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
680
+ click_button "Save"
681
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
682
+ @record.date_field.should eql(::Date.parse(@time.to_s))
683
+ end
684
+
685
+ it "should have a customization option" do
686
+ RailsAdmin.config FieldTest do
687
+ edit do
688
+ field :date_field do
689
+ strftime_format "%Y-%m-%d"
690
+ end
691
+ end
692
+ end
693
+ visit new_path(:model_name => "field_test")
694
+ fill_in "field_test[date_field]", :with => @time.strftime("%Y-%m-%d")
695
+ click_button "Save"
696
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
697
+ @record.date_field.should eql(::Date.parse(@time.to_s))
698
+ end
699
+ end
700
+ end
701
+
702
+ describe 'bindings' do
703
+ it 'should be present at creation time' do
704
+ RailsAdmin.config do |config|
705
+ config.excluded_models = []
706
+ end
707
+ RailsAdmin.config Category do
708
+ field :parent_category do
709
+ visible do
710
+ !bindings[:object].new_record?
711
+ end
712
+ end
713
+ end
714
+
715
+ visit new_path(:model_name => 'category')
716
+ should have_no_css('#category_parent_category_id')
717
+ click_button 'Save'
718
+ visit edit_path(:model_name => 'category', :id => Category.first)
719
+ should have_css('#category_parent_category_id')
720
+ click_button 'Save'
721
+ should have_content('Category successfully updated')
722
+ end
723
+ end
724
+
725
+ describe 'nested form' do
726
+
727
+ it 'should work' do
728
+ RailsAdmin::Config.excluded_models = [RelTest]
729
+ visit new_path(:model_name => "field_test")
730
+ fill_in "field_test_comment_attributes_content", :with => 'nested comment content'
731
+ click_button "Save"
732
+ @record = RailsAdmin::AbstractModel.new("FieldTest").first
733
+ @record.comment.content.should == 'nested comment content'
734
+ @record.nested_field_tests = [NestedFieldTest.create!(:title => 'title 1'), NestedFieldTest.create!(:title => 'title 2')]
735
+ visit edit_path(:model_name => "field_test", :id => @record.id)
736
+ fill_in "field_test_nested_field_tests_attributes_0_title", :with => 'nested field test title 1 edited'
737
+ page.find('#field_test_comment_attributes__destroy').set('true')
738
+ page.find('#field_test_nested_field_tests_attributes_1__destroy').set('true')
739
+ click_button "Save"
740
+ @record.reload
741
+ @record.comment.should == nil
742
+ @record.nested_field_tests.length.should == 1
743
+ @record.nested_field_tests[0].title.should == 'nested field test title 1 edited'
744
+ end
745
+
746
+ it 'should set bindings[:object] to nested object' do
747
+ RailsAdmin::Config.excluded_models = [RelTest]
748
+ RailsAdmin.config(NestedFieldTest) do
749
+ nested do
750
+ field :title do
751
+ label do
752
+ bindings[:object].class.name
753
+ end
754
+ end
755
+ end
756
+ end
757
+ @record = FieldTest.create
758
+ @record.nested_field_tests << NestedFieldTest.create!(:title => 'title 1')
759
+ visit edit_path(:model_name => "field_test", :id => @record.id)
760
+ find('#field_test_nested_field_tests_attributes_0_title_field').should have_content('NestedFieldTest')
761
+ end
762
+
763
+ it 'should be desactivable' do
764
+ RailsAdmin::Config.excluded_models = [RelTest]
765
+
766
+ visit new_path(:model_name => "field_test")
767
+ should have_selector('.label.add_nested_fields')
768
+ RailsAdmin.config(FieldTest) do
769
+ configure :nested_field_tests do
770
+ nested_form false
771
+ end
772
+ end
773
+ visit new_path(:model_name => "field_test")
774
+ should have_no_selector('.label.add_nested_fields')
775
+ end
776
+ end
777
+
778
+
779
+ describe "fields which are nullable and have AR validations" do
780
+
781
+ it "should be required" do
782
+ # draft.notes is nullable and has no validation
783
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :notes}
784
+ field.properties[:nullable?].should be true
785
+ field.required?.should be false
786
+
787
+ # draft.date is nullable in the schema but has an AR
788
+ # validates_presence_of validation that makes it required
789
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :date}
790
+ field.properties[:nullable?].should be true
791
+ field.required?.should be true
792
+
793
+ # draft.round is nullable in the schema but has an AR
794
+ # validates_numericality_of validation that makes it required
795
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :round}
796
+ field.properties[:nullable?].should be true
797
+ field.required?.should be true
798
+
799
+ # team.revenue is nullable in the schema but has an AR
800
+ # validates_numericality_of validation that allows nil
801
+ field = RailsAdmin::config("Team").edit.fields.find{|f| f.name == :revenue}
802
+ field.properties[:nullable?].should be true
803
+ field.required?.should be false
804
+ end
805
+ end
806
+
807
+ describe "CKEditor Support" do
808
+
809
+ it "should start with CKEditor disabled" do
810
+ field = RailsAdmin::config("Draft").edit.fields.find{|f| f.name == :notes}
811
+ field.ckeditor.should be false
812
+ end
813
+
814
+ it "should add Javascript to enable CKEditor" do
815
+ RailsAdmin.config Draft do
816
+ edit do
817
+ field :notes do
818
+ ckeditor true
819
+ end
820
+ end
821
+ end
822
+ visit new_path(:model_name => "draft")
823
+ should have_selector("script", :text => /CKEDITOR\.replace.*?draft_notes/)
824
+ end
825
+ end
826
+
827
+ describe "Paperclip Support" do
828
+
829
+ it "should show a file upload field" do
830
+ RailsAdmin.config User do
831
+ edit do
832
+ field :avatar
833
+ end
834
+ end
835
+ visit new_path(:model_name => "user")
836
+ should have_selector("input#user_avatar")
837
+ end
838
+ end
839
+
840
+ describe "Enum field support" do
841
+ it "should auto-detect enumeration when object responds to '\#{method}_enum'" do
842
+ class Team
843
+ def color_enum
844
+ ["blue", "green", "red"]
845
+ end
846
+ end
847
+ RailsAdmin.config Team do
848
+ edit do
849
+ field :color
850
+ end
851
+ end
852
+ visit new_path(:model_name => "team")
853
+ should have_selector(".enum_type select")
854
+ should have_content("green")
855
+ Team.send(:remove_method, :color_enum) # Reset
856
+ end
857
+
858
+ it "should allow configuration of the enum method" do
859
+ class Team
860
+ def color_list
861
+ ["blue", "green", "red"]
862
+ end
863
+ end
864
+ RailsAdmin.config Team do
865
+ edit do
866
+ field :color, :enum do
867
+ enum_method :color_list
868
+ end
869
+ end
870
+ end
871
+ visit new_path(:model_name => "team")
872
+ should have_selector(".enum_type select")
873
+ should have_content("green")
874
+ Team.send(:remove_method, :color_list) # Reset
875
+ end
876
+
877
+ it "should allow direct listing of enumeration options and override enum method" do
878
+ class Team
879
+ def color_list
880
+ ["blue", "green", "red"]
881
+ end
882
+ end
883
+ RailsAdmin.config Team do
884
+ edit do
885
+ field :color, :enum do
886
+ enum_method :color_list
887
+ enum do
888
+ ["yellow", "black"]
889
+ end
890
+ end
891
+ end
892
+ end
893
+ visit new_path(:model_name => "team")
894
+ should have_selector(".enum_type select")
895
+ should have_no_content("green")
896
+ should have_content("yellow")
897
+ Team.send(:remove_method, :color_list) # Reset
898
+ end
899
+
900
+ end
901
+
902
+ describe "ColorPicker Support" do
903
+ it "should show input with class color" do
904
+ RailsAdmin.config Team do
905
+ edit do
906
+ field :color, :color
907
+ end
908
+ end
909
+ visit new_path(:model_name => "team")
910
+ should have_selector(".color_type input")
911
+ end
912
+ end
913
+ end