rails_admin-lbgraham 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +51 -0
- data/LICENSE.md +20 -0
- data/README.md +175 -0
- data/Rakefile +19 -0
- data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
- data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/rails_admin/bullet_black.png +0 -0
- data/app/assets/images/rails_admin/bullet_white.png +0 -0
- data/app/assets/images/rails_admin/calendar.png +0 -0
- data/app/assets/images/rails_admin/clock.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/select.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/select2.png +0 -0
- data/app/assets/images/rails_admin/colorpicker/slider.png +0 -0
- data/app/assets/images/rails_admin/logo.png +0 -0
- data/app/assets/images/rails_admin/magnifier.png +0 -0
- data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
- data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
- data/app/assets/javascripts/rails_admin/custom/ui.js +12 -0
- data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -0
- data/app/assets/javascripts/rails_admin/jquery.pjax.js +743 -0
- data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -0
- data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +67 -0
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +142 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +292 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +190 -0
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +41 -0
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +151 -0
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +210 -0
- data/app/assets/javascripts/rails_admin/rails_admin.js.erb +28 -0
- data/app/assets/javascripts/rails_admin/themes/cerulean/ui.js +0 -0
- data/app/assets/javascripts/rails_admin/themes/default/ui.js +12 -0
- data/app/assets/javascripts/rails_admin/ui.js.coffee +66 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +733 -0
- data/app/assets/stylesheets/rails_admin/base/README.txt +2 -0
- data/app/assets/stylesheets/rails_admin/base/mixins.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/base/theming.css.scss +270 -0
- data/app/assets/stylesheets/rails_admin/base/variables.css.scss +1 -0
- data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +12 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +13 -0
- data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +15 -0
- data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +82 -0
- data/app/assets/stylesheets/rails_admin/jquery.colorpicker.css.scss +182 -0
- data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +69 -0
- data/app/assets/stylesheets/rails_admin/ra.calendar-additions.css.scss +25 -0
- data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +90 -0
- data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -0
- data/app/assets/stylesheets/rails_admin/rails_admin.css +4 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/mixins.css.scss +0 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/theming.css.scss +97 -0
- data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.css.scss +168 -0
- data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +8 -0
- data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +11 -0
- data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +12 -0
- data/app/controllers/rails_admin/application_controller.rb +84 -0
- data/app/controllers/rails_admin/main_controller.rb +153 -0
- data/app/helpers/rails_admin/application_helper.rb +147 -0
- data/app/helpers/rails_admin/form_builder.rb +117 -0
- data/app/helpers/rails_admin/main_helper.rb +36 -0
- data/app/views/kaminari/twitter-bootstrap/_gap.html.haml +2 -0
- data/app/views/kaminari/twitter-bootstrap/_next_page.html.haml +4 -0
- data/app/views/kaminari/twitter-bootstrap/_page.html.haml +4 -0
- data/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +10 -0
- data/app/views/kaminari/twitter-bootstrap/_prev_page.html.haml +4 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -0
- data/app/views/layouts/rails_admin/application.html.haml +27 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +16 -0
- data/app/views/rails_admin/main/_dashboard_history.html.haml +20 -0
- data/app/views/rails_admin/main/_delete_notice.html.haml +19 -0
- data/app/views/rails_admin/main/_form_colorpicker.html.haml +1 -0
- data/app/views/rails_admin/main/_form_datetime.html.haml +1 -0
- data/app/views/rails_admin/main/_form_enumeration.html.haml +18 -0
- data/app/views/rails_admin/main/_form_field.html.haml +1 -0
- data/app/views/rails_admin/main/_form_file_upload.html.haml +13 -0
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +47 -0
- data/app/views/rails_admin/main/_form_filtering_select.html.haml +37 -0
- data/app/views/rails_admin/main/_form_nested_many.html.haml +14 -0
- data/app/views/rails_admin/main/_form_nested_one.html.haml +10 -0
- data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +10 -0
- data/app/views/rails_admin/main/_form_text.html.haml +31 -0
- data/app/views/rails_admin/main/_submit_buttons.html.haml +15 -0
- data/app/views/rails_admin/main/bulk_delete.html.haml +11 -0
- data/app/views/rails_admin/main/dashboard.html.haml +35 -0
- data/app/views/rails_admin/main/delete.html.haml +18 -0
- data/app/views/rails_admin/main/edit.html.haml +2 -0
- data/app/views/rails_admin/main/export.html.haml +75 -0
- data/app/views/rails_admin/main/history.html.haml +49 -0
- data/app/views/rails_admin/main/index.html.haml +140 -0
- data/app/views/rails_admin/main/new.html.haml +2 -0
- data/app/views/rails_admin/main/show.html.haml +16 -0
- data/config/initializers/active_record_extensions.rb +19 -0
- data/config/initializers/devise_patch.rb +9 -0
- data/config/initializers/haml.rb +2 -0
- data/config/initializers/mongoid_extensions.rb +4 -0
- data/config/locales/rails_admin.en.yml +130 -0
- data/config/routes.rb +12 -0
- data/lib/generators/rails_admin/install_generator.rb +85 -0
- data/lib/generators/rails_admin/templates/drop.rb +18 -0
- data/lib/generators/rails_admin/templates/initializer.erb +100 -0
- data/lib/generators/rails_admin/templates/migration.rb +18 -0
- data/lib/generators/rails_admin/uninstall_generator.rb +22 -0
- data/lib/generators/rails_admin/utils.rb +30 -0
- data/lib/rails_admin.rb +34 -0
- data/lib/rails_admin/abstract_model.rb +128 -0
- data/lib/rails_admin/adapters/active_record.rb +296 -0
- data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
- data/lib/rails_admin/adapters/mongoid.rb +430 -0
- data/lib/rails_admin/adapters/mongoid/abstract_object.rb +43 -0
- data/lib/rails_admin/adapters/mongoid/extension.rb +45 -0
- data/lib/rails_admin/config.rb +333 -0
- data/lib/rails_admin/config/actions.rb +121 -0
- data/lib/rails_admin/config/actions/base.rb +132 -0
- data/lib/rails_admin/config/actions/bulk_delete.rb +55 -0
- data/lib/rails_admin/config/actions/dashboard.rb +52 -0
- data/lib/rails_admin/config/actions/delete.rb +56 -0
- data/lib/rails_admin/config/actions/edit.rb +55 -0
- data/lib/rails_admin/config/actions/export.rb +40 -0
- data/lib/rails_admin/config/actions/history_index.rb +38 -0
- data/lib/rails_admin/config/actions/history_show.rb +38 -0
- data/lib/rails_admin/config/actions/index.rb +85 -0
- data/lib/rails_admin/config/actions/new.rb +65 -0
- data/lib/rails_admin/config/actions/show.rb +34 -0
- data/lib/rails_admin/config/actions/show_in_app.rb +27 -0
- data/lib/rails_admin/config/configurable.rb +92 -0
- data/lib/rails_admin/config/fields.rb +87 -0
- data/lib/rails_admin/config/fields/association.rb +107 -0
- data/lib/rails_admin/config/fields/base.rb +320 -0
- data/lib/rails_admin/config/fields/factories/association.rb +32 -0
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +31 -0
- data/lib/rails_admin/config/fields/factories/devise.rb +27 -0
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +27 -0
- data/lib/rails_admin/config/fields/factories/enum.rb +11 -0
- data/lib/rails_admin/config/fields/factories/paperclip.rb +26 -0
- data/lib/rails_admin/config/fields/factories/password.rb +17 -0
- data/lib/rails_admin/config/fields/group.rb +78 -0
- data/lib/rails_admin/config/fields/types.rb +27 -0
- data/lib/rails_admin/config/fields/types/all.rb +25 -0
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +41 -0
- data/lib/rails_admin/config/fields/types/boolean.rb +38 -0
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +45 -0
- data/lib/rails_admin/config/fields/types/carrierwave.rb +31 -0
- data/lib/rails_admin/config/fields/types/color.rb +37 -0
- data/lib/rails_admin/config/fields/types/date.rb +24 -0
- data/lib/rails_admin/config/fields/types/datetime.rb +164 -0
- data/lib/rails_admin/config/fields/types/decimal.rb +14 -0
- data/lib/rails_admin/config/fields/types/dragonfly.rb +41 -0
- data/lib/rails_admin/config/fields/types/enum.rb +39 -0
- data/lib/rails_admin/config/fields/types/file_upload.rb +65 -0
- data/lib/rails_admin/config/fields/types/float.rb +14 -0
- data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +14 -0
- data/lib/rails_admin/config/fields/types/has_many_association.rb +32 -0
- data/lib/rails_admin/config/fields/types/has_one_association.rb +39 -0
- data/lib/rails_admin/config/fields/types/hidden.rb +27 -0
- data/lib/rails_admin/config/fields/types/integer.rb +22 -0
- data/lib/rails_admin/config/fields/types/paperclip.rb +28 -0
- data/lib/rails_admin/config/fields/types/password.rb +39 -0
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +80 -0
- data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
- data/lib/rails_admin/config/fields/types/string.rb +43 -0
- data/lib/rails_admin/config/fields/types/text.rb +97 -0
- data/lib/rails_admin/config/fields/types/time.rb +36 -0
- data/lib/rails_admin/config/fields/types/timestamp.rb +18 -0
- data/lib/rails_admin/config/groupable.rb +18 -0
- data/lib/rails_admin/config/has_fields.rb +136 -0
- data/lib/rails_admin/config/has_groups.rb +23 -0
- data/lib/rails_admin/config/hideable.rb +28 -0
- data/lib/rails_admin/config/lazy_model.rb +21 -0
- data/lib/rails_admin/config/model.rb +109 -0
- data/lib/rails_admin/config/proxyable.rb +12 -0
- data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
- data/lib/rails_admin/config/sections.rb +39 -0
- data/lib/rails_admin/config/sections/base.rb +46 -0
- data/lib/rails_admin/config/sections/create.rb +11 -0
- data/lib/rails_admin/config/sections/edit.rb +11 -0
- data/lib/rails_admin/config/sections/export.rb +11 -0
- data/lib/rails_admin/config/sections/list.rb +27 -0
- data/lib/rails_admin/config/sections/modal.rb +10 -0
- data/lib/rails_admin/config/sections/nested.rb +10 -0
- data/lib/rails_admin/config/sections/show.rb +10 -0
- data/lib/rails_admin/config/sections/update.rb +10 -0
- data/lib/rails_admin/engine.rb +27 -0
- data/lib/rails_admin/extension.rb +29 -0
- data/lib/rails_admin/extensions/cancan.rb +5 -0
- data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +59 -0
- data/lib/rails_admin/extensions/history.rb +5 -0
- data/lib/rails_admin/extensions/history/auditing_adapter.rb +37 -0
- data/lib/rails_admin/extensions/history/history.rb +36 -0
- data/lib/rails_admin/extensions/paper_trail.rb +5 -0
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +93 -0
- data/lib/rails_admin/i18n_support.rb +43 -0
- data/lib/rails_admin/support/core_extensions.rb +44 -0
- data/lib/rails_admin/support/csv_converter.rb +105 -0
- data/lib/rails_admin/version.rb +18 -0
- data/lib/tasks/rails_admin.rake +48 -0
- data/spec/ci.sh +2 -0
- data/spec/controllers/rails_admin/application_controller_spec.rb +30 -0
- data/spec/controllers/rails_admin/main_controller_spec.rb +337 -0
- data/spec/dummy_app/Gemfile +48 -0
- data/spec/dummy_app/Rakefile +7 -0
- data/spec/dummy_app/app/active_record/abstract.rb +5 -0
- data/spec/dummy_app/app/active_record/another_field_test.rb +4 -0
- data/spec/dummy_app/app/active_record/ball.rb +9 -0
- data/spec/dummy_app/app/active_record/carrierwave_uploader.rb +53 -0
- data/spec/dummy_app/app/active_record/category.rb +5 -0
- data/spec/dummy_app/app/active_record/cms.rb +5 -0
- data/spec/dummy_app/app/active_record/cms/basic_page.rb +9 -0
- data/spec/dummy_app/app/active_record/cms/unscoped_page.rb +3 -0
- data/spec/dummy_app/app/active_record/comment.rb +5 -0
- data/spec/dummy_app/app/active_record/comment/confirmed.rb +3 -0
- data/spec/dummy_app/app/active_record/division.rb +15 -0
- data/spec/dummy_app/app/active_record/draft.rb +13 -0
- data/spec/dummy_app/app/active_record/fan.rb +7 -0
- data/spec/dummy_app/app/active_record/field_test.rb +19 -0
- data/spec/dummy_app/app/active_record/hardball.rb +2 -0
- data/spec/dummy_app/app/active_record/image.rb +6 -0
- data/spec/dummy_app/app/active_record/league.rb +12 -0
- data/spec/dummy_app/app/active_record/nested_field_test.rb +8 -0
- data/spec/dummy_app/app/active_record/player.rb +27 -0
- data/spec/dummy_app/app/active_record/team.rb +28 -0
- data/spec/dummy_app/app/active_record/user.rb +25 -0
- data/spec/dummy_app/app/assets/images/rails.png +0 -0
- data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
- data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
- data/spec/dummy_app/app/controllers/players_controller.rb +5 -0
- data/spec/dummy_app/app/locales/models.en.yml +20 -0
- data/spec/dummy_app/app/mongoid/another_field_test.rb +6 -0
- data/spec/dummy_app/app/mongoid/ball.rb +14 -0
- data/spec/dummy_app/app/mongoid/carrierwave_uploader.rb +53 -0
- data/spec/dummy_app/app/mongoid/category.rb +7 -0
- data/spec/dummy_app/app/mongoid/cms.rb +5 -0
- data/spec/dummy_app/app/mongoid/cms/basic_page.rb +12 -0
- data/spec/dummy_app/app/mongoid/cms/unscoped_page.rb +5 -0
- data/spec/dummy_app/app/mongoid/comment.rb +9 -0
- data/spec/dummy_app/app/mongoid/comment/confirmed.rb +3 -0
- data/spec/dummy_app/app/mongoid/division.rb +14 -0
- data/spec/dummy_app/app/mongoid/draft.rb +22 -0
- data/spec/dummy_app/app/mongoid/embed.rb +6 -0
- data/spec/dummy_app/app/mongoid/fan.rb +12 -0
- data/spec/dummy_app/app/mongoid/field_test.rb +57 -0
- data/spec/dummy_app/app/mongoid/hardball.rb +2 -0
- data/spec/dummy_app/app/mongoid/image.rb +9 -0
- data/spec/dummy_app/app/mongoid/league.rb +16 -0
- data/spec/dummy_app/app/mongoid/nested_field_test.rb +13 -0
- data/spec/dummy_app/app/mongoid/player.rb +41 -0
- data/spec/dummy_app/app/mongoid/team.rb +47 -0
- data/spec/dummy_app/app/mongoid/user.rb +61 -0
- data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy_app/app/views/players/show.html.haml +1 -0
- data/spec/dummy_app/config.ru +4 -0
- data/spec/dummy_app/config/application.rb +69 -0
- data/spec/dummy_app/config/boot.rb +9 -0
- data/spec/dummy_app/config/database.yml +25 -0
- data/spec/dummy_app/config/environment.rb +5 -0
- data/spec/dummy_app/config/environments/development.rb +37 -0
- data/spec/dummy_app/config/environments/production.rb +67 -0
- data/spec/dummy_app/config/environments/test.rb +37 -0
- data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy_app/config/initializers/devise.rb +216 -0
- data/spec/dummy_app/config/initializers/dragonfly.rb +11 -0
- data/spec/dummy_app/config/initializers/inflections.rb +15 -0
- data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
- data/spec/dummy_app/config/initializers/rails_admin.rb +8 -0
- data/spec/dummy_app/config/initializers/secret_token.rb +7 -0
- data/spec/dummy_app/config/initializers/session_patch.rb +16 -0
- data/spec/dummy_app/config/initializers/session_store.rb +8 -0
- data/spec/dummy_app/config/initializers/strong_parameters.rb +2 -0
- data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy_app/config/locales/fr.yml +24 -0
- data/spec/dummy_app/config/mongoid.yml +22 -0
- data/spec/dummy_app/config/routes.rb +10 -0
- data/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +13 -0
- data/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +19 -0
- data/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +12 -0
- data/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +20 -0
- data/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +22 -0
- data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +49 -0
- data/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +16 -0
- data/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +12 -0
- data/spec/dummy_app/db/migrate/00000000000009_create_fans_teams_migration.rb +11 -0
- data/spec/dummy_app/db/migrate/00000000000010_add_revenue_to_team_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000011_add_suspended_to_player_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000012_add_avatar_columns_to_user.rb +16 -0
- data/spec/dummy_app/db/migrate/00000000000013_add_roles_to_user.rb +9 -0
- data/spec/dummy_app/db/migrate/00000000000014_add_color_to_team_migration.rb +9 -0
- data/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +15 -0
- data/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +15 -0
- data/spec/dummy_app/db/migrate/20110123042530_rename_histories_to_rails_admin_histories.rb +9 -0
- data/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +22 -0
- data/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +14 -0
- data/spec/dummy_app/db/migrate/20110329183136_remove_league_id_from_teams.rb +9 -0
- data/spec/dummy_app/db/migrate/20110607152842_add_format_to_field_test.rb +9 -0
- data/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +12 -0
- data/spec/dummy_app/db/migrate/20110831090841_add_protected_field_and_restricted_field_to_field_tests.rb +6 -0
- data/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +19 -0
- data/spec/dummy_app/db/migrate/20110901142530_rename_league_id_foreign_key_on_divisions.rb +5 -0
- data/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +21 -0
- data/spec/dummy_app/db/migrate/20110901154834_change_length_for_rails_admin_histories.rb +9 -0
- data/spec/dummy_app/db/migrate/20111103174459_create_unscoped_pages.rb +9 -0
- data/spec/dummy_app/db/migrate/20111108143642_add_dragonfly_and_carrierwave_to_field_tests.rb +7 -0
- data/spec/dummy_app/db/migrate/20111115041025_add_type_to_balls.rb +5 -0
- data/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +10 -0
- data/spec/dummy_app/db/migrate/20111130075338_add_dragonfly_asset_name_to_field_tests.rb +5 -0
- data/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +8 -0
- data/spec/dummy_app/db/migrate/20120117151733_add_custom_field_to_teams.rb +5 -0
- data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +7 -0
- data/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb +15 -0
- data/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +8 -0
- data/spec/dummy_app/db/migrate/20120928075608_create_images.rb +8 -0
- data/spec/dummy_app/db/seeds.rb +29 -0
- data/spec/dummy_app/doc/README_FOR_APP +2 -0
- data/spec/dummy_app/public/404.html +26 -0
- data/spec/dummy_app/public/422.html +26 -0
- data/spec/dummy_app/public/500.html +25 -0
- data/spec/dummy_app/public/favicon.ico +0 -0
- data/spec/dummy_app/public/robots.txt +5 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/24/10_36_27_888_Pensive_Parakeet.jpg.meta +1 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/system/dragonfly/development/2011/11/30/08_54_39_906_Costa_Rican_Frog.jpg.meta +1 -0
- data/spec/dummy_app/public/system/paperclip_assets/1/original/Boston City Flow.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/1/thumb/Boston City Flow.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/3/original/Costa Rican Frog.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/3/thumb/Costa Rican Frog.jpg +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/6/original/liste-electorale.pdf +0 -0
- data/spec/dummy_app/public/system/paperclip_assets/6/thumb/liste-electorale.pdf +148 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/Boston_City_Flow.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/3/thumb_Boston_City_Flow.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/4/thumb_Costa_Rican_Frog.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/public/uploads/field_test/carrierwave_asset/6/thumb_Pensive_Parakeet.jpg +0 -0
- data/spec/dummy_app/script/rails +6 -0
- data/spec/factories.rb +75 -0
- data/spec/helpers/rails_admin/application_helper_spec.rb +353 -0
- data/spec/helpers/rails_admin/form_builder_spec.rb +17 -0
- data/spec/integration/authorization/cancan_spec.rb +366 -0
- data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +25 -0
- data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +53 -0
- data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +140 -0
- data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +16 -0
- data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +64 -0
- data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +84 -0
- data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +109 -0
- data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +106 -0
- data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +444 -0
- data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +73 -0
- data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +31 -0
- data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +82 -0
- data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +229 -0
- data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +1026 -0
- data/spec/integration/config/list/rails_admin_config_list_spec.rb +441 -0
- data/spec/integration/config/show/rails_admin_config_show_spec.rb +331 -0
- data/spec/integration/history/rails_admin_history_spec.rb +88 -0
- data/spec/integration/rails_admin_spec.rb +150 -0
- data/spec/integration/relation_spec.rb +35 -0
- data/spec/orm/active_record.rb +42 -0
- data/spec/orm/mongoid.rb +21 -0
- data/spec/rails_admin/abstract_model_spec.rb +75 -0
- data/spec/rails_admin/active_record_extension_spec.rb +16 -0
- data/spec/rails_admin/adapters/active_record/abstract_object_spec.rb +132 -0
- data/spec/rails_admin/adapters/active_record_spec.rb +409 -0
- data/spec/rails_admin/adapters/mongoid/abstract_object_spec.rb +31 -0
- data/spec/rails_admin/adapters/mongoid_spec.rb +776 -0
- data/spec/rails_admin/config/actions/base_spec.rb +32 -0
- data/spec/rails_admin/config/actions_spec.rb +180 -0
- data/spec/rails_admin/config/fields/base_spec.rb +421 -0
- data/spec/rails_admin/config/fields/date_spec.rb +74 -0
- data/spec/rails_admin/config/fields/datetime_spec.rb +55 -0
- data/spec/rails_admin/config/fields/file_upload_spec.rb +21 -0
- data/spec/rails_admin/config/fields/time_spec.rb +39 -0
- data/spec/rails_admin/config/fields/timestamp_spec.rb +20 -0
- data/spec/rails_admin/config/fields/types/datetime_spec.rb +18 -0
- data/spec/rails_admin/config/fields_spec.rb +15 -0
- data/spec/rails_admin/config/has_fields_spec.rb +30 -0
- data/spec/rails_admin/config/lazy_model_spec.rb +29 -0
- data/spec/rails_admin/config/model_spec.rb +75 -0
- data/spec/rails_admin/config/sections_spec.rb +123 -0
- data/spec/rails_admin/config_spec.rb +277 -0
- data/spec/rails_admin/support/csv_converter_spec.rb +16 -0
- data/spec/spec_helper.rb +84 -0
- metadata +868 -0
@@ -0,0 +1,366 @@
|
|
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
|
+
|
22
|
+
|
23
|
+
# fix for buggy and inconsistent behaviour in Cancan 1.6.8 => https://github.com/ryanb/cancan/issues/721
|
24
|
+
if CI_ORM != :mongoid
|
25
|
+
cannot [:update, :destroy], Player
|
26
|
+
can [:update, :destroy], Player, :retired => false
|
27
|
+
else
|
28
|
+
cannot [:update, :destroy], Player, :retired => true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class AdminAbility
|
35
|
+
include CanCan::Ability
|
36
|
+
def initialize(user)
|
37
|
+
can :access, :rails_admin if user.roles.include? :admin
|
38
|
+
can :show_in_app, :all
|
39
|
+
can :manage, :all
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "RailsAdmin CanCan Authorization" do
|
44
|
+
|
45
|
+
subject { page }
|
46
|
+
|
47
|
+
before(:each) do
|
48
|
+
RailsAdmin.config do |c|
|
49
|
+
c.authorize_with(:cancan)
|
50
|
+
end
|
51
|
+
@player_model = RailsAdmin::AbstractModel.new(Player)
|
52
|
+
@user = FactoryGirl.create :user
|
53
|
+
login_as @user
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "with no roles" do
|
57
|
+
before(:each) do
|
58
|
+
@user.update_attributes(:roles => [])
|
59
|
+
end
|
60
|
+
|
61
|
+
it "GET /admin should raise CanCan::AccessDenied" do
|
62
|
+
visit dashboard_path
|
63
|
+
should have_content('CanCan::AccessDenied')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "GET /admin/player should raise CanCan::AccessDenied" do
|
67
|
+
visit index_path(:model_name => "player")
|
68
|
+
should have_content('CanCan::AccessDenied')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "with read player role" do
|
73
|
+
before(:each) do
|
74
|
+
@user.update_attributes(:roles => [:admin, :read_player])
|
75
|
+
end
|
76
|
+
|
77
|
+
it "GET /admin should show Player but not League" do
|
78
|
+
visit dashboard_path
|
79
|
+
should have_content("Player")
|
80
|
+
should_not have_content("League")
|
81
|
+
should_not have_content("Add new")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "GET /admin/player should render successfully but not list retired players and not show new, edit, or delete actions" do
|
85
|
+
# ensure :name column to be shown
|
86
|
+
RailsAdmin.config Player do
|
87
|
+
list do
|
88
|
+
field :name
|
89
|
+
end
|
90
|
+
end
|
91
|
+
@players = [
|
92
|
+
FactoryGirl.create(:player, :retired => false),
|
93
|
+
FactoryGirl.create(:player, :retired => true),
|
94
|
+
]
|
95
|
+
|
96
|
+
visit index_path(:model_name => "player")
|
97
|
+
|
98
|
+
should have_content(@players[0].name)
|
99
|
+
should_not have_content(@players[1].name)
|
100
|
+
should_not have_content("Add new")
|
101
|
+
should have_css('.show_member_link')
|
102
|
+
should_not have_css('.edit_member_link')
|
103
|
+
should_not have_css('.delete_member_link')
|
104
|
+
should_not have_css('.history_show_member_link')
|
105
|
+
should_not have_css('.show_in_app_member_link')
|
106
|
+
end
|
107
|
+
|
108
|
+
it "GET /admin/team should raise CanCan::AccessDenied" do
|
109
|
+
visit index_path(:model_name => "team")
|
110
|
+
should have_content('CanCan::AccessDenied')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "GET /admin/player/new should raise CanCan::AccessDenied" do
|
114
|
+
visit new_path(:model_name => "player")
|
115
|
+
should have_content('CanCan::AccessDenied')
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "with create and read player role" do
|
121
|
+
before(:each) do
|
122
|
+
@user.update_attributes(:roles => [:admin, :read_player, :create_player])
|
123
|
+
end
|
124
|
+
|
125
|
+
it "GET /admin/player/new should render and create record upon submission" do
|
126
|
+
visit new_path(:model_name => "player")
|
127
|
+
|
128
|
+
should_not have_content("Save and edit")
|
129
|
+
should_not have_content("Delete")
|
130
|
+
|
131
|
+
should have_content("Save and add another")
|
132
|
+
fill_in "player[name]", :with => "Jackie Robinson"
|
133
|
+
fill_in "player[number]", :with => "42"
|
134
|
+
fill_in "player[position]", :with => "Second baseman"
|
135
|
+
click_button "Save" # first(:button, "Save").click
|
136
|
+
should_not have_content("Edit")
|
137
|
+
|
138
|
+
@player = RailsAdmin::AbstractModel.new("Player").first
|
139
|
+
expect(@player.name).to eq("Jackie Robinson")
|
140
|
+
expect(@player.number).to eq(42)
|
141
|
+
expect(@player.position).to eq("Second baseman")
|
142
|
+
expect(@player).to be_suspended # suspended is inherited behavior based on permission
|
143
|
+
end
|
144
|
+
|
145
|
+
it "GET /admin/player/1/edit should raise access denied" do
|
146
|
+
@player = FactoryGirl.create :player
|
147
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
148
|
+
should have_content('CanCan::AccessDenied')
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "with update and read player role" do
|
154
|
+
before(:each) do
|
155
|
+
@user.update_attributes(:roles => [:admin, :read_player, :update_player])
|
156
|
+
end
|
157
|
+
|
158
|
+
it "GET /admin/player/1/edit should render and update record upon submission" do
|
159
|
+
@player = FactoryGirl.create :player
|
160
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
161
|
+
should have_content("Save and edit")
|
162
|
+
should_not have_content("Save and add another")
|
163
|
+
should_not have_content("Add new")
|
164
|
+
should_not have_content("Delete")
|
165
|
+
should_not have_content("History")
|
166
|
+
should_not have_content("Show in app")
|
167
|
+
fill_in "player[name]", :with => "Jackie Robinson"
|
168
|
+
click_button "Save" # click_button "Save" # first(:button, "Save").click
|
169
|
+
@player.reload
|
170
|
+
expect(@player.name).to eq("Jackie Robinson")
|
171
|
+
end
|
172
|
+
|
173
|
+
it "GET /admin/player/1/edit with retired player should raise access denied" do
|
174
|
+
@player = FactoryGirl.create :player, :retired => true
|
175
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
176
|
+
should have_content('CanCan::AccessDenied')
|
177
|
+
end
|
178
|
+
|
179
|
+
it "GET /admin/player/1/delete should raise access denied" do
|
180
|
+
@player = FactoryGirl.create :player
|
181
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
182
|
+
should have_content('CanCan::AccessDenied')
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "with history role" do
|
188
|
+
it "shows links to history action" do
|
189
|
+
|
190
|
+
@user.update_attributes(:roles => [:admin, :read_player, :history_player])
|
191
|
+
@player = FactoryGirl.create :player
|
192
|
+
|
193
|
+
visit index_path(:model_name => "player")
|
194
|
+
should have_css('.show_member_link')
|
195
|
+
should_not have_css('.edit_member_link')
|
196
|
+
should_not have_css('.delete_member_link')
|
197
|
+
should have_css('.history_show_member_link')
|
198
|
+
|
199
|
+
visit show_path(:model_name => 'player', :id => @player.id)
|
200
|
+
should have_content("Show")
|
201
|
+
should_not have_content("Edit")
|
202
|
+
should_not have_content("Delete")
|
203
|
+
should have_content("History")
|
204
|
+
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
describe "with show in app role" do
|
209
|
+
it "shows links to show in app action" do
|
210
|
+
|
211
|
+
@user.update_attributes(:roles => [:admin, :read_player, :show_in_app_player])
|
212
|
+
@player = FactoryGirl.create :player
|
213
|
+
|
214
|
+
visit index_path(:model_name => "player")
|
215
|
+
should have_css('.show_member_link')
|
216
|
+
should_not have_css('.edit_member_link')
|
217
|
+
should_not have_css('.delete_member_link')
|
218
|
+
should_not have_css('.history_show_member_link')
|
219
|
+
should have_css('.show_in_app_member_link')
|
220
|
+
|
221
|
+
visit show_path(:model_name => 'player', :id => @player.id)
|
222
|
+
should have_content("Show")
|
223
|
+
should_not have_content("Edit")
|
224
|
+
should_not have_content("Delete")
|
225
|
+
should_not have_content("History")
|
226
|
+
should have_content("Show in app")
|
227
|
+
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
describe "with all roles" do
|
232
|
+
it "shows links to all actions" do
|
233
|
+
|
234
|
+
@user.update_attributes(:roles => [:admin, :manage_player])
|
235
|
+
@player = FactoryGirl.create :player
|
236
|
+
|
237
|
+
visit index_path(:model_name => "player")
|
238
|
+
should have_css('.show_member_link')
|
239
|
+
should have_css('.edit_member_link')
|
240
|
+
should have_css('.delete_member_link')
|
241
|
+
should have_css('.history_show_member_link')
|
242
|
+
should have_css('.show_in_app_member_link')
|
243
|
+
|
244
|
+
visit show_path(:model_name => 'player', :id => @player.id)
|
245
|
+
should have_content("Show")
|
246
|
+
should have_content("Edit")
|
247
|
+
should have_content("Delete")
|
248
|
+
should have_content("History")
|
249
|
+
should have_content("Show in app")
|
250
|
+
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "with destroy and read player role" do
|
255
|
+
before(:each) do
|
256
|
+
@user.update_attributes(:roles => [:admin, :read_player, :destroy_player])
|
257
|
+
end
|
258
|
+
|
259
|
+
it "GET /admin/player/1/delete should render and destroy record upon submission" do
|
260
|
+
@player = FactoryGirl.create :player
|
261
|
+
player_id = @player.id
|
262
|
+
visit delete_path(:model_name => "player", :id => player_id)
|
263
|
+
|
264
|
+
click_button "Yes, I'm sure"
|
265
|
+
|
266
|
+
expect(@player_model.get(player_id)).to be_nil
|
267
|
+
end
|
268
|
+
|
269
|
+
it "GET /admin/player/1/delete with retired player should raise access denied" do
|
270
|
+
@player = FactoryGirl.create :player, :retired => true
|
271
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
272
|
+
should have_content('CanCan::AccessDenied')
|
273
|
+
end
|
274
|
+
|
275
|
+
it "GET /admin/player/bulk_delete should render records which are authorized to" do
|
276
|
+
active_player = FactoryGirl.create :player, :retired => false
|
277
|
+
retired_player = FactoryGirl.create :player, :retired => true
|
278
|
+
|
279
|
+
post bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id))
|
280
|
+
|
281
|
+
expect(response.body).to include(active_player.name)
|
282
|
+
expect(response.body).not_to include(retired_player.name)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "POST /admin/player/bulk_destroy should destroy records which are authorized to" do
|
286
|
+
active_player = FactoryGirl.create :player, :retired => false
|
287
|
+
retired_player = FactoryGirl.create :player, :retired => true
|
288
|
+
|
289
|
+
delete bulk_delete_path(:model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id))
|
290
|
+
expect(@player_model.get(active_player.id)).to be_nil
|
291
|
+
expect(@player_model.get(retired_player.id)).not_to be_nil
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
describe "with exception role" do
|
296
|
+
it "GET /admin/player/bulk_delete should render records which are authorized to" do
|
297
|
+
@user.update_attributes(:roles => [:admin, :test_exception])
|
298
|
+
active_player = FactoryGirl.create :player, :retired => false
|
299
|
+
retired_player = FactoryGirl.create :player, :retired => true
|
300
|
+
|
301
|
+
post bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id))
|
302
|
+
|
303
|
+
expect(response.body).to include(active_player.name)
|
304
|
+
expect(response.body).not_to include(retired_player.name)
|
305
|
+
end
|
306
|
+
|
307
|
+
it "POST /admin/player/bulk_destroy should destroy records which are authorized to" do
|
308
|
+
@user.update_attributes(:roles => [:admin, :test_exception])
|
309
|
+
active_player = FactoryGirl.create :player, :retired => false
|
310
|
+
retired_player = FactoryGirl.create :player, :retired => true
|
311
|
+
|
312
|
+
delete bulk_delete_path(:model_name => "player", :bulk_ids => [active_player, retired_player].map(&:id))
|
313
|
+
expect(@player_model.get(active_player.id)).to be_nil
|
314
|
+
expect(@player_model.get(retired_player.id)).not_to be_nil
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
describe "with a custom admin ability" do
|
319
|
+
before(:each) do
|
320
|
+
RailsAdmin.config{|c| c.authorize_with :cancan, AdminAbility }
|
321
|
+
@user = FactoryGirl.create :user
|
322
|
+
login_as @user
|
323
|
+
end
|
324
|
+
|
325
|
+
describe "with admin role only" do
|
326
|
+
before(:each) do
|
327
|
+
@user.update_attributes(:roles => [:admin])
|
328
|
+
end
|
329
|
+
|
330
|
+
it "GET /admin/team should render successfully" do
|
331
|
+
visit index_path(:model_name => "team")
|
332
|
+
expect(page.status_code).to eq(200)
|
333
|
+
end
|
334
|
+
|
335
|
+
it "GET /admin/player/new should render successfully" do
|
336
|
+
visit new_path(:model_name => "player")
|
337
|
+
expect(page.status_code).to eq(200)
|
338
|
+
end
|
339
|
+
|
340
|
+
it "GET /admin/player/1/edit should render successfully" do
|
341
|
+
@player = FactoryGirl.create :player
|
342
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
343
|
+
expect(page.status_code).to eq(200)
|
344
|
+
end
|
345
|
+
|
346
|
+
it "GET /admin/player/1/edit with retired player should render successfully" do
|
347
|
+
@player = FactoryGirl.create :player, :retired => true
|
348
|
+
visit edit_path(:model_name => "player", :id => @player.id)
|
349
|
+
expect(page.status_code).to eq(200)
|
350
|
+
end
|
351
|
+
|
352
|
+
it "GET /admin/player/1/delete should render successfully" do
|
353
|
+
@player = FactoryGirl.create :player
|
354
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
355
|
+
expect(page.status_code).to eq(200)
|
356
|
+
end
|
357
|
+
|
358
|
+
it "GET /admin/player/1/delete with retired player should render successfully" do
|
359
|
+
@player = FactoryGirl.create :player, :retired => true
|
360
|
+
visit delete_path(:model_name => "player", :id => @player.id)
|
361
|
+
expect(page.status_code).to eq(200)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
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 "shows names of to-be-deleted players" do
|
13
|
+
post(bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @players.map(&:id)))
|
14
|
+
@players.each { |player| expect(response.body).to include(player.name) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "bulk_export" do
|
19
|
+
it "shows 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,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "RailsAdmin Basic Bulk Destroy" do
|
4
|
+
subject { page }
|
5
|
+
|
6
|
+
describe "successful bulk delete of records", :active_record => true do
|
7
|
+
before do
|
8
|
+
RailsAdmin::History.destroy_all
|
9
|
+
RailsAdmin.config { |c| c.audit_with :history }
|
10
|
+
@players = 3.times.map { FactoryGirl.create(:player) }
|
11
|
+
@delete_ids = @players[0..1].map(&:id)
|
12
|
+
|
13
|
+
# NOTE: This uses an internal, unsupported capybara API which could break at any moment. We
|
14
|
+
# should refactor this test so that it either A) uses capybara's supported API (only GET
|
15
|
+
# requests via visit) or B) just uses Rack::Test (and doesn't use capybara for browser
|
16
|
+
# interaction like click_button).
|
17
|
+
page.driver.browser.reset_host!
|
18
|
+
page.driver.browser.process :post, bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @delete_ids, '_method' => 'post')
|
19
|
+
click_button "Yes, I'm sure"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not contain deleted records" do
|
23
|
+
expect(RailsAdmin::AbstractModel.new("Player").count).to eq(1)
|
24
|
+
expect(RailsAdmin::History.count).to eq(@delete_ids.count)
|
25
|
+
RailsAdmin::History.all.each do |history|
|
26
|
+
expect(history.table).to eq("Player")
|
27
|
+
end
|
28
|
+
RailsAdmin::History.all.each do |history|
|
29
|
+
expect(@delete_ids).to include(history.item)
|
30
|
+
end
|
31
|
+
expect(page).to have_selector(".alert-success", :text => "2 Players successfully deleted")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "cancelled bulk_deletion" do
|
36
|
+
before do
|
37
|
+
@players = 3.times.map { FactoryGirl.create(:player) }
|
38
|
+
@delete_ids = @players[0..1].map(&:id)
|
39
|
+
|
40
|
+
# NOTE: This uses an internal, unsupported capybara API which could break at any moment. We
|
41
|
+
# should refactor this test so that it either A) uses capybara's supported API (only GET
|
42
|
+
# requests via visit) or B) just uses Rack::Test (and doesn't use capybara for browser
|
43
|
+
# interaction like click_button).
|
44
|
+
page.driver.browser.reset_host!
|
45
|
+
page.driver.browser.process :post, bulk_action_path(:bulk_action => 'bulk_delete', :model_name => "player", :bulk_ids => @delete_ids, '_method' => 'post')
|
46
|
+
click_button "Cancel"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "does not delete records" do
|
50
|
+
expect(RailsAdmin::AbstractModel.new("Player").count).to eq(3)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,140 @@
|
|
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" # first(:button, "Save").click
|
13
|
+
@player = RailsAdmin::AbstractModel.new("Player").first
|
14
|
+
end
|
15
|
+
|
16
|
+
it "creates an object with correct attributes" do
|
17
|
+
expect(@player.name).to eq("Jackie Robinson")
|
18
|
+
expect(@player.number).to eq(42)
|
19
|
+
expect(@player.position).to eq("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 "creates an object with correct attributes" do
|
36
|
+
expect(@player.name).to eq("Jackie Robinson")
|
37
|
+
expect(@player.number).to eq(42)
|
38
|
+
expect(@player.position).to eq("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 "creates an object with correct attributes" do
|
55
|
+
expect(@player.name).to eq("Jackie Robinson")
|
56
|
+
expect(@player.number).to eq(42)
|
57
|
+
expect(@player.position).to eq("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
|
+
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 "creates an object with correct associations" do
|
71
|
+
@draft.reload
|
72
|
+
expect(@player.draft).to eq(@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
|
+
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 "creates an object with correct associations" do
|
84
|
+
@divisions[0].reload
|
85
|
+
expect(@league.divisions).to include(@divisions[0])
|
86
|
+
expect(@league.divisions).not_to include(@divisions[1])
|
87
|
+
expect(@league.divisions).not_to 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
|
+
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 "creates an object with correct associations" do
|
99
|
+
@teams[0].reload
|
100
|
+
expect(@fan.teams).to include(@teams[0])
|
101
|
+
expect(@fan.teams).not_to include(@teams[1])
|
102
|
+
expect(@fan.teams).not_to 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
|
+
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 "shows an error message" do
|
115
|
+
expect(response.body).to include("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
|
+
post new_path(:model_name => "player", :player => {:id => 1})
|
122
|
+
end
|
123
|
+
|
124
|
+
it "shows an error message" do
|
125
|
+
expect(response.body).to include("Player failed to be created")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "create with object with errors on base" do
|
130
|
+
before(:each) do
|
131
|
+
visit new_path(:model_name => "player")
|
132
|
+
fill_in "player[name]", :with => "Jackie Robinson on steroids"
|
133
|
+
click_button "Save and add another"
|
134
|
+
end
|
135
|
+
|
136
|
+
it "shows error base error message in flash" do
|
137
|
+
should have_content("Player failed to be created. Player is cheating")
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|