activeadmin 1.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +307 -123
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +90 -46
- data/README.md +66 -19
- data/app/assets/javascripts/active_admin/base.es6 +23 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
- data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
- data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
- data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/config/locales/bg.yml +0 -1
- data/config/locales/de.yml +10 -0
- data/config/locales/en.yml +19 -1
- data/config/locales/es.yml +20 -1
- data/config/locales/fi.yml +1 -1
- data/config/locales/he.yml +0 -1
- data/config/locales/hu.yml +4 -0
- data/config/locales/it.yml +4 -0
- data/config/locales/lt.yml +2 -2
- data/config/locales/nb.yml +15 -5
- data/config/locales/nl.yml +11 -0
- data/config/locales/pl.yml +71 -3
- data/config/locales/ru.yml +2 -0
- data/config/locales/tr.yml +9 -0
- data/config/locales/uk.yml +2 -0
- data/config/locales/zh-CN.yml +33 -5
- data/docs/.gitignore +1 -0
- data/docs/0-installation.md +2 -2
- data/docs/1-general-configuration.md +16 -1
- data/docs/10-custom-pages.md +14 -0
- data/docs/12-arbre-components.md +28 -1
- data/docs/13-authorization-adapter.md +40 -21
- data/docs/2-resource-customization.md +8 -3
- data/docs/3-index-pages/custom-index.md +1 -1
- data/docs/3-index-pages/index-as-blog.md +1 -1
- data/docs/3-index-pages/index-as-table.md +5 -5
- data/docs/3-index-pages.md +17 -0
- data/docs/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- data/docs/CNAME +1 -1
- data/docs/Gemfile +2 -0
- data/docs/Gemfile.lock +249 -0
- data/docs/_config.yml +1 -1
- data/docs/_includes/toc.html +1 -1
- data/docs/_includes/top-menu.html +9 -1
- data/docs/documentation.md +1 -1
- data/docs/images/tidelift.svg +14 -0
- data/docs/index.html +2 -2
- data/docs/stylesheets/main.css +26 -2
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +49 -155
- data/lib/active_admin/application_settings.rb +42 -0
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/base_controller/authorization.rb +3 -6
- data/lib/active_admin/base_controller.rb +6 -6
- data/lib/active_admin/batch_actions/controller.rb +2 -2
- data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/csv_builder.rb +1 -1
- data/lib/active_admin/dependency.rb +1 -69
- data/lib/active_admin/deprecation.rb +0 -25
- data/lib/active_admin/dsl.rb +1 -8
- data/lib/active_admin/dynamic_setting.rb +38 -0
- data/lib/active_admin/dynamic_settings_node.rb +28 -0
- data/lib/active_admin/engine.rb +5 -0
- data/lib/active_admin/error.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +4 -2
- data/lib/active_admin/filters/active_sidebar.rb +5 -1
- data/lib/active_admin/filters/forms.rb +7 -4
- data/lib/active_admin/filters/formtastic_addons.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +4 -4
- data/lib/active_admin/form_builder.rb +97 -62
- data/lib/active_admin/generators/boilerplate.rb +1 -1
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +8 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +4 -32
- data/lib/active_admin/namespace.rb +20 -8
- data/lib/active_admin/namespace_settings.rb +110 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
- data/lib/active_admin/orm/active_record/comments.rb +15 -4
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/pundit_adapter.rb +13 -4
- data/lib/active_admin/resource/action_items.rb +7 -2
- data/lib/active_admin/resource/attributes.rb +7 -4
- data/lib/active_admin/resource/menu.rb +3 -3
- data/lib/active_admin/resource/naming.rb +3 -3
- data/lib/active_admin/resource/routes.rb +9 -4
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +1 -1
- data/lib/active_admin/resource.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/decorators.rb +3 -3
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_dsl.rb +5 -3
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +9 -5
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_helpers/display_helper.rb +10 -2
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +9 -4
- data/lib/active_admin/views/components/attributes_table.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +32 -0
- data/lib/active_admin/views/components/menu_item.rb +58 -0
- data/lib/active_admin/views/components/paginated_collection.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +11 -4
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/status_tag.rb +1 -18
- data/lib/active_admin/views/components/table_for.rb +3 -12
- data/lib/active_admin/views/components/tabs.rb +15 -3
- data/lib/active_admin/views/footer.rb +3 -7
- data/lib/active_admin/views/header.rb +3 -15
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +25 -25
- data/lib/active_admin/views/index_as_table.rb +11 -10
- data/lib/active_admin/views/pages/base.rb +30 -53
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin.rb +9 -4
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +6 -2
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
- data/lib/ransack_ext.rb +3 -3
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +120 -523
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -49
- data/.mdlrc +0 -1
- data/.rubocop.yml +0 -76
- data/.simplecov +0 -13
- data/.travis.yml +0 -51
- data/.yardopts +0 -7
- data/Gemfile +0 -58
- data/Rakefile +0 -54
- data/activeadmin.gemspec +0 -32
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/codecov.yml +0 -25
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -9
- data/cucumber.yml +0 -3
- data/features/action_item.feature +0 -73
- data/features/authorization.feature +0 -64
- data/features/authorization_cancan.feature +0 -52
- data/features/authorization_pundit.feature +0 -37
- data/features/belongs_to.feature +0 -124
- data/features/breadcrumb.feature +0 -75
- data/features/comments/commenting.feature +0 -178
- data/features/comments/viewing_index.feature +0 -19
- data/features/create_another.feature +0 -55
- data/features/dashboard.feature +0 -16
- data/features/decorators.feature +0 -43
- data/features/development_reloading.feature +0 -28
- data/features/edit_page.feature +0 -116
- data/features/favicon.feature +0 -20
- data/features/first_boot.feature +0 -16
- data/features/footer.feature +0 -28
- data/features/global_navigation.feature +0 -29
- data/features/i18n.feature +0 -55
- data/features/index/batch_actions.feature +0 -218
- data/features/index/filters.feature +0 -250
- data/features/index/format_as_csv.feature +0 -220
- data/features/index/formats.feature +0 -88
- data/features/index/index_as_block.feature +0 -15
- data/features/index/index_as_blog.feature +0 -69
- data/features/index/index_as_grid.feature +0 -45
- data/features/index/index_as_table.feature +0 -291
- data/features/index/index_blank_slate.feature +0 -83
- data/features/index/index_parameters.feature +0 -75
- data/features/index/index_scope_to.feature +0 -56
- data/features/index/index_scopes.feature +0 -285
- data/features/index/page_title.feature +0 -41
- data/features/index/pagination.feature +0 -63
- data/features/index/switch_index_view.feature +0 -73
- data/features/menu.feature +0 -72
- data/features/meta_tags.feature +0 -21
- data/features/new_page.feature +0 -136
- data/features/registering_assets.feature +0 -38
- data/features/registering_pages.feature +0 -237
- data/features/registering_resources.feature +0 -33
- data/features/renamed_resource.feature +0 -30
- data/features/root_to.feature +0 -17
- data/features/show/attributes_table_title.feature +0 -54
- data/features/show/columns.feature +0 -40
- data/features/show/default_content.feature +0 -44
- data/features/show/page_title.feature +0 -58
- data/features/show/tabs.feature +0 -33
- data/features/sidebar_sections.feature +0 -210
- data/features/site_title.feature +0 -47
- data/features/specifying_actions.feature +0 -118
- data/features/step_definitions/action_item_steps.rb +0 -7
- data/features/step_definitions/action_link_steps.rb +0 -19
- data/features/step_definitions/additional_web_steps.rb +0 -81
- data/features/step_definitions/asset_steps.rb +0 -15
- data/features/step_definitions/attribute_steps.rb +0 -18
- data/features/step_definitions/attributes_table_title_steps.rb +0 -11
- data/features/step_definitions/batch_action_steps.rb +0 -81
- data/features/step_definitions/blog_steps.rb +0 -3
- data/features/step_definitions/breadcrumb_steps.rb +0 -3
- data/features/step_definitions/column_steps.rb +0 -8
- data/features/step_definitions/comment_steps.rb +0 -32
- data/features/step_definitions/configuration_steps.rb +0 -100
- data/features/step_definitions/dashboard_steps.rb +0 -15
- data/features/step_definitions/factory_steps.rb +0 -35
- data/features/step_definitions/filter_steps.rb +0 -47
- data/features/step_definitions/flash_steps.rb +0 -11
- data/features/step_definitions/footer_steps.rb +0 -11
- data/features/step_definitions/format_steps.rb +0 -56
- data/features/step_definitions/i18n_steps.rb +0 -11
- data/features/step_definitions/index_scope_steps.rb +0 -29
- data/features/step_definitions/index_views_steps.rb +0 -3
- data/features/step_definitions/layout_steps.rb +0 -3
- data/features/step_definitions/member_link_steps.rb +0 -7
- data/features/step_definitions/menu_steps.rb +0 -11
- data/features/step_definitions/meta_tag_steps.rb +0 -3
- data/features/step_definitions/pagination_steps.rb +0 -15
- data/features/step_definitions/sidebar_steps.rb +0 -11
- data/features/step_definitions/site_title_steps.rb +0 -17
- data/features/step_definitions/tab_steps.rb +0 -8
- data/features/step_definitions/table_steps.rb +0 -116
- data/features/step_definitions/user_steps.rb +0 -52
- data/features/step_definitions/web_steps.rb +0 -86
- data/features/sti_resource.feature +0 -65
- data/features/strong_parameters.feature +0 -69
- data/features/support/env.rb +0 -122
- data/features/support/paths.rb +0 -73
- data/features/support/regular_env.rb +0 -7
- data/features/support/reload_env.rb +0 -7
- data/features/support/selectors.rb +0 -45
- data/features/users/logging_in.feature +0 -36
- data/features/users/logging_out.feature +0 -13
- data/features/users/resetting_password.feature +0 -34
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_52.gemfile +0 -11
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/helpers/settings.rb +0 -114
- data/lib/bug_report_templates/active_admin_master.rb +0 -112
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/spec/bug_report_templates_spec.rb +0 -26
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
- data/spec/javascripts/fixtures/checkboxes.html +0 -9
- data/spec/javascripts/fixtures/flashes.html +0 -2
- data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
- data/spec/javascripts/helpers/SpecHelper.js +0 -3
- data/spec/javascripts/support/jasmine.yml +0 -74
- data/spec/javascripts/support/jasmine_runner.rb +0 -19
- data/spec/rails_helper.rb +0 -59
- data/spec/requests/default_namespace_spec.rb +0 -81
- data/spec/requests/memory_spec.rb +0 -25
- data/spec/requests/stylesheets_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/active_admin_integration_spec_helper.rb +0 -73
- data/spec/support/active_admin_request_helpers.rb +0 -39
- data/spec/support/rails_template.rb +0 -153
- data/spec/support/rails_template_with_data.rb +0 -327
- data/spec/support/templates/admin/stores.rb +0 -7
- data/spec/support/templates/en.yml +0 -8
- data/spec/support/templates/manifest.js +0 -3
- data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
- data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
- data/spec/support/templates/policies/admin_user_policy.rb +0 -11
- data/spec/support/templates/policies/application_policy.rb +0 -44
- data/spec/support/templates/policies/category_policy.rb +0 -7
- data/spec/support/templates/policies/post_policy.rb +0 -15
- data/spec/support/templates/policies/store_policy.rb +0 -11
- data/spec/support/templates/policies/user_policy.rb +0 -11
- data/spec/support/templates/post_decorator.rb +0 -24
- data/spec/unit/abstract_view_factory_spec.rb +0 -78
- data/spec/unit/action_builder_spec.rb +0 -158
- data/spec/unit/active_admin_spec.rb +0 -11
- data/spec/unit/application_spec.rb +0 -184
- data/spec/unit/asset_registration_spec.rb +0 -81
- data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
- data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
- data/spec/unit/authorization/index_overriding_spec.rb +0 -23
- data/spec/unit/auto_link_spec.rb +0 -93
- data/spec/unit/batch_actions/resource_spec.rb +0 -84
- data/spec/unit/batch_actions/settings_spec.rb +0 -61
- data/spec/unit/belongs_to_spec.rb +0 -76
- data/spec/unit/cancan_adapter_spec.rb +0 -43
- data/spec/unit/comments_spec.rb +0 -176
- data/spec/unit/component_spec.rb +0 -18
- data/spec/unit/config_shared_examples.rb +0 -59
- data/spec/unit/controller_filters_spec.rb +0 -41
- data/spec/unit/csv_builder_spec.rb +0 -313
- data/spec/unit/dependency_spec.rb +0 -135
- data/spec/unit/devise_spec.rb +0 -110
- data/spec/unit/dsl_spec.rb +0 -120
- data/spec/unit/filters/active_filter_spec.rb +0 -189
- data/spec/unit/filters/active_spec.rb +0 -24
- data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
- data/spec/unit/filters/resource_spec.rb +0 -128
- data/spec/unit/form_builder_spec.rb +0 -990
- data/spec/unit/generators/install_spec.rb +0 -31
- data/spec/unit/helpers/collection_spec.rb +0 -68
- data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
- data/spec/unit/helpers/scope_chain_spec.rb +0 -35
- data/spec/unit/helpers/settings_spec.rb +0 -30
- data/spec/unit/i18n_spec.rb +0 -29
- data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
- data/spec/unit/menu_collection_spec.rb +0 -62
- data/spec/unit/menu_item_spec.rb +0 -141
- data/spec/unit/menu_spec.rb +0 -71
- data/spec/unit/namespace/authorization_spec.rb +0 -27
- data/spec/unit/namespace/register_page_spec.rb +0 -99
- data/spec/unit/namespace/register_resource_spec.rb +0 -162
- data/spec/unit/namespace_spec.rb +0 -124
- data/spec/unit/order_clause_spec.rb +0 -81
- data/spec/unit/page_controller_spec.rb +0 -5
- data/spec/unit/page_spec.rb +0 -128
- data/spec/unit/pretty_format_spec.rb +0 -82
- data/spec/unit/pundit_adapter_spec.rb +0 -98
- data/spec/unit/resource/action_items_spec.rb +0 -69
- data/spec/unit/resource/attributes_spec.rb +0 -49
- data/spec/unit/resource/includes_spec.rb +0 -21
- data/spec/unit/resource/menu_spec.rb +0 -18
- data/spec/unit/resource/naming_spec.rb +0 -122
- data/spec/unit/resource/ordering_spec.rb +0 -35
- data/spec/unit/resource/page_presenters_spec.rb +0 -44
- data/spec/unit/resource/pagination_spec.rb +0 -38
- data/spec/unit/resource/routes_spec.rb +0 -125
- data/spec/unit/resource/scopes_spec.rb +0 -50
- data/spec/unit/resource/sidebars_spec.rb +0 -43
- data/spec/unit/resource_collection_spec.rb +0 -175
- data/spec/unit/resource_controller/data_access_spec.rb +0 -234
- data/spec/unit/resource_controller/decorators_spec.rb +0 -94
- data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
- data/spec/unit/resource_controller_spec.rb +0 -273
- data/spec/unit/resource_registration_spec.rb +0 -61
- data/spec/unit/resource_spec.rb +0 -320
- data/spec/unit/routing_spec.rb +0 -211
- data/spec/unit/scope_spec.rb +0 -209
- data/spec/unit/settings_spec.rb +0 -117
- data/spec/unit/view_factory_spec.rb +0 -19
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
- data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
- data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
- data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
- data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
- data/spec/unit/views/components/attributes_table_spec.rb +0 -271
- data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
- data/spec/unit/views/components/blank_slate_spec.rb +0 -27
- data/spec/unit/views/components/columns_spec.rb +0 -187
- data/spec/unit/views/components/index_list_spec.rb +0 -49
- data/spec/unit/views/components/index_table_for_spec.rb +0 -127
- data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
- data/spec/unit/views/components/panel_spec.rb +0 -58
- data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
- data/spec/unit/views/components/site_title_spec.rb +0 -76
- data/spec/unit/views/components/status_tag_spec.rb +0 -265
- data/spec/unit/views/components/table_for_spec.rb +0 -436
- data/spec/unit/views/components/tabs_spec.rb +0 -67
- data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
- data/spec/unit/views/index_as_blog_spec.rb +0 -76
- data/spec/unit/views/pages/form_spec.rb +0 -54
- data/spec/unit/views/pages/index_spec.rb +0 -60
- data/spec/unit/views/pages/layout_spec.rb +0 -59
- data/spec/unit/views/pages/show_spec.rb +0 -32
- data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
- data/tasks/docs.rake +0 -64
- data/tasks/lint.rake +0 -21
- data/tasks/local.rake +0 -25
- data/tasks/parallel_tests.rake +0 -66
- data/tasks/test.rake +0 -29
@@ -1,524 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::Filters::ViewHelper do
|
4
|
-
|
5
|
-
# Setup an ActionView::Base object which can be used for
|
6
|
-
# generating the form for.
|
7
|
-
let(:helpers) do
|
8
|
-
view = action_view
|
9
|
-
def view.collection_path
|
10
|
-
"/posts"
|
11
|
-
end
|
12
|
-
|
13
|
-
def view.protect_against_forgery?
|
14
|
-
false
|
15
|
-
end
|
16
|
-
|
17
|
-
def view.a_helper_method
|
18
|
-
"A Helper Method"
|
19
|
-
end
|
20
|
-
|
21
|
-
view
|
22
|
-
end
|
23
|
-
|
24
|
-
def render_filter(search, filters)
|
25
|
-
render_arbre_component({filter_args: [search, filters]}, helpers) do
|
26
|
-
text_node active_admin_filters_form_for *assigns[:filter_args]
|
27
|
-
end.to_s
|
28
|
-
end
|
29
|
-
|
30
|
-
def filter(name, options = {})
|
31
|
-
render_filter scope, name => options
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:scope) { Post.search }
|
35
|
-
|
36
|
-
describe "the form in general" do
|
37
|
-
let(:body) { Capybara.string(filter :title) }
|
38
|
-
|
39
|
-
it "should generate a form which submits via get" do
|
40
|
-
expect(body).to have_selector("form.filter_form[method=get]")
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should generate a filter button" do
|
44
|
-
expect(body).to have_selector("input[type=submit][value=Filter]")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should only generate the form once" do
|
48
|
-
expect(body).to have_selector("form", count: 1)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should generate a clear filters link" do
|
52
|
-
expect(body).to have_selector("a.clear_filters_btn", text: "Clear Filters")
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "label as proc" do
|
56
|
-
let(:body) { Capybara.string(filter :title, label: proc { 'Title from proc' }) }
|
57
|
-
|
58
|
-
it "should render proper label" do
|
59
|
-
expect(body).to have_selector("label", text: "Title from proc")
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "input html as proc" do
|
64
|
-
let(:body) { Capybara.string(filter :title, as: :select, input_html: proc{ {'data-ajax-url': '/'} }) }
|
65
|
-
|
66
|
-
it "should render proper label" do
|
67
|
-
expect(body).to have_selector('select[data-ajax-url="/"]')
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "string attribute" do
|
73
|
-
let(:body) { Capybara.string(filter :title) }
|
74
|
-
|
75
|
-
it "should generate a select option for starts with" do
|
76
|
-
expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should generate a select option for ends with" do
|
80
|
-
expect(body).to have_selector("option[value=title_ends_with]", text: "Ends with")
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should generate a select option for contains" do
|
84
|
-
expect(body).to have_selector("option[value=title_contains]", text: "Contains")
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should generate a text field for input" do
|
88
|
-
expect(body).to have_selector("input[name='q[title_contains]']")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should have a proper label" do
|
92
|
-
expect(body).to have_selector("label", text: "Title")
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should translate the label for text field" do
|
96
|
-
with_translation activerecord: {attributes: {post: {title: 'Name'}}} do
|
97
|
-
expect(body).to have_selector("label", text: "Name")
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should select the option which is currently being filtered" do
|
102
|
-
scope = Post.search title_starts_with: "foo"
|
103
|
-
body = Capybara.string(render_filter scope, title: {})
|
104
|
-
expect(body).to have_selector("option[value=title_starts_with][selected=selected]", text: "Starts with")
|
105
|
-
end
|
106
|
-
|
107
|
-
context "with filters options" do
|
108
|
-
let(:body) { Capybara.string(filter :title, filters: [:contains, :starts_with]) }
|
109
|
-
|
110
|
-
it "should generate provided options for filter select" do
|
111
|
-
expect(body).to have_selector("option[value=title_contains]", text: "Contains")
|
112
|
-
expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should not generate a select option for ends with" do
|
116
|
-
expect(body).not_to have_selector("option[value=title_ends_with]")
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context "with predicate" do
|
121
|
-
%w[eq equals cont contains start starts_with end ends_with].each do |predicate|
|
122
|
-
describe "'#{predicate}'" do
|
123
|
-
let(:body) { Capybara.string(filter :"title_#{predicate}") }
|
124
|
-
|
125
|
-
it "shouldn't include a select field" do
|
126
|
-
expect(body).not_to have_selector("select")
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should build correctly" do
|
130
|
-
expect(body).to have_selector("input[name='q[title_#{predicate}]']")
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "text attribute" do
|
138
|
-
let(:body) { Capybara.string(filter :body) }
|
139
|
-
|
140
|
-
it "should generate a search field for a text attribute" do
|
141
|
-
expect(body).to have_selector("input[name='q[body_contains]']")
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should have a proper label" do
|
145
|
-
expect(body).to have_selector("label", text: "Body")
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
describe "string attribute, as a select" do
|
150
|
-
let(:body) { filter :title, as: :select }
|
151
|
-
let(:builder) { ActiveAdmin::Inputs::Filters::SelectInput }
|
152
|
-
|
153
|
-
context "when loading collection from DB" do
|
154
|
-
it "should use pluck for efficiency" do
|
155
|
-
expect_any_instance_of(builder).to receive(:pluck_column) { [] }
|
156
|
-
body
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should remove original ordering to prevent PostgreSQL error" do
|
160
|
-
expect(scope.object.klass).to receive(:reorder).with('title asc') {
|
161
|
-
m = double distinct: double(pluck: ['A Title'])
|
162
|
-
expect(m.distinct).to receive(:pluck).with :title
|
163
|
-
m
|
164
|
-
}
|
165
|
-
body
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
describe "date attribute" do
|
171
|
-
let(:body) { Capybara.string(filter :published_date) }
|
172
|
-
|
173
|
-
it "should generate a date greater than" do
|
174
|
-
expect(body).to have_selector("input.datepicker[name='q[published_date_gteq]']")
|
175
|
-
end
|
176
|
-
it "should generate a date less than" do
|
177
|
-
expect(body).to have_selector("input.datepicker[name='q[published_date_lteq]']")
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
describe "datetime attribute" do
|
182
|
-
let(:body) { Capybara.string(filter :created_at) }
|
183
|
-
|
184
|
-
it "should generate a date greater than" do
|
185
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_gteq_datetime]']")
|
186
|
-
end
|
187
|
-
it "should generate a date less than" do
|
188
|
-
expect(body).to have_selector("input.datepicker[name='q[created_at_lteq_datetime]']")
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe "integer attribute" do
|
193
|
-
context "without options" do
|
194
|
-
let(:body) { Capybara.string(filter :id) }
|
195
|
-
|
196
|
-
it "should generate a select option for equal to" do
|
197
|
-
expect(body).to have_selector("option[value=id_equals]", text: "Equals")
|
198
|
-
end
|
199
|
-
it "should generate a select option for greater than" do
|
200
|
-
expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
|
201
|
-
end
|
202
|
-
it "should generate a select option for less than" do
|
203
|
-
expect(body).to have_selector("option[value=id_less_than]", text: "Less than")
|
204
|
-
end
|
205
|
-
it "should generate a text field for input" do
|
206
|
-
expect(body).to have_selector("input[name='q[id_equals]']")
|
207
|
-
end
|
208
|
-
it "should select the option which is currently being filtered" do
|
209
|
-
scope = Post.search id_greater_than: 1
|
210
|
-
body = Capybara.string(render_filter scope, id: {})
|
211
|
-
expect(body).to have_selector("option[value=id_greater_than][selected=selected]", text: "Greater than")
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
context "with filters options" do
|
216
|
-
let(:body) { Capybara.string(filter :id, filters: [:equals, :greater_than]) }
|
217
|
-
|
218
|
-
it "should generate provided options for filter select" do
|
219
|
-
expect(body).to have_selector("option[value=id_equals]", text: "Equals")
|
220
|
-
expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
|
221
|
-
end
|
222
|
-
|
223
|
-
it "should not generate a select option for less than" do
|
224
|
-
expect(body).not_to have_selector("option[value=id_less_than]")
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
describe "boolean attribute" do
|
230
|
-
context "boolean datatypes" do
|
231
|
-
let(:body) { Capybara.string(filter :starred) }
|
232
|
-
|
233
|
-
it "should generate a select" do
|
234
|
-
expect(body).to have_selector("select[name='q[starred_eq]']")
|
235
|
-
end
|
236
|
-
it "should set the default text to 'Any'" do
|
237
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
238
|
-
end
|
239
|
-
it "should create an option for true and false" do
|
240
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
241
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should translate the label for boolean field" do
|
245
|
-
with_translation activerecord: {attributes: {post: {starred: 'Faved'}}} do
|
246
|
-
expect(body).to have_selector("label", text: "Faved")
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
context "non-boolean data types" do
|
252
|
-
let(:body) { Capybara.string(filter :title_present, as: :boolean) }
|
253
|
-
|
254
|
-
it "should generate a select" do
|
255
|
-
expect(body).to have_selector("select[name='q[title_present]']")
|
256
|
-
end
|
257
|
-
it "should set the default text to 'Any'" do
|
258
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
259
|
-
end
|
260
|
-
it "should create an option for true and false" do
|
261
|
-
expect(body).to have_selector("option[value=true]", text: "Yes")
|
262
|
-
expect(body).to have_selector("option[value=false]", text: "No")
|
263
|
-
end
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
describe "belongs_to" do
|
268
|
-
before do
|
269
|
-
@john = User.create first_name: "John", last_name: "Doe", username: "john_doe"
|
270
|
-
@jane = User.create first_name: "Jane", last_name: "Doe", username: "jane_doe"
|
271
|
-
end
|
272
|
-
|
273
|
-
context "when given as the _id attribute name" do
|
274
|
-
let(:body) { Capybara.string(filter :author_id) }
|
275
|
-
|
276
|
-
it "should generate a numeric filter" do
|
277
|
-
expect(body).to have_selector("label", text: "Author") # really this should be Author ID :/)
|
278
|
-
expect(body).to have_selector("option[value=author_id_less_than]")
|
279
|
-
expect(body).to have_selector("input#q_author_id[name='q[author_id_equals]']")
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
context "when given as the name of the relationship" do
|
284
|
-
let(:body) { Capybara.string(filter :author) }
|
285
|
-
|
286
|
-
it "should generate a select" do
|
287
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
288
|
-
end
|
289
|
-
it "should set the default text to 'Any'" do
|
290
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
291
|
-
end
|
292
|
-
it "should create an option for each related object" do
|
293
|
-
expect(body).to have_selector("option[value='#{@john.id}']", text: "John Doe")
|
294
|
-
expect(body).to have_selector("option[value='#{@jane.id}']", text: "Jane Doe")
|
295
|
-
end
|
296
|
-
|
297
|
-
context "with a proc" do
|
298
|
-
let :body do
|
299
|
-
Capybara.string(filter :title, as: :select, collection: proc{ ['Title One', 'Title Two'] })
|
300
|
-
end
|
301
|
-
|
302
|
-
it "should use call the proc as the collection" do
|
303
|
-
expect(body).to have_selector("option", text: "Title One")
|
304
|
-
expect(body).to have_selector("option", text: "Title Two")
|
305
|
-
end
|
306
|
-
|
307
|
-
it "should render the collection in the context of the view" do
|
308
|
-
body = Capybara.string(filter(:title, as: :select, collection: proc{[a_helper_method]}))
|
309
|
-
expect(body).to have_selector("option", text: "A Helper Method")
|
310
|
-
end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
context "when given the name of relationship with a primary key other than id" do
|
315
|
-
let(:resource_klass) {
|
316
|
-
Class.new(Post) do
|
317
|
-
belongs_to :kategory, class_name: "Category", primary_key: :name, foreign_key: :title
|
318
|
-
|
319
|
-
def self.name
|
320
|
-
"SuperPost"
|
321
|
-
end
|
322
|
-
end
|
323
|
-
}
|
324
|
-
|
325
|
-
let(:scope) do
|
326
|
-
resource_klass.search
|
327
|
-
end
|
328
|
-
|
329
|
-
let(:body) { Capybara.string(filter :kategory) }
|
330
|
-
|
331
|
-
it "should use the association primary key" do
|
332
|
-
expect(body).to have_selector("select[name='q[kategory_name_eq]']")
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
context "as check boxes" do
|
337
|
-
let(:body) { Capybara.string(filter :author, as: :check_boxes) }
|
338
|
-
|
339
|
-
it "should create a check box for each related object" do
|
340
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
341
|
-
expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
|
342
|
-
end
|
343
|
-
end
|
344
|
-
|
345
|
-
context "when polymorphic relationship" do
|
346
|
-
let(:scope) { ActiveAdmin::Comment.search }
|
347
|
-
it "should raise an error if a collection isn't provided" do
|
348
|
-
expect { filter :resource }.to raise_error \
|
349
|
-
Formtastic::PolymorphicInputWithoutCollectionError
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
context "when using a custom foreign key" do
|
354
|
-
let(:scope) { Post.search }
|
355
|
-
let(:body) { Capybara.string(filter :category) }
|
356
|
-
it "should ignore that foreign key and let Ransack handle it" do
|
357
|
-
expect(Post.reflect_on_association(:category).foreign_key).to eq :custom_category_id
|
358
|
-
expect(body).to have_selector("select[name='q[category_id_eq]']")
|
359
|
-
end
|
360
|
-
end
|
361
|
-
end # belongs to
|
362
|
-
|
363
|
-
describe "has_and_belongs_to_many" do
|
364
|
-
skip "add HABTM models so this can be tested"
|
365
|
-
end
|
366
|
-
|
367
|
-
describe "has_many :through" do
|
368
|
-
# Setup an ActionView::Base object which can be used for
|
369
|
-
# generating the form for.
|
370
|
-
let(:helpers) do
|
371
|
-
view = action_view
|
372
|
-
def view.collection_path
|
373
|
-
"/categories"
|
374
|
-
end
|
375
|
-
|
376
|
-
def view.protect_against_forgery?
|
377
|
-
false
|
378
|
-
end
|
379
|
-
|
380
|
-
def view.a_helper_method
|
381
|
-
"A Helper Method"
|
382
|
-
end
|
383
|
-
|
384
|
-
view
|
385
|
-
end
|
386
|
-
let(:scope) { Category.search }
|
387
|
-
|
388
|
-
let!(:john) { User.create first_name: "John", last_name: "Doe", username: "john_doe" }
|
389
|
-
let!(:jane) { User.create first_name: "Jane", last_name: "Doe", username: "jane_doe" }
|
390
|
-
|
391
|
-
context "when given as the name of the relationship" do
|
392
|
-
let(:body) { Capybara.string(filter :authors) }
|
393
|
-
|
394
|
-
it "should generate a select" do
|
395
|
-
expect(body).to have_selector("select[name='q[posts_author_id_eq]']")
|
396
|
-
end
|
397
|
-
|
398
|
-
it "should set the default text to 'Any'" do
|
399
|
-
expect(body).to have_selector("option[value='']", text: "Any")
|
400
|
-
end
|
401
|
-
|
402
|
-
it "should create an option for each related object" do
|
403
|
-
expect(body).to have_selector("option[value='#{john.id}']", text: "John Doe")
|
404
|
-
expect(body).to have_selector("option[value='#{jane.id}']", text: "Jane Doe")
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
context "as check boxes" do
|
409
|
-
let(:body) { Capybara.string(filter :authors, as: :check_boxes) }
|
410
|
-
|
411
|
-
it "should create a check box for each related object" do
|
412
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{john.id}']")
|
413
|
-
expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{jane.id}']")
|
414
|
-
end
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
|
-
describe "conditional display" do
|
419
|
-
[:if, :unless].each do |verb|
|
420
|
-
should = verb == :if ? "should" : "shouldn't"
|
421
|
-
if_true = verb == :if ? :to : :to_not
|
422
|
-
if_false = verb == :if ? :to_not : :to
|
423
|
-
context "with #{verb.inspect} proc" do
|
424
|
-
it "#{should} be displayed if true" do
|
425
|
-
body = Capybara.string(filter :body, verb => proc{ true })
|
426
|
-
expect(body).send if_true, have_selector("input[name='q[body_contains]']")
|
427
|
-
end
|
428
|
-
it "#{should} be displayed if false" do
|
429
|
-
body = Capybara.string(filter :body, verb => proc{ false })
|
430
|
-
expect(body).send if_false, have_selector("input[name='q[body_contains]']")
|
431
|
-
end
|
432
|
-
it "should still be hidden on the second render" do
|
433
|
-
filters = {body: { verb => proc{ verb == :unless }}}
|
434
|
-
2.times do
|
435
|
-
body = Capybara.string(render_filter scope, filters)
|
436
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
437
|
-
end
|
438
|
-
end
|
439
|
-
it "should successfully keep rendering other filters after one is hidden" do
|
440
|
-
filters = {body: { verb => proc{ verb == :unless }}, author: {}}
|
441
|
-
body = Capybara.string(render_filter scope, filters)
|
442
|
-
expect(body).not_to have_selector("input[name='q[body_contains]']")
|
443
|
-
expect(body).to have_selector("select[name='q[author_id_eq]']")
|
444
|
-
end
|
445
|
-
end
|
446
|
-
end
|
447
|
-
end
|
448
|
-
|
449
|
-
describe "custom search methods" do
|
450
|
-
|
451
|
-
it "should use the default type of the ransacker" do
|
452
|
-
body = Capybara.string(filter :custom_searcher_numeric)
|
453
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_equals]")
|
454
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_greater_than]")
|
455
|
-
expect(body).to have_selector("option[value=custom_searcher_numeric_less_than]")
|
456
|
-
end
|
457
|
-
|
458
|
-
it "should work as select" do
|
459
|
-
body = Capybara.string(filter :custom_title_searcher, as: :select, collection: ['foo'])
|
460
|
-
expect(body).to have_selector("select[name='q[custom_title_searcher_eq]']")
|
461
|
-
end
|
462
|
-
|
463
|
-
it "should work as string" do
|
464
|
-
body = Capybara.string(filter :custom_title_searcher, as: :string)
|
465
|
-
expect(body).to have_selector("option[value=custom_title_searcher_contains]")
|
466
|
-
expect(body).to have_selector("option[value=custom_title_searcher_starts_with]")
|
467
|
-
end
|
468
|
-
|
469
|
-
describe "custom date range search" do
|
470
|
-
let(:qteq) { "2010-10-01" }
|
471
|
-
let(:lteq) { "2010-10-02" }
|
472
|
-
let(:scope){ Post.search custom_created_at_searcher_gteq_datetime: qteq, custom_created_at_searcher_lteq_datetime: lteq }
|
473
|
-
let(:body) { Capybara.string(render_filter scope, custom_created_at_searcher: {as: :date_range}) }
|
474
|
-
|
475
|
-
it "should work as date_range" do
|
476
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='2010-10-01']")
|
477
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='2010-10-02']")
|
478
|
-
end
|
479
|
-
|
480
|
-
context "filter value can't be casted to date" do
|
481
|
-
let(:qteq) { "Ooops" }
|
482
|
-
let(:lteq) { "Ooops" }
|
483
|
-
|
484
|
-
it "should work display empty filter values" do
|
485
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='']")
|
486
|
-
expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='']")
|
487
|
-
end
|
488
|
-
end
|
489
|
-
|
490
|
-
end
|
491
|
-
end
|
492
|
-
|
493
|
-
describe "does not support some filter inputs" do
|
494
|
-
it "should fallback to use formtastic inputs" do
|
495
|
-
body = Capybara.string(filter :custom_title_searcher, as: :text)
|
496
|
-
expect(body).to have_selector("textarea[name='q[custom_title_searcher]']")
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
describe "blank option" do
|
501
|
-
context "for a select filter" do
|
502
|
-
it "should be there by default" do
|
503
|
-
body = Capybara.string(filter(:author))
|
504
|
-
expect(body).to have_selector("option", text: "Any")
|
505
|
-
end
|
506
|
-
it "should be able to be disabled" do
|
507
|
-
body = Capybara.string(filter(:author, include_blank: false))
|
508
|
-
expect(body).to_not have_selector("option", text: "Any")
|
509
|
-
end
|
510
|
-
end
|
511
|
-
|
512
|
-
context "for a multi-select filter" do
|
513
|
-
it "should not be there by default" do
|
514
|
-
body = Capybara.string(filter(:author, multiple: true))
|
515
|
-
expect(body).to_not have_selector("option", text: "Any")
|
516
|
-
end
|
517
|
-
it "should be able to be enabled" do
|
518
|
-
body = Capybara.string(filter(:author, multiple: true, include_blank: true))
|
519
|
-
expect(body).to have_selector("option", text: "Any")
|
520
|
-
end
|
521
|
-
end
|
522
|
-
end
|
523
|
-
|
524
|
-
end
|
@@ -1,128 +0,0 @@
|
|
1
|
-
require 'rails_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveAdmin::Filters::ResourceExtension do
|
4
|
-
|
5
|
-
let(:resource) do
|
6
|
-
namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
|
7
|
-
namespace.register(Post)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should return a Hash" do
|
11
|
-
expect(resource.filters).to be_a Hash
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should return the defaults if no filters are set" do
|
15
|
-
expect(resource.filters.keys).to match_array([
|
16
|
-
:author, :body, :category, :created_at, :custom_created_at_searcher, :custom_title_searcher, :custom_searcher_numeric, :position, :published_date, :starred, :taggings, :title, :updated_at, :foo_id
|
17
|
-
])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should not have defaults when filters are disabled on the resource" do
|
21
|
-
resource.filters = false
|
22
|
-
expect(resource.filters).to be_empty
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should not have defaults when the filters are disabled on the namespace" do
|
26
|
-
resource.namespace.filters = false
|
27
|
-
expect(resource.filters).to be_empty
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should not have defaults when the filters are disabled on the application" do
|
31
|
-
resource.namespace.application.filters = false
|
32
|
-
expect(resource.filters).to be_empty
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should return the defaults without associations if default association filters are disabled on the namespace" do
|
36
|
-
resource.namespace.include_default_association_filters = false
|
37
|
-
expect(resource.filters.keys).to match_array([
|
38
|
-
:body, :created_at, :custom_created_at_searcher, :custom_title_searcher, :custom_searcher_numeric, :position, :published_date, :starred, :title, :updated_at, :foo_id
|
39
|
-
])
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "removing a filter" do
|
43
|
-
it "should work" do
|
44
|
-
expect(resource.filters.keys).to include :author
|
45
|
-
resource.remove_filter :author
|
46
|
-
expect(resource.filters.keys).to_not include :author
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should work as a string" do
|
50
|
-
expect(resource.filters.keys).to include :author
|
51
|
-
resource.remove_filter 'author'
|
52
|
-
expect(resource.filters.keys).to_not include :author
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should be lazy" do
|
56
|
-
expect(resource).to_not receive :default_filters # this hits the DB
|
57
|
-
resource.remove_filter :author
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should not prevent the default filters from being added" do
|
61
|
-
resource.remove_filter :author
|
62
|
-
expect(resource.filters).to_not be_empty
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should raise an exception when filters are disabled" do
|
66
|
-
resource.filters = false
|
67
|
-
expect{ resource.remove_filter :author }.to raise_error ActiveAdmin::Filters::Disabled
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe "removing a multiple filters inline" do
|
72
|
-
it "should work" do
|
73
|
-
expect(resource.filters.keys).to include :author, :body
|
74
|
-
resource.remove_filter :author, :body
|
75
|
-
expect(resource.filters.keys).to_not include :author, :body
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "adding a filter" do
|
80
|
-
it "should work" do
|
81
|
-
resource.add_filter :title
|
82
|
-
expect(resource.filters).to eq title: {}
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should work as a string" do
|
86
|
-
resource.add_filter 'title'
|
87
|
-
expect(resource.filters).to eq title: {}
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should work with specified options" do
|
91
|
-
resource.add_filter :title, as: :string
|
92
|
-
expect(resource.filters).to eq title: {as: :string}
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should override an existing filter" do
|
96
|
-
resource.add_filter :title, one: :two
|
97
|
-
resource.add_filter :title, three: :four
|
98
|
-
|
99
|
-
expect(resource.filters).to eq title: {three: :four}
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should preserve default filters" do
|
103
|
-
resource.preserve_default_filters!
|
104
|
-
resource.add_filter :count, as: :string
|
105
|
-
|
106
|
-
expect(resource.filters.keys).to match_array([
|
107
|
-
:author, :body, :category, :count, :created_at, :custom_created_at_searcher, :custom_title_searcher, :custom_searcher_numeric, :position, :published_date, :starred, :taggings, :title, :updated_at, :foo_id
|
108
|
-
])
|
109
|
-
end
|
110
|
-
|
111
|
-
it "should raise an exception when filters are disabled" do
|
112
|
-
resource.filters = false
|
113
|
-
expect{ resource.add_filter :title }.to raise_error ActiveAdmin::Filters::Disabled
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should reset filters" do
|
118
|
-
resource.add_filter :title
|
119
|
-
expect(resource.filters.size).to eq 1
|
120
|
-
resource.reset_filters!
|
121
|
-
expect(resource.filters.size).to be > 1
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should add a sidebar section for the filters" do
|
125
|
-
expect(resource.sidebar_sections.first.name).to eq "filters"
|
126
|
-
end
|
127
|
-
|
128
|
-
end
|