drewda_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 (372) hide show
  1. data/Gemfile +53 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +160 -0
  4. data/Rakefile +19 -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.colorpicker.js +484 -0
  49. data/app/assets/javascripts/rails_admin/jquery.pjax.js +431 -0
  50. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -0
  51. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
  52. data/app/assets/javascripts/rails_admin/ra.filter-box.js +129 -0
  53. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +280 -0
  54. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +181 -0
  55. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +40 -0
  56. data/app/assets/javascripts/rails_admin/ra.remote-form.js +150 -0
  57. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +25 -0
  58. data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
  59. data/app/assets/javascripts/rails_admin/ui.js.coffee +61 -0
  60. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  61. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  62. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  63. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  64. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  65. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  66. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
  67. data/app/assets/stylesheets/rails_admin/base/README +2 -0
  68. data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
  69. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +263 -0
  70. data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
  71. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
  72. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
  73. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
  74. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +76 -0
  75. data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +180 -0
  76. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +69 -0
  77. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
  78. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +85 -0
  79. data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
  80. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
  81. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
  82. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
  83. data/app/controllers/rails_admin/application_controller.rb +82 -0
  84. data/app/controllers/rails_admin/main_controller.rb +151 -0
  85. data/app/helpers/rails_admin/application_helper.rb +123 -0
  86. data/app/helpers/rails_admin/form_builder.rb +104 -0
  87. data/app/helpers/rails_admin/main_helper.rb +36 -0
  88. data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
  89. data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
  90. data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
  91. data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
  92. data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
  93. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
  94. data/app/views/layouts/rails_admin/application.html.haml +39 -0
  95. data/app/views/rails_admin/main/_dashboard_history.html.haml +10 -0
  96. data/app/views/rails_admin/main/_delete_notice.html.haml +18 -0
  97. data/app/views/rails_admin/main/_form_colorpicker.html.haml +24 -0
  98. data/app/views/rails_admin/main/_form_datetime.html.haml +4 -0
  99. data/app/views/rails_admin/main/_form_enumeration.html.haml +4 -0
  100. data/app/views/rails_admin/main/_form_field.html.haml +1 -0
  101. data/app/views/rails_admin/main/_form_file_upload.html.haml +18 -0
  102. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +59 -0
  103. data/app/views/rails_admin/main/_form_filtering_select.html.haml +47 -0
  104. data/app/views/rails_admin/main/_form_nested_many.html.haml +41 -0
  105. data/app/views/rails_admin/main/_form_nested_one.html.haml +35 -0
  106. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +34 -0
  107. data/app/views/rails_admin/main/_form_text.html.haml +9 -0
  108. data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
  109. data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
  110. data/app/views/rails_admin/main/dashboard.html.haml +31 -0
  111. data/app/views/rails_admin/main/delete.html.haml +18 -0
  112. data/app/views/rails_admin/main/edit.html.haml +2 -0
  113. data/app/views/rails_admin/main/export.html.haml +75 -0
  114. data/app/views/rails_admin/main/history.html.haml +42 -0
  115. data/app/views/rails_admin/main/index.html.haml +140 -0
  116. data/app/views/rails_admin/main/new.html.haml +2 -0
  117. data/app/views/rails_admin/main/show.html.haml +14 -0
  118. data/config/initializers/active_record_extensions.rb +19 -0
  119. data/config/initializers/devise_patch.rb +9 -0
  120. data/config/initializers/haml.rb +2 -0
  121. data/config/initializers/mongoid_extensions.rb +4 -0
  122. data/config/locales/fr.yml +24 -0
  123. data/config/locales/rails_admin.en.yml +130 -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 +34 -0
  132. data/lib/rails_admin/abstract_model.rb +110 -0
  133. data/lib/rails_admin/adapters/active_record.rb +247 -0
  134. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  135. data/lib/rails_admin/adapters/mongoid.rb +333 -0
  136. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +32 -0
  137. data/lib/rails_admin/adapters/mongoid/extension.rb +27 -0
  138. data/lib/rails_admin/config.rb +322 -0
  139. data/lib/rails_admin/config/actions.rb +121 -0
  140. data/lib/rails_admin/config/actions/base.rb +117 -0
  141. data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
  142. data/lib/rails_admin/config/actions/dashboard.rb +44 -0
  143. data/lib/rails_admin/config/actions/delete.rb +53 -0
  144. data/lib/rails_admin/config/actions/edit.rb +60 -0
  145. data/lib/rails_admin/config/actions/export.rb +40 -0
  146. data/lib/rails_admin/config/actions/history_index.rb +38 -0
  147. data/lib/rails_admin/config/actions/history_show.rb +38 -0
  148. data/lib/rails_admin/config/actions/index.rb +85 -0
  149. data/lib/rails_admin/config/actions/new.rb +64 -0
  150. data/lib/rails_admin/config/actions/show.rb +32 -0
  151. data/lib/rails_admin/config/actions/show_in_app.rb +28 -0
  152. data/lib/rails_admin/config/configurable.rb +92 -0
  153. data/lib/rails_admin/config/fields.rb +88 -0
  154. data/lib/rails_admin/config/fields/association.rb +108 -0
  155. data/lib/rails_admin/config/fields/base.rb +281 -0
  156. data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +29 -0
  157. data/lib/rails_admin/config/fields/factories/carrierwave.rb +31 -0
  158. data/lib/rails_admin/config/fields/factories/devise.rb +27 -0
  159. data/lib/rails_admin/config/fields/factories/dragonfly.rb +27 -0
  160. data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
  161. data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
  162. data/lib/rails_admin/config/fields/factories/password.rb +17 -0
  163. data/lib/rails_admin/config/fields/factories/serialized.rb +17 -0
  164. data/lib/rails_admin/config/fields/group.rb +78 -0
  165. data/lib/rails_admin/config/fields/types.rb +27 -0
  166. data/lib/rails_admin/config/fields/types/all.rb +26 -0
  167. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
  168. data/lib/rails_admin/config/fields/types/boolean.rb +31 -0
  169. data/lib/rails_admin/config/fields/types/bson_object_id.rb +42 -0
  170. data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
  171. data/lib/rails_admin/config/fields/types/color.rb +37 -0
  172. data/lib/rails_admin/config/fields/types/date.rb +24 -0
  173. data/lib/rails_admin/config/fields/types/datetime.rb +165 -0
  174. data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
  175. data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
  176. data/lib/rails_admin/config/fields/types/enum.rb +35 -0
  177. data/lib/rails_admin/config/fields/types/file_upload.rb +61 -0
  178. data/lib/rails_admin/config/fields/types/float.rb +14 -0
  179. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
  180. data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
  181. data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
  182. data/lib/rails_admin/config/fields/types/hidden.rb +21 -0
  183. data/lib/rails_admin/config/fields/types/integer.rb +22 -0
  184. data/lib/rails_admin/config/fields/types/mongoid_type.rb +25 -0
  185. data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
  186. data/lib/rails_admin/config/fields/types/password.rb +39 -0
  187. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +76 -0
  188. data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
  189. data/lib/rails_admin/config/fields/types/string.rb +41 -0
  190. data/lib/rails_admin/config/fields/types/text.rb +36 -0
  191. data/lib/rails_admin/config/fields/types/time.rb +36 -0
  192. data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
  193. data/lib/rails_admin/config/groupable.rb +18 -0
  194. data/lib/rails_admin/config/has_fields.rb +135 -0
  195. data/lib/rails_admin/config/has_groups.rb +23 -0
  196. data/lib/rails_admin/config/hideable.rb +28 -0
  197. data/lib/rails_admin/config/model.rb +88 -0
  198. data/lib/rails_admin/config/proxyable.rb +12 -0
  199. data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
  200. data/lib/rails_admin/config/sections.rb +38 -0
  201. data/lib/rails_admin/config/sections/base.rb +29 -0
  202. data/lib/rails_admin/config/sections/create.rb +11 -0
  203. data/lib/rails_admin/config/sections/edit.rb +11 -0
  204. data/lib/rails_admin/config/sections/export.rb +11 -0
  205. data/lib/rails_admin/config/sections/list.rb +27 -0
  206. data/lib/rails_admin/config/sections/nested.rb +10 -0
  207. data/lib/rails_admin/config/sections/show.rb +10 -0
  208. data/lib/rails_admin/config/sections/update.rb +10 -0
  209. data/lib/rails_admin/engine.rb +22 -0
  210. data/lib/rails_admin/extension.rb +29 -0
  211. data/lib/rails_admin/extensions/cancan.rb +5 -0
  212. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
  213. data/lib/rails_admin/extensions/history.rb +5 -0
  214. data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
  215. data/lib/rails_admin/extensions/history/history.rb +69 -0
  216. data/lib/rails_admin/extensions/paper_trail.rb +5 -0
  217. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +92 -0
  218. data/lib/rails_admin/i18n_support.rb +43 -0
  219. data/lib/rails_admin/support/core_extensions.rb +44 -0
  220. data/lib/rails_admin/support/csv_converter.rb +109 -0
  221. data/lib/rails_admin/version.rb +6 -0
  222. data/lib/tasks/prepare_ci_env.rake +27 -0
  223. data/lib/tasks/rails_admin.rake +18 -0
  224. data/spec/ci.sh +2 -0
  225. data/spec/controllers/application_controller_spec.rb +30 -0
  226. data/spec/controllers/main_controller_spec.rb +180 -0
  227. data/spec/database_helpers.rb +15 -0
  228. data/spec/dummy_app/Gemfile +58 -0
  229. data/spec/dummy_app/Rakefile +7 -0
  230. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  231. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  232. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  233. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  234. data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
  235. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  236. data/spec/dummy_app/app/locales/models.en.yml +16 -0
  237. data/spec/dummy_app/app/models/abstract.rb +5 -0
  238. data/spec/dummy_app/app/models/article.rb +9 -0
  239. data/spec/dummy_app/app/models/author.rb +6 -0
  240. data/spec/dummy_app/app/models/ball.rb +8 -0
  241. data/spec/dummy_app/app/models/category.rb +3 -0
  242. data/spec/dummy_app/app/models/cms.rb +5 -0
  243. data/spec/dummy_app/app/models/cms/basic_page.rb +7 -0
  244. data/spec/dummy_app/app/models/cms/unscoped_page.rb +3 -0
  245. data/spec/dummy_app/app/models/comment.rb +3 -0
  246. data/spec/dummy_app/app/models/division.rb +12 -0
  247. data/spec/dummy_app/app/models/draft.rb +11 -0
  248. data/spec/dummy_app/app/models/fan.rb +5 -0
  249. data/spec/dummy_app/app/models/field_test.rb +20 -0
  250. data/spec/dummy_app/app/models/hardball.rb +2 -0
  251. data/spec/dummy_app/app/models/league.rb +10 -0
  252. data/spec/dummy_app/app/models/mongoid_field_test.rb +22 -0
  253. data/spec/dummy_app/app/models/nested_field_test.rb +6 -0
  254. data/spec/dummy_app/app/models/player.rb +23 -0
  255. data/spec/dummy_app/app/models/rel_test.rb +6 -0
  256. data/spec/dummy_app/app/models/tag.rb +7 -0
  257. data/spec/dummy_app/app/models/team.rb +25 -0
  258. data/spec/dummy_app/app/models/user.rb +21 -0
  259. data/spec/dummy_app/app/uploaders/carrierwave_uploader.rb +53 -0
  260. data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
  261. data/spec/dummy_app/app/views/players/show.html.haml +1 -0
  262. data/spec/dummy_app/config.ru +4 -0
  263. data/spec/dummy_app/config/application.rb +62 -0
  264. data/spec/dummy_app/config/boot.rb +6 -0
  265. data/spec/dummy_app/config/database.yml +25 -0
  266. data/spec/dummy_app/config/environment.rb +5 -0
  267. data/spec/dummy_app/config/environments/development.rb +37 -0
  268. data/spec/dummy_app/config/environments/production.rb +67 -0
  269. data/spec/dummy_app/config/environments/test.rb +37 -0
  270. data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
  271. data/spec/dummy_app/config/initializers/devise.rb +148 -0
  272. data/spec/dummy_app/config/initializers/inflections.rb +15 -0
  273. data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
  274. data/spec/dummy_app/config/initializers/rails_admin.rb +11 -0
  275. data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
  276. data/spec/dummy_app/config/initializers/session_store.rb +8 -0
  277. data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
  278. data/spec/dummy_app/config/mongoid.yml +17 -0
  279. data/spec/dummy_app/config/routes.rb +10 -0
  280. data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
  281. data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
  282. data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
  283. data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
  284. data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
  285. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
  286. data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
  287. data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
  288. data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
  289. data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
  290. data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
  291. data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
  292. data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
  293. data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
  294. data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
  295. data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
  296. data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
  297. data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
  298. data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
  299. data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
  300. data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
  301. data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
  302. data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
  303. data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
  304. data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
  305. data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
  306. data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
  307. data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
  308. data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
  309. data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
  310. data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
  311. data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
  312. data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
  313. data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
  314. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
  315. data/spec/dummy_app/db/seeds.rb +18 -0
  316. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  317. data/spec/dummy_app/public/404.html +26 -0
  318. data/spec/dummy_app/public/422.html +26 -0
  319. data/spec/dummy_app/public/500.html +25 -0
  320. data/spec/dummy_app/public/favicon.ico +0 -0
  321. data/spec/dummy_app/public/robots.txt +5 -0
  322. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
  323. data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
  324. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
  325. data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
  326. data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
  327. data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
  328. data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
  329. data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
  330. data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
  331. data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
  332. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
  333. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
  334. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
  335. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
  336. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
  337. data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
  338. data/spec/dummy_app/script/rails +6 -0
  339. data/spec/factories.rb +89 -0
  340. data/spec/helpers/application_helper_spec.rb +277 -0
  341. data/spec/integration/authorization/cancan_spec.rb +349 -0
  342. data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
  343. data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +44 -0
  344. data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +154 -0
  345. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +23 -0
  346. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +27 -0
  347. data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +56 -0
  348. data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
  349. data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +87 -0
  350. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +392 -0
  351. data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +74 -0
  352. data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
  353. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +91 -0
  354. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +219 -0
  355. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +954 -0
  356. data/spec/integration/config/list/rails_admin_config_list_spec.rb +509 -0
  357. data/spec/integration/config/show/rails_admin_config_show_spec.rb +302 -0
  358. data/spec/integration/history/rails_admin_history_spec.rb +66 -0
  359. data/spec/integration/rails_admin_spec.rb +113 -0
  360. data/spec/integration/relation_spec.rb +26 -0
  361. data/spec/spec_helper.rb +86 -0
  362. data/spec/support/tableless.rb +27 -0
  363. data/spec/unit/adapters/active_record/abstract_object_spec.rb +131 -0
  364. data/spec/unit/adapters/active_record_spec.rb +373 -0
  365. data/spec/unit/adapters/mongoid/abstract_object_spec.rb +30 -0
  366. data/spec/unit/adapters/mongoid_spec.rb +581 -0
  367. data/spec/unit/config/actions_spec.rb +181 -0
  368. data/spec/unit/config/fields/base_spec.rb +300 -0
  369. data/spec/unit/config/model_spec.rb +75 -0
  370. data/spec/unit/config/sections_spec.rb +123 -0
  371. data/spec/unit/config_spec.rb +273 -0
  372. metadata +823 -0
