activeadmin 1.3.1 → 1.4.0
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +467 -0
- data/.gitignore +2 -5
- data/.rspec +1 -0
- data/.rspec_parallel +2 -0
- data/.rubocop.yml +25 -7
- data/.simplecov +4 -6
- data/CHANGELOG.md +175 -83
- data/CODE_OF_CONDUCT.md +64 -12
- data/CONTRIBUTING.md +77 -40
- data/Gemfile +7 -55
- data/Gemfile.common +53 -0
- data/Gemfile.lock +431 -0
- data/README.md +39 -18
- data/Rakefile +1 -32
- data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
- data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
- data/bin/install_chromedriver.sh +17 -0
- 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/it.yml +4 -0
- 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/zh-CN.yml +33 -5
- data/config/mdl_style.rb +2 -0
- data/cucumber.yml +7 -3
- data/docs/.gitignore +1 -0
- 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 +36 -17
- data/docs/2-resource-customization.md +8 -3
- data/docs/3-index-pages.md +17 -0
- 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/5-forms.md +16 -2
- data/docs/8-custom-actions.md +11 -0
- 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/stylesheets/main.css +26 -2
- data/gemfiles/rails_42.gemfile +2 -2
- data/gemfiles/rails_42.gemfile.lock +410 -0
- data/gemfiles/rails_50.gemfile +2 -2
- data/gemfiles/rails_50.gemfile.lock +424 -0
- data/gemfiles/rails_51.gemfile +2 -2
- data/gemfiles/rails_51.gemfile.lock +423 -0
- data/lib/active_admin/abstract_view_factory.rb +13 -51
- data/lib/active_admin/application.rb +42 -142
- data/lib/active_admin/application_settings.rb +39 -0
- data/lib/active_admin/base_controller/authorization.rb +1 -2
- data/lib/active_admin/batch_actions/controller.rb +1 -1
- data/lib/active_admin/dependency.rb +8 -0
- data/lib/active_admin/deprecation.rb +0 -25
- 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/filters/active_filter.rb +1 -1
- data/lib/active_admin/filters/resource_extension.rb +1 -1
- data/lib/active_admin/form_builder.rb +95 -60
- data/lib/active_admin/inputs/datepicker_input.rb +7 -0
- data/lib/active_admin/menu.rb +2 -8
- data/lib/active_admin/menu_item.rb +3 -31
- data/lib/active_admin/namespace.rb +18 -6
- data/lib/active_admin/namespace_settings.rb +107 -0
- data/lib/active_admin/orm/active_record/comments.rb +11 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +1 -1
- data/lib/active_admin/resource/action_items.rb +6 -1
- data/lib/active_admin/resource_controller/decorators.rb +3 -3
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/router.rb +89 -84
- data/lib/active_admin/scope.rb +5 -1
- data/lib/active_admin/settings_node.rb +19 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +2 -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/scopes.rb +11 -4
- data/lib/active_admin/views/components/sidebar.rb +13 -0
- data/lib/active_admin/views/components/site_title.rb +5 -6
- data/lib/active_admin/views/components/table_for.rb +1 -10
- data/lib/active_admin/views/components/tabs.rb +4 -1
- data/lib/active_admin/views/footer.rb +2 -6
- 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 +6 -6
- data/lib/active_admin/views/pages/base.rb +27 -53
- data/lib/active_admin/views/tabbed_navigation.rb +4 -59
- data/lib/bug_report_templates/active_admin_master.rb +2 -3
- data/tasks/application_generator.rb +48 -0
- data/tasks/gemfiles.rake +8 -0
- data/tasks/lint.rake +96 -7
- data/tasks/local.rake +10 -8
- data/tasks/test.rake +30 -16
- metadata +26 -440
- data/.travis.yml +0 -51
- 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_52.gemfile +0 -11
- data/lib/active_admin/helpers/settings.rb +0 -114
- 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/parallel_tests.rake +0 -66
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
RSpec.describe ActiveAdmin::Resource::BelongsTo do
|
|
4
|
-
before do
|
|
5
|
-
load_resources do
|
|
6
|
-
ActiveAdmin.register User
|
|
7
|
-
ActiveAdmin.register Post do belongs_to :user end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
let(:namespace) { ActiveAdmin.application.namespace(:admin) }
|
|
12
|
-
let(:user_config){ ActiveAdmin.register User }
|
|
13
|
-
let(:post_config){ ActiveAdmin.register Post do belongs_to :user end }
|
|
14
|
-
let(:belongs_to){ post_config.belongs_to_config }
|
|
15
|
-
|
|
16
|
-
it "should have an owner" do
|
|
17
|
-
expect(belongs_to.owner).to eq post_config
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe "finding the target" do
|
|
21
|
-
context "when the resource has been registered" do
|
|
22
|
-
it "should return the target resource" do
|
|
23
|
-
expect(belongs_to.target).to eq user_config
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
context "when the resource has not been registered" do
|
|
28
|
-
let(:belongs_to){ ActiveAdmin::Resource::BelongsTo.new post_config, :missing }
|
|
29
|
-
|
|
30
|
-
it "should raise a ActiveAdmin::BelongsTo::TargetNotFound" do
|
|
31
|
-
expect {
|
|
32
|
-
belongs_to.target
|
|
33
|
-
}.to raise_error(ActiveAdmin::Resource::BelongsTo::TargetNotFound)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
context "when the resource is on a namespace" do
|
|
38
|
-
let(:blog_post_config){ ActiveAdmin.register Blog::Post do; end }
|
|
39
|
-
let(:belongs_to) { ActiveAdmin::Resource::BelongsTo.new blog_post_config, :blog_author, class_name: "Blog::Author" }
|
|
40
|
-
before do
|
|
41
|
-
class Blog::Author
|
|
42
|
-
include ActiveModel::Naming
|
|
43
|
-
end
|
|
44
|
-
@blog_author_config = ActiveAdmin.register Blog::Author do; end
|
|
45
|
-
end
|
|
46
|
-
it "should return the target resource" do
|
|
47
|
-
expect(belongs_to.target).to eq @blog_author_config
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should be optional" do
|
|
53
|
-
belongs_to = ActiveAdmin::Resource::BelongsTo.new post_config, :user, optional: true
|
|
54
|
-
expect(belongs_to).to be_optional
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
describe "controller" do
|
|
58
|
-
let(:controller) { post_config.controller.new }
|
|
59
|
-
let(:http_params) { {user_id: user.id} }
|
|
60
|
-
let(:user) { User.create! }
|
|
61
|
-
|
|
62
|
-
before do
|
|
63
|
-
request = double 'Request', format: 'application/json'
|
|
64
|
-
allow(controller).to receive(:params) { ActionController::Parameters.new(http_params) }
|
|
65
|
-
allow(controller).to receive(:request){ request }
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it 'should be able to access the collection' do
|
|
69
|
-
expect(controller.send :collection).to be_a ActiveRecord::Relation
|
|
70
|
-
|
|
71
|
-
end
|
|
72
|
-
it 'should be able to build a new resource' do
|
|
73
|
-
expect(controller.send :build_resource).to be_a Post
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
RSpec.describe ActiveAdmin::CanCanAdapter do
|
|
4
|
-
|
|
5
|
-
describe "full integration" do
|
|
6
|
-
|
|
7
|
-
let(:application){ ActiveAdmin::Application.new }
|
|
8
|
-
let(:namespace){ ActiveAdmin::Namespace.new(application, "Admin") }
|
|
9
|
-
let(:resource){ namespace.register(Post) }
|
|
10
|
-
|
|
11
|
-
let :ability_class do
|
|
12
|
-
Class.new do
|
|
13
|
-
include CanCan::Ability
|
|
14
|
-
|
|
15
|
-
def initialize(user)
|
|
16
|
-
can :read, Post
|
|
17
|
-
cannot :update, Post
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
let(:auth) { namespace.authorization_adapter.new(resource, double) }
|
|
24
|
-
|
|
25
|
-
before do
|
|
26
|
-
namespace.authorization_adapter = ActiveAdmin::CanCanAdapter
|
|
27
|
-
namespace.cancan_ability_class = ability_class
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should initialize the ability stored in the namespace configuration" do
|
|
31
|
-
expect(auth.authorized?(:read, Post)).to eq true
|
|
32
|
-
expect(auth.authorized?(:update, Post)).to eq false
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "should scope the collection with accessible_by" do
|
|
36
|
-
collection = double
|
|
37
|
-
expect(collection).to receive(:accessible_by).with(auth.cancan_ability, :edit)
|
|
38
|
-
auth.scope_collection(collection, :edit)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
end
|
data/spec/unit/comments_spec.rb
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
RSpec.describe "Comments" do
|
|
4
|
-
let(:application) { ActiveAdmin::Application.new }
|
|
5
|
-
|
|
6
|
-
describe ActiveAdmin::Comment do
|
|
7
|
-
subject(:comment){ ActiveAdmin::Comment.new }
|
|
8
|
-
|
|
9
|
-
it "has valid Associations and Validations" do
|
|
10
|
-
expect(comment).to belong_to :resource
|
|
11
|
-
expect(comment).to belong_to :author
|
|
12
|
-
expect(comment).to validate_presence_of :resource
|
|
13
|
-
expect(comment).to validate_presence_of :body
|
|
14
|
-
expect(comment).to validate_presence_of :namespace
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
describe ".find_for_resource_in_namespace" do
|
|
18
|
-
let(:post) { Post.create!(title: "Hello World") }
|
|
19
|
-
let(:namespace_name) { "admin" }
|
|
20
|
-
|
|
21
|
-
before do
|
|
22
|
-
@comment = ActiveAdmin::Comment.create! resource: post,
|
|
23
|
-
body: "A Comment",
|
|
24
|
-
namespace: namespace_name
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should return a comment for the resource in the same namespace" do
|
|
28
|
-
expect(ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name)).to eq [@comment]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "should not return a comment for the same resource in a different namespace" do
|
|
32
|
-
ActiveAdmin.application.namespaces[:public] = ActiveAdmin.application.namespaces[:admin]
|
|
33
|
-
expect(ActiveAdmin::Comment.find_for_resource_in_namespace(post, 'public')).to eq []
|
|
34
|
-
ActiveAdmin.application.namespaces.instance_variable_get(:@namespaces).delete(:public)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should not return a comment for a different resource" do
|
|
38
|
-
another_post = Post.create! title: "Another Hello World"
|
|
39
|
-
expect(ActiveAdmin::Comment.find_for_resource_in_namespace(another_post, namespace_name)).to eq []
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should return the most recent comment first by default" do
|
|
43
|
-
another_comment = ActiveAdmin::Comment.create! resource: post,
|
|
44
|
-
body: "Another Comment",
|
|
45
|
-
namespace: namespace_name,
|
|
46
|
-
created_at: @comment.created_at + 20.minutes
|
|
47
|
-
|
|
48
|
-
yet_another_comment = ActiveAdmin::Comment.create! resource: post,
|
|
49
|
-
body: "Yet Another Comment",
|
|
50
|
-
namespace: namespace_name,
|
|
51
|
-
created_at: @comment.created_at + 10.minutes
|
|
52
|
-
|
|
53
|
-
comments = ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name)
|
|
54
|
-
expect(comments.size).to eq 3
|
|
55
|
-
expect(comments.first).to eq(@comment)
|
|
56
|
-
expect(comments.second).to eq(yet_another_comment)
|
|
57
|
-
expect(comments.last).to eq(another_comment)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
context "when custom ordering configured" do
|
|
61
|
-
around do |example|
|
|
62
|
-
previous_order = ActiveAdmin.application.comments_order
|
|
63
|
-
ActiveAdmin.application.comments_order = "created_at DESC"
|
|
64
|
-
|
|
65
|
-
example.call
|
|
66
|
-
|
|
67
|
-
ActiveAdmin.application.comments_order = previous_order
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should return the correctly ordered comments" do
|
|
71
|
-
another_comment = ActiveAdmin::Comment.create!(
|
|
72
|
-
resource: post,
|
|
73
|
-
body: "Another Comment",
|
|
74
|
-
namespace: namespace_name,
|
|
75
|
-
created_at: @comment.created_at + 20.minutes
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
comments = ActiveAdmin::Comment.find_for_resource_in_namespace(
|
|
79
|
-
post, namespace_name
|
|
80
|
-
)
|
|
81
|
-
expect(comments.size).to eq 2
|
|
82
|
-
expect(comments.first).to eq(another_comment)
|
|
83
|
-
expect(comments.last).to eq(@comment)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe ".resource_type" do
|
|
89
|
-
let(:post) { Post.create!(title: "Testing.") }
|
|
90
|
-
let(:post_decorator) { double 'PostDecorator' }
|
|
91
|
-
|
|
92
|
-
before do
|
|
93
|
-
allow(post_decorator).to receive(:model).and_return(post)
|
|
94
|
-
allow(post_decorator).to receive(:decorated?).and_return(true)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
context "when a decorated object is passed" do
|
|
98
|
-
let(:resource) { post_decorator }
|
|
99
|
-
|
|
100
|
-
it "returns undeorated object class string" do
|
|
101
|
-
expect(ActiveAdmin::Comment.resource_type resource).to eql 'Post'
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
context "when an undecorated object is passed" do
|
|
106
|
-
let(:resource) { post }
|
|
107
|
-
|
|
108
|
-
it "returns object class string" do
|
|
109
|
-
expect(ActiveAdmin::Comment.resource_type resource).to eql 'Post'
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
describe "Commenting on resource with string id" do
|
|
115
|
-
let(:tag) { Tag.create!(name: "cooltags") }
|
|
116
|
-
let(:namespace_name) { "admin" }
|
|
117
|
-
|
|
118
|
-
it "should allow commenting" do
|
|
119
|
-
comment = ActiveAdmin::Comment.create!(
|
|
120
|
-
resource: tag,
|
|
121
|
-
body: "Another Comment",
|
|
122
|
-
namespace: namespace_name)
|
|
123
|
-
|
|
124
|
-
expect(ActiveAdmin::Comment.find_for_resource_in_namespace(tag, namespace_name)).to eq [comment]
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
describe "commenting on child of STI resource" do
|
|
129
|
-
let(:publisher) { Publisher.create!(username: "tenderlove") }
|
|
130
|
-
let(:namespace_name) { "admin" }
|
|
131
|
-
|
|
132
|
-
it "should assign child class as commented resource" do
|
|
133
|
-
comment = ActiveAdmin::Comment.create!(
|
|
134
|
-
resource: publisher,
|
|
135
|
-
body: "Lorem Ipsum",
|
|
136
|
-
namespace: namespace_name)
|
|
137
|
-
|
|
138
|
-
expect(ActiveAdmin::Comment.find_for_resource_in_namespace(publisher, namespace_name).last.resource_type).
|
|
139
|
-
to eq("User")
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
describe ActiveAdmin::Comments::NamespaceHelper do
|
|
145
|
-
describe "#comments?" do
|
|
146
|
-
|
|
147
|
-
it "should have comments when the namespace allows comments" do
|
|
148
|
-
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
149
|
-
ns.comments = true
|
|
150
|
-
expect(ns.comments?).to eq true
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "should not have comments when the namespace does not allow comments" do
|
|
154
|
-
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
155
|
-
ns.comments = false
|
|
156
|
-
expect(ns.comments?).to eq false
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
describe ActiveAdmin::Comments::ResourceHelper do
|
|
162
|
-
it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
|
|
163
|
-
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
164
|
-
resource = ActiveAdmin::Resource.new(ns, Post)
|
|
165
|
-
expect(resource.comments).to eq nil
|
|
166
|
-
resource.comments = true
|
|
167
|
-
expect(resource.comments).to eq true
|
|
168
|
-
end
|
|
169
|
-
it "should disable comments if set to false" do
|
|
170
|
-
ns = ActiveAdmin::Namespace.new(application, :admin)
|
|
171
|
-
resource = ActiveAdmin::Resource.new(ns, Post)
|
|
172
|
-
resource.comments = false
|
|
173
|
-
expect(resource.comments?).to eq false
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
end
|
data/spec/unit/component_spec.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
class MockComponentClass < ActiveAdmin::Component; end
|
|
4
|
-
|
|
5
|
-
RSpec.describe ActiveAdmin::Component do
|
|
6
|
-
|
|
7
|
-
let(:component_class){ MockComponentClass }
|
|
8
|
-
let(:component){ component_class.new }
|
|
9
|
-
|
|
10
|
-
it "should be a subclass of an html div" do
|
|
11
|
-
expect(ActiveAdmin::Component.ancestors).to include(Arbre::HTML::Div)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "should render to a div, even as a subclass" do
|
|
15
|
-
expect(component.tag_name).to eq 'div'
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
RSpec.shared_examples_for "ActiveAdmin::Resource" do
|
|
2
|
-
describe "namespace" do
|
|
3
|
-
it "should return the namespace" do
|
|
4
|
-
expect(config.namespace).to eq(namespace)
|
|
5
|
-
end
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe "page_presenters" do
|
|
9
|
-
it "should return an empty hash by default" do
|
|
10
|
-
expect(config.page_presenters).to eq({})
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it { respond_to :controller_name }
|
|
15
|
-
it { respond_to :controller }
|
|
16
|
-
it { respond_to :route_prefix }
|
|
17
|
-
it { respond_to :route_collection_path }
|
|
18
|
-
it { respond_to :comments? }
|
|
19
|
-
it { respond_to :belongs_to? }
|
|
20
|
-
it { respond_to :action_items? }
|
|
21
|
-
it { respond_to :sidebar_sections? }
|
|
22
|
-
|
|
23
|
-
describe "Naming" do
|
|
24
|
-
it "implements #resource_label" do
|
|
25
|
-
expect { config.resource_label }.to_not raise_error
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "implements #plural_resource_label" do
|
|
29
|
-
expect { config.plural_resource_label }.to_not raise_error
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
describe "Menu" do
|
|
34
|
-
describe "#menu_item_options" do
|
|
35
|
-
|
|
36
|
-
it "initializes a new menu item with defaults" do
|
|
37
|
-
expect(config.menu_item_options[:label].call).to eq(config.plural_resource_label)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "initialize a new menu item with custom options" do
|
|
41
|
-
config.menu_item_options = { label: "Hello" }
|
|
42
|
-
expect(config.menu_item_options[:label]).to eq("Hello")
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe "#include_in_menu?" do
|
|
48
|
-
it "should be included in menu by default" do
|
|
49
|
-
expect(config.include_in_menu?).to eq(true)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should not be included in menu when menu set to false" do
|
|
53
|
-
config.menu_item_options = false
|
|
54
|
-
expect(config.include_in_menu?).to eq(false)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
RSpec.describe ActiveAdmin::Application do
|
|
4
|
-
let(:application){ ActiveAdmin::Application.new }
|
|
5
|
-
let(:controllers){ application.controllers_for_filters }
|
|
6
|
-
|
|
7
|
-
it 'controllers_for_filters' do
|
|
8
|
-
expect(application.controllers_for_filters).to eq [
|
|
9
|
-
ActiveAdmin::BaseController, ActiveAdmin::Devise::SessionsController,
|
|
10
|
-
ActiveAdmin::Devise::PasswordsController, ActiveAdmin::Devise::UnlocksController,
|
|
11
|
-
ActiveAdmin::Devise::RegistrationsController, ActiveAdmin::Devise::ConfirmationsController
|
|
12
|
-
]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
expected_actions = (
|
|
16
|
-
prefixes = %w(skip append prepend) << nil
|
|
17
|
-
positions = %w(before around after)
|
|
18
|
-
suffixes = %w(action)
|
|
19
|
-
base = %w()
|
|
20
|
-
if ActiveAdmin::Dependency.rails? '< 5.1.x'
|
|
21
|
-
suffixes += %w(filter)
|
|
22
|
-
base += %w(skip_filter skip_action_callback)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
prefixes.each_with_object(base) do |prefix, stack|
|
|
26
|
-
positions.each do |position|
|
|
27
|
-
suffixes.each do |suffix|
|
|
28
|
-
stack << [prefix, position, suffix].compact.join("_").to_sym
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
expected_actions.each do |action|
|
|
35
|
-
it action do
|
|
36
|
-
args = [:my_filter, { only: :show }]
|
|
37
|
-
controllers.each { |c| expect(c).to receive(action).with(args) }
|
|
38
|
-
application.public_send action, args
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
require 'rails_helper'
|
|
2
|
-
|
|
3
|
-
RSpec.describe ActiveAdmin::CSVBuilder do
|
|
4
|
-
|
|
5
|
-
describe '.default_for_resource using Post' do
|
|
6
|
-
let(:application){ ActiveAdmin::Application.new }
|
|
7
|
-
let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
|
|
8
|
-
let(:resource){ ActiveAdmin::Resource.new(namespace, Post, {}) }
|
|
9
|
-
let(:csv_builder) { ActiveAdmin::CSVBuilder.default_for_resource(resource).tap(&:exec_columns) }
|
|
10
|
-
|
|
11
|
-
it 'returns a default csv_builder for Post' do
|
|
12
|
-
expect(csv_builder).to be_a(ActiveAdmin::CSVBuilder)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it 'defines Id as the first column' do
|
|
16
|
-
expect(csv_builder.columns.first.name).to eq 'Id'
|
|
17
|
-
expect(csv_builder.columns.first.data).to eq :id
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "has Post's content_columns" do
|
|
21
|
-
csv_builder.columns[1..-1].each_with_index do |column, index|
|
|
22
|
-
expect(column.name).to eq resource.content_columns[index].to_s.humanize
|
|
23
|
-
expect(column.data).to eq resource.content_columns[index]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
context 'when column has a localized name' do
|
|
28
|
-
let(:localized_name) { 'Titulo' }
|
|
29
|
-
|
|
30
|
-
before do
|
|
31
|
-
allow(Post).to receive(:human_attribute_name).and_call_original
|
|
32
|
-
allow(Post).to receive(:human_attribute_name).with(:title){ localized_name }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it 'gets name from I18n' do
|
|
36
|
-
title_index = resource.content_columns.index(:title) + 1 # First col is always id
|
|
37
|
-
expect(csv_builder.columns[title_index].name).to eq localized_name
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context 'when empty' do
|
|
43
|
-
let(:builder){ ActiveAdmin::CSVBuilder.new.tap(&:exec_columns) }
|
|
44
|
-
|
|
45
|
-
it "should have no columns" do
|
|
46
|
-
expect(builder.columns).to eq []
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
context "with a symbol column (:title)" do
|
|
51
|
-
let(:builder) do
|
|
52
|
-
ActiveAdmin::CSVBuilder.new do
|
|
53
|
-
column :title
|
|
54
|
-
end.tap(&:exec_columns)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it "should have one column" do
|
|
58
|
-
expect(builder.columns.size).to eq 1
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe "the column" do
|
|
62
|
-
let(:column){ builder.columns.first }
|
|
63
|
-
|
|
64
|
-
it "should have a name of 'Title'" do
|
|
65
|
-
expect(column.name).to eq "Title"
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should have the data :title" do
|
|
69
|
-
expect(column.data).to eq :title
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context "with a block and title" do
|
|
75
|
-
let(:builder) do
|
|
76
|
-
ActiveAdmin::CSVBuilder.new do
|
|
77
|
-
column "My title" do
|
|
78
|
-
# nothing
|
|
79
|
-
end
|
|
80
|
-
end.tap(&:exec_columns)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "should have one column" do
|
|
84
|
-
expect(builder.columns.size).to eq 1
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe "the column" do
|
|
88
|
-
let(:column){ builder.columns.first }
|
|
89
|
-
|
|
90
|
-
it "should have a name of 'My title'" do
|
|
91
|
-
expect(column.name).to eq "My title"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "should have the data :title" do
|
|
95
|
-
expect(column.data).to be_an_instance_of(Proc)
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
context "with a humanize_name column option" do
|
|
101
|
-
context "with symbol column name" do
|
|
102
|
-
let(:builder) do
|
|
103
|
-
ActiveAdmin::CSVBuilder.new do
|
|
104
|
-
column :my_title, humanize_name: false
|
|
105
|
-
end.tap(&:exec_columns)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
describe "the column" do
|
|
109
|
-
let(:column){ builder.columns.first }
|
|
110
|
-
|
|
111
|
-
it "should have a name of 'my_title'" do
|
|
112
|
-
expect(column.name).to eq "my_title"
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
context "with string column name" do
|
|
118
|
-
let(:builder) do
|
|
119
|
-
ActiveAdmin::CSVBuilder.new do
|
|
120
|
-
column "my_title", humanize_name: false
|
|
121
|
-
end.tap(&:exec_columns)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
describe "the column" do
|
|
125
|
-
let(:column){ builder.columns.first }
|
|
126
|
-
|
|
127
|
-
it "should have a name of 'my_title'" do
|
|
128
|
-
expect(column.name).to eq "my_title"
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
context "with a separator" do
|
|
135
|
-
let(:builder) do
|
|
136
|
-
ActiveAdmin::CSVBuilder.new(col_sep: ";").tap(&:exec_columns)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should have proper separator" do
|
|
140
|
-
expect(builder.options).to eq({col_sep: ";"})
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
context "with humanize_name option" do
|
|
145
|
-
let(:builder) do
|
|
146
|
-
ActiveAdmin::CSVBuilder.new(humanize_name: false) do
|
|
147
|
-
column :my_title
|
|
148
|
-
end.tap(&:exec_columns)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
describe "the column" do
|
|
152
|
-
let(:column){ builder.columns.first }
|
|
153
|
-
|
|
154
|
-
it "should have humanize_name option set" do
|
|
155
|
-
expect(column.options).to eq humanize_name: false
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it "should have a name of 'my_title'" do
|
|
159
|
-
expect(column.name).to eq "my_title"
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
context "with csv_options" do
|
|
165
|
-
let(:builder) do
|
|
166
|
-
ActiveAdmin::CSVBuilder.new(force_quotes: true).tap(&:exec_columns)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "should have proper separator" do
|
|
170
|
-
expect(builder.options).to eq({force_quotes: true})
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
context "with access to the controller" do
|
|
175
|
-
let(:dummy_view_context) { double(controller: dummy_controller) }
|
|
176
|
-
let(:dummy_controller) { double(names: %w(title summary updated_at created_at))}
|
|
177
|
-
let(:builder) do
|
|
178
|
-
ActiveAdmin::CSVBuilder.new do
|
|
179
|
-
column "id"
|
|
180
|
-
controller.names.each do |name|
|
|
181
|
-
column(name)
|
|
182
|
-
end
|
|
183
|
-
end.tap{ |b| b.exec_columns(dummy_view_context) }
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should build columns provided by the controller" do
|
|
187
|
-
expect(builder.columns.map(&:data)).to match_array([:id, :title, :summary, :updated_at, :created_at])
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
context "build csv using the supplied order" do
|
|
192
|
-
before do
|
|
193
|
-
@post1 = Post.create!(title: "Hello1", published_date: Date.today - 2.day)
|
|
194
|
-
@post2 = Post.create!(title: "Hello2", published_date: Date.today - 1.day)
|
|
195
|
-
end
|
|
196
|
-
let(:dummy_controller) {
|
|
197
|
-
class DummyController
|
|
198
|
-
def find_collection(*)
|
|
199
|
-
collection
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
def collection
|
|
203
|
-
Post.order('published_date DESC')
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def apply_decorator(resource)
|
|
207
|
-
resource
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def view_context
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
DummyController.new
|
|
214
|
-
}
|
|
215
|
-
let(:builder) do
|
|
216
|
-
ActiveAdmin::CSVBuilder.new do
|
|
217
|
-
column "id"
|
|
218
|
-
column "title"
|
|
219
|
-
column "published_date"
|
|
220
|
-
end
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
it "should generate data with the supplied order" do
|
|
224
|
-
expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post2.id }
|
|
225
|
-
expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post1.id }
|
|
226
|
-
builder.build dummy_controller, []
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
it "should generate data ignoring pagination" do
|
|
230
|
-
expect(dummy_controller).to receive(:find_collection).
|
|
231
|
-
with(except: :pagination).once.
|
|
232
|
-
and_call_original
|
|
233
|
-
expect(builder).to receive(:build_row).and_return([]).twice
|
|
234
|
-
builder.build dummy_controller, []
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
it "should disable the ActiveRecord query cache" do
|
|
238
|
-
expect(builder).to receive(:build_row).twice do
|
|
239
|
-
expect(ActiveRecord::Base.connection.query_cache_enabled).to be_falsy
|
|
240
|
-
[]
|
|
241
|
-
end
|
|
242
|
-
ActiveRecord::Base.cache do
|
|
243
|
-
builder.build dummy_controller, []
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
context "build csv using specified encoding and encoding_options" do
|
|
249
|
-
let(:dummy_controller) do
|
|
250
|
-
class DummyController
|
|
251
|
-
def find_collection(*)
|
|
252
|
-
collection
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
def collection
|
|
256
|
-
Post
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
def apply_decorator(resource)
|
|
260
|
-
resource
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
def view_context
|
|
264
|
-
end
|
|
265
|
-
end
|
|
266
|
-
DummyController.new
|
|
267
|
-
end
|
|
268
|
-
let(:encoding) { Encoding::ASCII }
|
|
269
|
-
let(:opts) { {} }
|
|
270
|
-
let(:builder) do
|
|
271
|
-
ActiveAdmin::CSVBuilder.new(encoding: encoding, encoding_options: opts) do
|
|
272
|
-
column "おはようございます"
|
|
273
|
-
column "title"
|
|
274
|
-
end
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
context "Shift-JIS with options" do
|
|
278
|
-
let(:encoding) { Encoding::Shift_JIS }
|
|
279
|
-
let(:opts) { { invalid: :replace, undef: :replace, replace: "?" } }
|
|
280
|
-
|
|
281
|
-
it "encodes the CSV" do
|
|
282
|
-
receiver = []
|
|
283
|
-
builder.build dummy_controller, receiver
|
|
284
|
-
line = receiver.last
|
|
285
|
-
expect(line.encoding).to eq(encoding)
|
|
286
|
-
end
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
context "ASCII with options" do
|
|
290
|
-
let(:encoding) { Encoding::ASCII }
|
|
291
|
-
let(:opts) do
|
|
292
|
-
{ invalid: :replace, undef: :replace, replace: "__REPLACED__" }
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
it "encodes the CSV without errors" do
|
|
296
|
-
receiver = []
|
|
297
|
-
builder.build dummy_controller, receiver
|
|
298
|
-
line = receiver.last
|
|
299
|
-
expect(line.encoding).to eq(encoding)
|
|
300
|
-
expect(line).to include("__REPLACED__")
|
|
301
|
-
end
|
|
302
|
-
end
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
skip '#exec_columns'
|
|
306
|
-
|
|
307
|
-
skip '#build_row' do
|
|
308
|
-
it 'renders non-strings'
|
|
309
|
-
it 'encodes values correctly'
|
|
310
|
-
it 'passes custom encoding options to String#encode!'
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
end
|