@@ -0,0 +1,349 @@
1
+ require 'spec_helper'
2
+
3
+ class Ability
4
+ include CanCan::Ability
5
+ def initialize(user)
6
+ can :access, :rails_admin if user.roles.include? :admin
7
+ unless user.roles.include? :test_exception
8
+ can :dashboard
9
+ can :manage, Player if user.roles.include? :manage_player
10
+ can :read, Player, :retired => false if user.roles.include? :read_player
11
+ can :create, Player, :suspended => true if user.roles.include? :create_player
12
+ can :update, Player, :retired => false if user.roles.include? :update_player
13
+ can :destroy, Player, :retired => false if user.roles.include? :destroy_player
14
+ can :history, Player, :retired => false if user.roles.include? :history_player
15
+ can :show_in_app, Player, :retired => false if user.roles.include? :show_in_app_player
16
+ else
17
+ can :dashboard
18
+ can :access, :rails_admin
19
+ can :manage, :all
20
+ can :show_in_app, :all
21
+ cannot [:update, :destroy], Player, :retired => true
22
+ end
23
+ end
24
+ end
25
+
26
+ class AdminAbility
27
+ include CanCan::Ability
28
+ def initialize(user)
29
+ can :access, :rails_admin if user.roles.include? :admin
30
+ can :show_in_app, :all
31
+ can :manage, :all
32
+ end
33
+ end
34
+
35
+ describe "RailsAdmin CanCan Authorization" do
36
+
37
+ subject { page }
38
+
39
+ before(:each) do
40
+ RailsAdmin.config{|c| c.authorize_with(:cancan); c.audit_with(:history, User) }
41
+ @user = FactoryGirl.create :user
42
+ login_as @user
43
+ end
44
+
45
+ describe "with no roles" do
46
+ before(:each) do
47
+ @user.update_attribute(:roles, [])
48
+ end
49
+
50
+ it "GET /admin should raise CanCan::AccessDenied" do
51
+ visit dashboard_path
52
+ should have_content('CanCan::AccessDenied')
53
+ end
54
+
55
+ it "GET /admin/player should raise CanCan::AccessDenied" do
56
+ visit index_path(:model_name => "player")
57
+ should have_content('CanCan::AccessDenied')
58
+ end
59
+ end
60
+
61
+ describe "with read player role" do
62
+ before(:each) do
63
+ @user.update_attribute(:roles, [:admin, :read_player])
64
+ end
65
+
66
+ it "GET /admin should show Player but not League" do
67
+ visit dashboard_path
68
+ body.should have_content("Player")
69
+ body.should_not have_content("League")
70
+ body.should_not have_content("Add new")
71
+ end
72
+
73
+ it "GET /admin/player should render successfully but not list retired players and not show new, edit, or delete actions" do
74
+ @players = [
75
+ FactoryGirl.create(:player, :retired => false),
76
+ FactoryGirl.create(:player, :retired => true),
77
+ ]
78
+
79
+ visit index_path(:model_name => "player")
80
+
81
+ should have_content(@players[0].name)
82
+ should_not have_content(@players[1].name)
83
+ should_not have_content("Add new")
84
+ should have_css('.show_member_link')
85
+ should_not have_css('.edit_member_link')
86
+ should_not have_css('.delete_member_link')
87
+ should_not have_css('.history_show_member_link')
88
+ should_not have_css('.show_in_app_member_link')
89
+ end
90
+
91
+ it "GET /admin/team should raise CanCan::AccessDenied" do
92
+ visit index_path(:model_name => "team")
93
+ should have_content('CanCan::AccessDenied')
94
+ end
95
+
96
+ it "GET /admin/player/new should raise CanCan::AccessDenied" do
97
+ visit new_path(:model_name => "player")
98
+ should have_content('CanCan::AccessDenied')
99
+ end
100
+
101
+ end
102
+
103
+ describe "with create and read player role" do
104
+ before(:each) do
105
+ @user.update_attribute(:roles, [:admin, :read_player, :create_player])
106
+ end
107
+
108
+ it "GET /admin/player/new should render and create record upon submission" do
109
+ visit new_path(:model_name => "player")
110
+
111
+ should_not have_content("Save and edit")
112
+ should_not have_content("Delete")
113
+
114
+ should have_content("Save and add another")
115
+ fill_in "player[name]", :with => "Jackie Robinson"
116
+ fill_in "player[number]", :with => "42"
117
+ fill_in "player[position]", :with => "Second baseman"
118
+ click_button "Save"
119
+ should_not have_content("Edit")
120
+
121
+ @player = RailsAdmin::AbstractModel.new("Player").first
122
+ @player.name.should eql("Jackie Robinson")
123
+ @player.number.should eql(42)
124
+ @player.position.should eql("Second baseman")
125
+ @player.should be_suspended # suspended is inherited behavior based on permission
126
+ end
127
+
128
+ it "GET /admin/player/1/edit should raise access denied" do
129
+ @player = FactoryGirl.create :player
130
+ visit edit_path(:model_name => "player", :id => @player.id)
131
+ should have_content('CanCan::AccessDenied')
132
+ end
133
+
134
+ end
135
+
136
+ describe "with update and read player role" do
137
+ before(:each) do
138
+ @user.update_attribute(:roles, [:admin, :read_player, :update_player])
139
+ end
140
+
141
+ it "GET /admin/player/1/edit should render and update record upon submission" do
142
+ @player = FactoryGirl.create :player
143
+ visit edit_path(:model_name => "player", :id => @player.id)
144
+ should have_content("Save and edit")
145
+ should_not have_content("Save and add another")
146
+ should_not have_content("Add new")
147
+ should_not have_content("Delete")
148
+ should_not have_content("History")
149
+ should_not have_content("Show in app")
150
+ fill_in "player[name]", :with => "Jackie Robinson"
151
+ click_button "Save"
152
+ @player.reload
153
+ @player.name.should eql("Jackie Robinson")
154
+ end
155
+
156
+ it "GET /admin/player/1/edit with retired player should raise access denied" do
157
+ @player = FactoryGirl.create :player, :retired => true
158
+ visit edit_path(:model_name => "player", :id => @player.id)
159
+ should have_content('CanCan::AccessDenied')
160
+ end
161
+
162
+ it "GET /admin/player/1/delete should raise access denied" do
163
+ @player = FactoryGirl.create :player
164
+ visit delete_path(:model_name => "player", :id => @player.id)
165
+ should have_content('CanCan::AccessDenied')
166
+ end
167
+
168
+ end
169
+
170
+ describe "with history role" do
171
+ it 'shows links to history action' do
172
+
173
+ @user.update_attribute(:roles, [:admin, :read_player, :history_player])
174
+ @player = FactoryGirl.create :player
175
+
176
+ visit index_path(:model_name => "player")
177
+ should have_css('.show_member_link')
178
+ should_not have_css('.edit_member_link')
179
+ should_not have_css('.delete_member_link')
180
+ should have_css('.history_show_member_link')
181
+
182
+ visit show_path(:model_name => 'player', :id => @player.id)
183
+ should have_content("Show")
184
+ should_not have_content("Edit")
185
+ should_not have_content("Delete")
186
+ should have_content("History")
187
+
188
+ end
189
+ end
190
+
191
+ describe "with show in app role" do
192
+ it 'shows links to show in app action' do
193
+
194
+ @user.update_attribute(:roles, [:admin, :read_player, :show_in_app_player])
195
+ @player = FactoryGirl.create :player
196
+
197
+ visit index_path(:model_name => "player")
198
+ should have_css('.show_member_link')
199
+ should_not have_css('.edit_member_link')
200
+ should_not have_css('.delete_member_link')
201
+ should_not have_css('.history_show_member_link')
202
+ should have_css('.show_in_app_member_link')
203
+
204
+ visit show_path(:model_name => 'player', :id => @player.id)
205
+ should have_content("Show")
206
+ should_not have_content("Edit")
207
+ should_not have_content("Delete")
208
+ should_not have_content("History")
209
+ should have_content("Show in app")
210
+
211
+ end
212
+ end
213
+
214
+ describe "with all roles" do
215
+ it 'shows links to all actions' do
216
+
217
+ @user.update_attribute(:roles, [:admin, :manage_player])
218
+ @player = FactoryGirl.create :player
219
+
220
+ visit index_path(:model_name => "player")
221
+ should have_css('.show_member_link')
222
+ should have_css('.edit_member_link')
223
+ should have_css('.delete_member_link')
224
+ should have_css('.history_show_member_link')
225
+ should have_css('.show_in_app_member_link')
226
+
227
+ visit show_path(:model_name => 'player', :id => @player.id)
228
+ should have_content("Show")
229
+ should have_content("Edit")
230
+ should have_content("Delete")
231
+ should have_content("History")
232
+ should have_content("Show in app")
233
+
234
+ end
235
+ end
236
+
237
+ describe "with destroy and read player role" do
238
+ before(:each) do
239
+ @user.update_attribute(:roles, [:admin, :read_player, :destroy_player])
240
+ end
241
+
242
+ it "GET /admin/player/1/delete should render and destroy record upon submission" do
243
+ @player = FactoryGirl.create :player
244
+ player_id = @player.id
245
+ visit delete_path(:model_name => "player", :id => player_id)
246
+
247
+ click_button "Yes, I'm sure"
248
+
249
+ Player.exists?(player_id).should be_false
250
+ end
251
+
252
+ it "GET /admin/player/1/delete with retired player should raise access denied" do
253
+ @player = FactoryGirl.create :player, :retired => true
254
+ visit delete_path(:model_name => "player", :id => @player.id)
255
+ should have_content('CanCan::AccessDenied')
256
+ end
257
+
258
+ it "GET /admin/player/bulk_delete should render records which are authorized to" do
259
+ active_player = FactoryGirl.create :player, :retired => false
260
+ retired_player = FactoryGirl.create :player, :retired => true
261
+
262
+ page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id)))
263
+
264
+ should have_content(active_player.name)
265
+ should_not have_content(retired_player.name)
266
+ end
267
+
268
+ it "POST /admin/player/bulk_destroy should destroy records which are authorized to" do
269
+ active_player = FactoryGirl.create :player, :retired => false
270
+ retired_player = FactoryGirl.create :player, :retired => true
271
+
272
+ page.driver.delete(bulk_delete_path(:model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id)))
273
+ Player.exists?(active_player.id).should be_false
274
+ Player.exists?(retired_player.id).should be_true
275
+ end
276
+ end
277
+
278
+ describe "with exception role" do
279
+ it "GET /admin/player/bulk_delete should render records which are authorized to" do
280
+ @user.update_attribute(:roles, [:admin, :test_exception])
281
+ active_player = FactoryGirl.create :player, :retired => false
282
+ retired_player = FactoryGirl.create :player, :retired => true
283
+
284
+ page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id)))
285
+
286
+ should have_content(active_player.name)
287
+ should_not have_content(retired_player.name)
288
+ end
289
+
290
+ it "POST /admin/player/bulk_destroy should destroy records which are authorized to" do
291
+ @user.update_attribute(:roles, [:admin, :test_exception])
292
+ active_player = FactoryGirl.create :player, :retired => false
293
+ retired_player = FactoryGirl.create :player, :retired => true
294
+
295
+ page.driver.delete(bulk_delete_path(:model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id)))
296
+ Player.exists?(active_player.id).should be_false
297
+ Player.exists?(retired_player.id).should be_true
298
+ end
299
+ end
300
+
301
+ describe "with a custom admin ability" do
302
+ before(:each) do
303
+ RailsAdmin.config{|c| c.authorize_with :cancan, AdminAbility }
304
+ @user = FactoryGirl.create :user
305
+ login_as @user
306
+ end
307
+
308
+ describe "with admin role only" do
309
+ before(:each) do
310
+ @user.update_attribute(:roles, [:admin])
311
+ end
312
+
313
+ it "GET /admin/team should render successfully" do
314
+ visit index_path(:model_name => "team")
315
+ page.status_code.should == 200
316
+ end
317
+
318
+ it "GET /admin/player/new should render successfully" do
319
+ visit new_path(:model_name => "player")
320
+ page.status_code.should == 200
321
+ end
322
+
323
+ it "GET /admin/player/1/edit should render successfully" do
324
+ @player = FactoryGirl.create :player
325
+ visit edit_path(:model_name => "player", :id => @player.id)
326
+ page.status_code.should == 200
327
+ end
328
+
329
+ it "GET /admin/player/1/edit with retired player should render successfully" do
330
+ @player = FactoryGirl.create :player, :retired => true
331
+ visit edit_path(:model_name => "player", :id => @player.id)
332
+ page.status_code.should == 200
333
+ end
334
+
335
+ it "GET /admin/player/1/delete should render successfully" do
336
+ @player = FactoryGirl.create :player
337
+ visit delete_path(:model_name => "player", :id => @player.id)
338
+ page.status_code.should == 200
339
+ end
340
+
341
+ it "GET /admin/player/1/delete with retired player should render successfully" do
342
+ @player = FactoryGirl.create :player, :retired => true
343
+ visit delete_path(:model_name => "player", :id => @player.id)
344
+ page.status_code.should == 200
345
+ end
346
+ end
347
+ end
348
+
349
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Bulk Action" do
4
+
5
+ subject { page }
6
+
7
+ before(:each) do
8
+ @players = 2.times.map { FactoryGirl.create :player }
9
+ end
10
+
11
+ describe "bulk_delete" do
12
+ it 'should show names of to-be-deleted players' do
13
+ page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @players.map(&:id)))
14
+ @players.each { |player| should have_content(player.name) }
15
+ end
16
+ end
17
+
18
+ describe "bulk_export" do
19
+ it 'should show form for export' do
20
+ visit index_path(:model_name => "player")
21
+ click_link "Export found Players"
22
+ @players.each { |player| should have_content("Select fields to export") }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ require 'rails_admin/extensions/history/history'
3
+
4
+ describe "RailsAdmin Basic Bulk Destroy" do
5
+ subject { page }
6
+
7
+ describe "successful bulk delete of records" do
8
+ before do
9
+ RailsAdmin::History.destroy_all
10
+ RailsAdmin.config { |c| c.audit_with :history }
11
+ @players = 3.times.map { FactoryGirl.create(:player) }
12
+ @delete_ids = @players[0..1].map(&:id)
13
+ page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @delete_ids))
14
+
15
+ click_button "Yes, I'm sure"
16
+ end
17
+
18
+ it "should not contain deleted records" do
19
+ RailsAdmin::AbstractModel.new("Player").count.should == 1
20
+ RailsAdmin::History.count.should == @delete_ids.count
21
+ RailsAdmin::History.all.each do |history|
22
+ history.table.should == "Player"
23
+ end
24
+ RailsAdmin::History.all.each do |history|
25
+ @delete_ids.should include(history.item)
26
+ end
27
+ page.should have_selector(".alert-success", :text => "2 Players successfully deleted")
28
+ end
29
+ end
30
+
31
+ describe "cancelled bulk_deletion" do
32
+ before do
33
+ RailsAdmin::History.destroy_all
34
+ @players = 3.times.map { FactoryGirl.create(:player) }
35
+ @delete_ids = @players[0..1].map(&:id)
36
+ page.driver.post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @delete_ids))
37
+ click_button "Cancel"
38
+ end
39
+
40
+ it "should not delete records" do
41
+ RailsAdmin::AbstractModel.new("Player").count.should == 3
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,154 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Basic Create" do
4
+ subject { page }
5
+
6
+ describe "create" do
7
+ before(:each) do
8
+ visit new_path(:model_name => "player")
9
+ fill_in "player[name]", :with => "Jackie Robinson"
10
+ fill_in "player[number]", :with => "42"
11
+ fill_in "player[position]", :with => "Second baseman"
12
+ click_button "Save"
13
+ @player = RailsAdmin::AbstractModel.new("Player").first
14
+ end
15
+
16
+ it "should create an object with correct attributes" do
17
+ @player.name.should eql("Jackie Robinson")
18
+ @player.number.should eql(42)
19
+ @player.position.should eql("Second baseman")
20
+ end
21
+ end
22
+
23
+ describe "create and edit" do
24
+ before(:each) do
25
+ visit new_path(:model_name => "player")
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 and edit"
31
+
32
+ @player = RailsAdmin::AbstractModel.new("Player").first
33
+ end
34
+
35
+ it "should create 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 "create and add another" do
43
+ before(:each) do
44
+ visit new_path(:model_name => "player")
45
+
46
+ fill_in "player[name]", :with => "Jackie Robinson"
47
+ fill_in "player[number]", :with => "42"
48
+ fill_in "player[position]", :with => "Second baseman"
49
+ click_button "Save and add another"
50
+
51
+ @player = RailsAdmin::AbstractModel.new("Player").first
52
+ end
53
+
54
+ it "should create an object with correct attributes" do
55
+ @player.name.should eql("Jackie Robinson")
56
+ @player.number.should eql(42)
57
+ @player.position.should eql("Second baseman")
58
+ end
59
+ end
60
+
61
+ describe "create with has-one association" do
62
+ before(:each) do
63
+ @draft = FactoryGirl.create :draft
64
+
65
+ page.driver.post new_path(:model_name => "player", :player => {:name => "Jackie Robinson", :number => 42, :position => 'Second baseman', :draft_id => @draft.id})
66
+
67
+ @player = RailsAdmin::AbstractModel.new("Player").all.last # first is created by FactoryGirl
68
+ end
69
+
70
+ it "should create an object with correct associations" do
71
+ @draft.reload
72
+ @player.draft.should eql(@draft)
73
+ end
74
+ end
75
+
76
+ describe "create with has-many association" do
77
+ before(:each) do
78
+ @divisions = 3.times.map { Division.create!(:name => "div #{Time.now.to_f}", :league => League.create!(:name => "league #{Time.now.to_f}")) }
79
+ page.driver.post new_path(:model_name => "league", :league => {:name => "National League", :division_ids =>[@divisions[0].id]})
80
+ @league = RailsAdmin::AbstractModel.new("League").all.last
81
+ end
82
+
83
+ it "should create an object with correct associations" do
84
+ @divisions[0].reload
85
+ @league.divisions.should include(@divisions[0])
86
+ @league.divisions.should_not include(@divisions[1])
87
+ @league.divisions.should_not include(@divisions[2])
88
+ end
89
+ end
90
+
91
+ describe "create with has-and-belongs-to-many association" do
92
+ before(:each) do
93
+ @teams = 3.times.map { FactoryGirl.create :team }
94
+ page.driver.post new_path(:model_name => "fan", :fan => {:name => "John Doe", :team_ids => [@teams[0].id] })
95
+ @fan = RailsAdmin::AbstractModel.new("Fan").first
96
+ end
97
+
98
+ it "should create an object with correct associations" do
99
+ @teams[0].reload
100
+ @fan.teams.should include(@teams[0])
101
+ @fan.teams.should_not include(@teams[1])
102
+ @fan.teams.should_not include(@teams[2])
103
+ end
104
+ end
105
+
106
+ describe "create with uniqueness constraint violated", :given => "a player exists" do
107
+ before(:each) do
108
+ @team = FactoryGirl.create :team
109
+ @player = FactoryGirl.create :player, :team => @team
110
+
111
+ page.driver.post new_path(:model_name => "player", :player => {:name => @player.name, :number => @player.number.to_s, :position => @player.position, :team_id => @team.id})
112
+ end
113
+
114
+ it "should show an error message" do
115
+ should have_content("There is already a player with that number on this team")
116
+ end
117
+ end
118
+
119
+ describe "create with invalid object" do
120
+ before(:each) do
121
+ page.driver.post(new_path(:model_name => "player", :id => 1), :params => {:player => {}})
122
+ end
123
+
124
+ it "should show an error message" do
125
+ should have_content("Player failed to be created")
126
+ should have_selector "form", :action => "/admin/players"
127
+ end
128
+ end
129
+
130
+ describe "create with object with errors on base" do
131
+ before(:each) do
132
+ visit new_path(:model_name => "player")
133
+ fill_in "player[name]", :with => "Jackie Robinson on steroids"
134
+ click_button "Save and add another"
135
+ end
136
+
137
+ it "should show error base error message in flash" do
138
+ should have_content("Player failed to be created. Player is cheating")
139
+ end
140
+ end
141
+
142
+ describe "creation of Mongoid habtm model object" do
143
+ before(:each) do
144
+ visit new_path(:model_name => "tag")
145
+ fill_in "tag[name]", :with => "Funny"
146
+ click_button "Save"
147
+ @tag = RailsAdmin::AbstractModel.new("Tag").first
148
+ end
149
+
150
+ it "should create an object with correct attributes" do
151
+ @tag.name.should eql("Funny")
152
+ end
153
+ end
154
+ end