activeadmin 1.0.0.pre4 → 1.0.0.pre5

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.

Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/.travis.yml +48 -26
  4. data/Appraisals +103 -0
  5. data/CHANGELOG.md +12 -1
  6. data/CONTRIBUTING.md +85 -32
  7. data/Gemfile +13 -38
  8. data/README.md +10 -26
  9. data/Rakefile +41 -9
  10. data/activeadmin.gemspec +7 -4
  11. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +10 -3
  12. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +11 -4
  13. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +8 -0
  14. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +1 -1
  15. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +14 -3
  16. data/app/assets/stylesheets/active_admin/_forms.scss +1 -0
  17. data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
  18. data/codecov.yml +23 -0
  19. data/config/locales/es-MX.yml +1 -1
  20. data/config/locales/es.yml +1 -1
  21. data/config/locales/ru.yml +1 -0
  22. data/config/locales/sk.yml +110 -0
  23. data/docs/0-installation.md +3 -0
  24. data/docs/1-general-configuration.md +11 -0
  25. data/docs/10-custom-pages.md +25 -0
  26. data/docs/11-decorators.md +3 -0
  27. data/docs/12-arbre-components.md +3 -0
  28. data/docs/13-authorization-adapter.md +3 -0
  29. data/docs/14-gotchas.md +19 -0
  30. data/docs/2-resource-customization.md +21 -2
  31. data/docs/3-index-pages.md +21 -0
  32. data/docs/3-index-pages/custom-index.md +3 -0
  33. data/docs/3-index-pages/index-as-block.md +3 -0
  34. data/docs/3-index-pages/index-as-blog.md +3 -0
  35. data/docs/3-index-pages/index-as-grid.md +3 -0
  36. data/docs/3-index-pages/index-as-table.md +22 -0
  37. data/docs/4-csv-format.md +15 -0
  38. data/docs/5-forms.md +7 -3
  39. data/docs/6-show-pages.md +3 -0
  40. data/docs/7-sidebars.md +3 -0
  41. data/docs/8-custom-actions.md +3 -0
  42. data/docs/9-batch-actions.md +4 -1
  43. data/docs/CNAME +1 -0
  44. data/docs/Gemfile +2 -0
  45. data/docs/_config.yml +2 -0
  46. data/docs/_includes/footer.html +8 -0
  47. data/docs/_includes/google-analytics.html +16 -0
  48. data/docs/_includes/head.html +7 -0
  49. data/docs/_includes/toc.html +97 -0
  50. data/docs/_includes/top-menu.html +9 -0
  51. data/docs/_layouts/default.html +21 -0
  52. data/docs/documentation.md +62 -0
  53. data/docs/images/activeadmin.png +0 -0
  54. data/docs/images/code-header.png +0 -0
  55. data/docs/images/divider.png +0 -0
  56. data/docs/images/features.png +0 -0
  57. data/docs/index.html +130 -0
  58. data/docs/stylesheets/main.css +1199 -0
  59. data/features/action_item.feature +2 -2
  60. data/features/authorization_cancan.feature +3 -3
  61. data/features/belongs_to.feature +60 -2
  62. data/features/comments/commenting.feature +7 -7
  63. data/features/development_reloading.feature +1 -1
  64. data/features/edit_page.feature +9 -9
  65. data/features/footer.feature +28 -0
  66. data/features/i18n.feature +11 -0
  67. data/features/index/batch_actions.feature +28 -6
  68. data/features/index/filters.feature +31 -11
  69. data/features/index/format_as_csv.feature +13 -13
  70. data/features/index/formats.feature +4 -4
  71. data/features/index/index_as_block.feature +1 -1
  72. data/features/index/index_as_blog.feature +6 -6
  73. data/features/index/index_as_grid.feature +3 -3
  74. data/features/index/index_as_table.feature +11 -11
  75. data/features/index/index_blank_slate.feature +4 -4
  76. data/features/index/index_parameters.feature +10 -10
  77. data/features/index/index_scope_to.feature +3 -3
  78. data/features/index/index_scopes.feature +37 -18
  79. data/features/index/page_title.feature +3 -3
  80. data/features/index/pagination.feature +1 -1
  81. data/features/index/switch_index_view.feature +8 -8
  82. data/features/menu.feature +3 -3
  83. data/features/new_page.feature +8 -8
  84. data/features/registering_assets.feature +1 -1
  85. data/features/registering_pages.feature +73 -2
  86. data/features/registering_resources.feature +1 -1
  87. data/features/renamed_resource.feature +1 -1
  88. data/features/show/page_title.feature +3 -3
  89. data/features/sidebar_sections.feature +6 -6
  90. data/features/specifying_actions.feature +29 -4
  91. data/features/step_definitions/factory_steps.rb +1 -1
  92. data/features/step_definitions/footer_steps.rb +11 -0
  93. data/features/step_definitions/i18n_steps.rb +8 -0
  94. data/features/step_definitions/index_scope_steps.rb +4 -0
  95. data/features/step_definitions/sidebar_steps.rb +1 -3
  96. data/features/step_definitions/table_steps.rb +1 -5
  97. data/features/step_definitions/user_steps.rb +7 -0
  98. data/features/support/env.rb +6 -33
  99. data/features/support/paths.rb +5 -0
  100. data/features/users/logging_in.feature +2 -0
  101. data/gemfiles/rails_32.gemfile +54 -0
  102. data/gemfiles/rails_40.gemfile +53 -0
  103. data/gemfiles/rails_41.gemfile +53 -0
  104. data/gemfiles/rails_42.gemfile +53 -0
  105. data/gemfiles/rails_50.gemfile +46 -0
  106. data/lib/active_admin.rb +1 -0
  107. data/lib/active_admin/application.rb +11 -0
  108. data/lib/active_admin/batch_actions/resource_extension.rb +0 -8
  109. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
  110. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
  111. data/lib/active_admin/dsl.rb +0 -6
  112. data/lib/active_admin/filters/active.rb +9 -1
  113. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  114. data/lib/active_admin/filters/humanized.rb +1 -1
  115. data/lib/active_admin/filters/resource_extension.rb +2 -4
  116. data/lib/active_admin/form_builder.rb +12 -6
  117. data/lib/active_admin/helpers/collection.rb +2 -0
  118. data/lib/active_admin/inputs.rb +1 -0
  119. data/lib/active_admin/inputs/filters/date_range_input.rb +9 -4
  120. data/lib/active_admin/inputs/filters/text_input.rb +26 -0
  121. data/lib/active_admin/localizers.rb +11 -0
  122. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  123. data/lib/active_admin/namespace.rb +1 -1
  124. data/lib/active_admin/order_clause.rb +29 -7
  125. data/lib/active_admin/page.rb +18 -4
  126. data/lib/active_admin/page_dsl.rb +4 -0
  127. data/lib/active_admin/resource.rb +16 -1
  128. data/lib/active_admin/resource/action_items.rb +7 -4
  129. data/lib/active_admin/resource/belongs_to.rb +4 -0
  130. data/lib/active_admin/resource/menu.rb +1 -1
  131. data/lib/active_admin/resource/ordering.rb +11 -0
  132. data/lib/active_admin/resource/routes.rb +34 -13
  133. data/lib/active_admin/resource/scopes.rb +1 -0
  134. data/lib/active_admin/resource_controller/data_access.rb +3 -10
  135. data/lib/active_admin/resource_dsl.rb +28 -1
  136. data/lib/active_admin/router.rb +5 -3
  137. data/lib/active_admin/scope.rb +3 -3
  138. data/lib/active_admin/version.rb +1 -1
  139. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
  140. data/lib/active_admin/view_helpers/display_helper.rb +8 -3
  141. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +5 -1
  142. data/lib/active_admin/views/components/active_admin_form.rb +11 -10
  143. data/lib/active_admin/views/components/attributes_table.rb +1 -1
  144. data/lib/active_admin/views/components/columns.rb +3 -3
  145. data/lib/active_admin/views/components/dropdown_menu.rb +2 -2
  146. data/lib/active_admin/views/components/index_list.rb +4 -1
  147. data/lib/active_admin/views/components/paginated_collection.rb +1 -0
  148. data/lib/active_admin/views/components/scopes.rb +8 -1
  149. data/lib/active_admin/views/components/site_title.rb +2 -2
  150. data/lib/active_admin/views/components/table_for.rb +3 -3
  151. data/lib/active_admin/views/footer.rb +17 -3
  152. data/lib/active_admin/views/index_as_table.rb +3 -3
  153. data/lib/active_admin/views/pages/base.rb +4 -2
  154. data/lib/active_admin/views/pages/form.rb +2 -3
  155. data/lib/active_admin/views/pages/show.rb +2 -1
  156. data/lib/bug_report_templates/rails_5_master.rb +120 -0
  157. data/lib/generators/active_admin/devise/devise_generator.rb +6 -3
  158. data/lib/generators/active_admin/install/install_generator.rb +1 -1
  159. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +15 -1
  160. data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +14 -1
  161. data/lib/ransack_ext.rb +2 -2
  162. data/spec/bug_report_templates_spec.rb +27 -0
  163. data/spec/javascripts/support/jasmine_runner.rb +4 -17
  164. data/spec/rails_helper.rb +20 -109
  165. data/spec/requests/default_namespace_spec.rb +16 -28
  166. data/spec/requests/javascript_spec.rb +1 -1
  167. data/spec/requests/memory_spec.rb +5 -1
  168. data/spec/requests/stylesheets_spec.rb +1 -1
  169. data/spec/spec_helper.rb +5 -10
  170. data/spec/support/active_admin_integration_spec_helper.rb +66 -0
  171. data/spec/support/active_admin_request_helpers.rb +12 -0
  172. data/spec/support/rails_template.rb +42 -15
  173. data/spec/support/rails_template_with_data.rb +24 -5
  174. data/spec/support/templates/manifest.js +3 -0
  175. data/spec/support/templates/policies/application_policy.rb +1 -1
  176. data/spec/unit/abstract_view_factory_spec.rb +1 -1
  177. data/spec/unit/action_builder_spec.rb +3 -12
  178. data/spec/unit/active_admin_spec.rb +1 -1
  179. data/spec/unit/application_spec.rb +5 -1
  180. data/spec/unit/asset_registration_spec.rb +1 -1
  181. data/spec/unit/authorization/authorization_adapter_spec.rb +1 -1
  182. data/spec/unit/authorization/controller_authorization_spec.rb +13 -9
  183. data/spec/unit/authorization/index_overriding_spec.rb +6 -6
  184. data/spec/unit/auto_link_spec.rb +48 -24
  185. data/spec/unit/batch_actions/resource_spec.rb +1 -14
  186. data/spec/unit/batch_actions/settings_spec.rb +1 -1
  187. data/spec/unit/belongs_to_spec.rb +9 -1
  188. data/spec/unit/cancan_adapter_spec.rb +1 -1
  189. data/spec/unit/comments_spec.rb +26 -19
  190. data/spec/unit/component_spec.rb +1 -1
  191. data/spec/unit/config_shared_examples.rb +1 -1
  192. data/spec/unit/controller_filters_spec.rb +1 -1
  193. data/spec/unit/csv_builder_spec.rb +5 -5
  194. data/spec/unit/dependency_spec.rb +1 -1
  195. data/spec/unit/devise_spec.rb +17 -3
  196. data/spec/unit/dsl_spec.rb +2 -2
  197. data/spec/unit/filters/active_spec.rb +21 -0
  198. data/spec/unit/filters/filter_form_builder_spec.rb +98 -31
  199. data/spec/unit/filters/humanized_spec.rb +9 -1
  200. data/spec/unit/filters/resource_spec.rb +5 -4
  201. data/spec/unit/form_builder_spec.rb +180 -33
  202. data/spec/unit/generators/install_spec.rb +12 -5
  203. data/spec/unit/helpers/collection_spec.rb +10 -7
  204. data/spec/unit/helpers/scope_chain_spec.rb +1 -1
  205. data/spec/unit/helpers/settings_spec.rb +1 -1
  206. data/spec/unit/i18n_spec.rb +1 -1
  207. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  208. data/spec/unit/menu_collection_spec.rb +1 -1
  209. data/spec/unit/menu_item_spec.rb +1 -1
  210. data/spec/unit/menu_spec.rb +1 -1
  211. data/spec/unit/namespace/authorization_spec.rb +1 -1
  212. data/spec/unit/namespace/register_page_spec.rb +28 -2
  213. data/spec/unit/namespace/register_resource_spec.rb +3 -1
  214. data/spec/unit/namespace_spec.rb +23 -1
  215. data/spec/unit/order_clause_spec.rb +7 -7
  216. data/spec/unit/page_controller_spec.rb +1 -1
  217. data/spec/unit/page_spec.rb +55 -2
  218. data/spec/unit/pretty_format_spec.rb +8 -7
  219. data/spec/unit/pundit_adapter_spec.rb +1 -1
  220. data/spec/unit/resource/action_items_spec.rb +1 -1
  221. data/spec/unit/resource/includes_spec.rb +1 -1
  222. data/spec/unit/resource/menu_spec.rb +1 -1
  223. data/spec/unit/resource/naming_spec.rb +1 -1
  224. data/spec/unit/resource/ordering_spec.rb +38 -0
  225. data/spec/unit/resource/page_presenters_spec.rb +1 -1
  226. data/spec/unit/resource/pagination_spec.rb +1 -1
  227. data/spec/unit/resource/routes_spec.rb +101 -53
  228. data/spec/unit/resource/scopes_spec.rb +1 -1
  229. data/spec/unit/resource/sidebars_spec.rb +1 -1
  230. data/spec/unit/resource_collection_spec.rb +1 -1
  231. data/spec/unit/resource_controller/data_access_spec.rb +50 -1
  232. data/spec/unit/resource_controller/decorators_spec.rb +2 -2
  233. data/spec/unit/resource_controller/sidebars_spec.rb +16 -17
  234. data/spec/unit/resource_controller_spec.rb +50 -56
  235. data/spec/unit/resource_registration_spec.rb +9 -4
  236. data/spec/unit/resource_spec.rb +9 -1
  237. data/spec/unit/routing_spec.rb +30 -2
  238. data/spec/unit/scope_spec.rb +26 -2
  239. data/spec/unit/settings_spec.rb +2 -2
  240. data/spec/unit/view_factory_spec.rb +1 -1
  241. data/spec/unit/view_helpers/breadcrumbs_spec.rb +1 -1
  242. data/spec/unit/view_helpers/display_helper_spec.rb +18 -3
  243. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +1 -1
  244. data/spec/unit/view_helpers/fields_for_spec.rb +1 -1
  245. data/spec/unit/view_helpers/flash_helper_spec.rb +1 -1
  246. data/spec/unit/view_helpers/form_helper_spec.rb +1 -1
  247. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +1 -1
  248. data/spec/unit/views/components/attributes_table_spec.rb +1 -1
  249. data/spec/unit/views/components/batch_action_selector_spec.rb +1 -1
  250. data/spec/unit/views/components/blank_slate_spec.rb +1 -1
  251. data/spec/unit/views/components/columns_spec.rb +1 -1
  252. data/spec/unit/views/components/index_list_spec.rb +18 -4
  253. data/spec/unit/views/components/index_table_for_spec.rb +1 -1
  254. data/spec/unit/views/components/paginated_collection_spec.rb +1 -1
  255. data/spec/unit/views/components/panel_spec.rb +1 -1
  256. data/spec/unit/views/components/sidebar_section_spec.rb +1 -1
  257. data/spec/unit/views/components/site_title_spec.rb +1 -1
  258. data/spec/unit/views/components/status_tag_spec.rb +1 -1
  259. data/spec/unit/views/components/table_for_spec.rb +9 -7
  260. data/spec/unit/views/components/tabs_spec.rb +1 -1
  261. data/spec/unit/views/components/unsupported_browser_spec.rb +3 -3
  262. data/spec/unit/views/index_as_blog_spec.rb +1 -1
  263. data/spec/unit/views/pages/form_spec.rb +1 -1
  264. data/spec/unit/views/pages/index_spec.rb +1 -1
  265. data/spec/unit/views/pages/layout_spec.rb +1 -1
  266. data/spec/unit/views/pages/show_spec.rb +1 -1
  267. data/spec/unit/views/tabbed_navigation_spec.rb +2 -2
  268. data/tasks/local.rake +25 -0
  269. data/tasks/parallel_tests.rake +4 -4
  270. data/tasks/test.rake +8 -53
  271. metadata +61 -18
  272. data/Guardfile +0 -8
  273. data/script/local +0 -53
  274. data/script/travis_cache +0 -107
  275. data/script/use_rails +0 -53
  276. data/spec/javascripts/support/jasmine_config.rb +0 -23
  277. data/spec/support/detect_rails_version.rb +0 -34
@@ -28,7 +28,7 @@ class DefaultPolicy < ApplicationPolicy
28
28
  end
29
29
  end
30
30
 
31
- describe ActiveAdmin::PunditAdapter do
31
+ RSpec.describe ActiveAdmin::PunditAdapter do
32
32
 
33
33
  describe "full integration" do
34
34
 
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::Resource::ActionItems do
3
+ RSpec.describe ActiveAdmin::Resource::ActionItems do
4
4
 
5
5
  let(:resource) do
6
6
  namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  module ActiveAdmin
4
- describe Resource, "Includes" do
4
+ RSpec.describe Resource, "Includes" do
5
5
  describe "#includes" do
6
6
 
7
7
  let(:application) { ActiveAdmin::Application.new }
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  module ActiveAdmin
4
- describe Resource, "Menu" do
4
+ RSpec.describe Resource, "Menu" do
5
5
 
6
6
  before { load_defaults! }
7
7
 
@@ -3,7 +3,7 @@
3
3
  require 'rails_helper'
4
4
 
5
5
  module ActiveAdmin
6
- describe Resource, "Naming" do
6
+ RSpec.describe Resource, "Naming" do
7
7
 
8
8
  before { load_defaults! }
9
9
 
@@ -0,0 +1,38 @@
1
+ require 'rails_helper'
2
+
3
+ module ActiveAdmin
4
+ RSpec.describe Resource, "Ordering" do
5
+ describe "#order_by" do
6
+
7
+ let(:application) { ActiveAdmin::Application.new }
8
+ let(:namespace) { ActiveAdmin::Namespace.new application, :admin }
9
+ let(:resource_config) { ActiveAdmin::Resource.new namespace, Post }
10
+ let(:dsl){ ActiveAdmin::ResourceDSL.new(resource_config, Post) }
11
+
12
+ it "should register the ordering in the config" do
13
+ dsl.run_registration_block do
14
+ order_by(:age) do |order_clause|
15
+ if order_clause.order == 'desc'
16
+ [order_clause.to_sql, 'NULLS LAST'].join(' ')
17
+ end
18
+ end
19
+ end
20
+ expect(resource_config.ordering.size).to eq(1)
21
+ end
22
+
23
+
24
+ it "should allow to setup custom ordering class" do
25
+ MyOrderClause = Class.new(ActiveAdmin::OrderClause)
26
+ dsl.run_registration_block do
27
+ config.order_clause = MyOrderClause
28
+ end
29
+ expect(resource_config.order_clause).to eq(MyOrderClause)
30
+ expect(application.order_clause).to eq(ActiveAdmin::OrderClause)
31
+
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+
38
+
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::Resource::PagePresenters do
3
+ RSpec.describe ActiveAdmin::Resource::PagePresenters do
4
4
 
5
5
  let(:namespace){ ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin) }
6
6
  let(:resource){ namespace.register(Post) }
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  module ActiveAdmin
4
- describe Resource, "Pagination" do
4
+ RSpec.describe Resource, "Pagination" do
5
5
 
6
6
  before { load_defaults! }
7
7
 
@@ -1,76 +1,124 @@
1
- require 'rails_helper'
1
+ require 'rails_helper'
2
2
 
3
- module ActiveAdmin
4
- describe Resource::Routes do
3
+ RSpec.describe ActiveAdmin::Resource::Routes do
5
4
 
6
- after :all do
7
- load_defaults!
5
+ after do
6
+ load_defaults!
7
+ reload_routes!
8
+ end
9
+
10
+ let(:application) { ActiveAdmin.application }
11
+ let(:namespace) { application.namespace(:admin) }
12
+
13
+ context "when in the admin namespace" do
14
+ let(:config) { namespace.resource_for('Category') }
15
+
16
+ before do
17
+ load_resources { ActiveAdmin.register Category }
18
+ end
19
+
20
+ let(:category) { Category.new { |c| c.id = 123 } }
21
+
22
+ it "should return the route prefix" do
23
+ expect(config.route_prefix).to eq 'admin'
24
+ end
25
+
26
+ it "should return the route collection path" do
27
+ expect(config.route_collection_path).to eq '/admin/categories'
28
+ end
29
+
30
+ it "should return the route instance path" do
31
+ expect(config.route_instance_path(category)).to eq '/admin/categories/123'
32
+ end
33
+ end
34
+
35
+ context "when in the root namespace" do
36
+ let!(:config) { ActiveAdmin.register Category, namespace: false }
37
+
38
+ after(:each) do
39
+ application.namespace(:root).unload!
40
+ application.namespaces.instance_variable_get(:@namespaces).delete(:root)
41
+ end
42
+
43
+ it "should have a nil route_prefix" do
44
+ expect(config.route_prefix).to eq nil
45
+ end
46
+
47
+ it "should generate a correct route" do
8
48
  reload_routes!
49
+ expect(config.route_collection_path).to eq "/categories"
9
50
  end
51
+ end
10
52
 
11
- describe "route names" do
12
- context "when in the admin namespace" do
13
- let!(:config) { ActiveAdmin.register Category }
14
- let(:category) { Category.new { |c| c.id = 123 } }
53
+ context "when registering a plural resource" do
54
+ class ::News; def self.has_many(*); end end
55
+ let!(:config) { ActiveAdmin.register News }
56
+ before{ reload_routes! }
15
57
 
16
- it "should return the route prefix" do
17
- expect(config.route_prefix).to eq 'admin'
18
- end
58
+ it "should return the plural route with _index" do
59
+ expect(config.route_collection_path).to eq "/admin/news"
60
+ end
61
+ end
19
62
 
20
- it "should return the route collection path" do
21
- expect(config.route_collection_path).to eq '/admin/categories'
22
- end
63
+ context "when the resource belongs to another resource" do
64
+ let(:config) { namespace.resource_for('Post') }
23
65
 
24
- it "should return the route instance path" do
25
- expect(config.route_instance_path(category)).to eq '/admin/categories/123'
26
- end
66
+ let :post do
67
+ Post.new do |p|
68
+ p.id = 3
69
+ p.category = Category.new{ |c| c.id = 1 }
27
70
  end
71
+ end
28
72
 
29
- context "when in the root namespace" do
30
- let!(:config) { ActiveAdmin.register Category, namespace: false }
31
- it "should have a nil route_prefix" do
32
- expect(config.route_prefix).to eq nil
33
- end
34
-
35
- it "should generate a correct route" do
36
- reload_routes!
37
- expect(config.route_collection_path).to eq "/categories"
38
- end
73
+ before do
74
+ load_resources do
75
+ ActiveAdmin.register Category
76
+ ActiveAdmin.register(Post) { belongs_to :category }
39
77
  end
78
+ end
40
79
 
41
- context "when registering a plural resource" do
42
- class ::News; def self.has_many(*); end end
43
- let!(:config) { ActiveAdmin.register News }
44
- before{ reload_routes! }
80
+ it "should nest the collection path" do
81
+ expect(config.route_collection_path(category_id: 1)).to eq "/admin/categories/1/posts"
82
+ end
45
83
 
46
- it "should return the plural route with _index" do
47
- expect(config.route_collection_path).to eq "/admin/news"
84
+ it "should nest the instance path" do
85
+ expect(config.route_instance_path(post)).to eq "/admin/categories/1/posts/3"
86
+ end
87
+ end
88
+
89
+ context "for batch_action handler" do
90
+ before do
91
+ load_resources { config.batch_actions = true }
92
+ end
93
+
94
+ context "when register a singular resource" do
95
+
96
+ let :config do
97
+ ActiveAdmin.register Category
98
+ ActiveAdmin.register Post do
99
+ belongs_to :category
48
100
  end
49
101
  end
50
102
 
51
- context "when the resource belongs to another resource" do
52
- let! :config do
53
- ActiveAdmin.register Post do
54
- belongs_to :category
55
- end
56
- end
103
+ it "should include :scope and :q params" do
104
+ params = { category_id: 1, q: { name_equals: "Any" }, scope: :all }
105
+ additional_params = { locale: 'en' }
106
+ batch_action_path = "/admin/categories/1/posts/batch_action?locale=en&q%5Bname_equals%5D=Any&scope=all"
57
107
 
58
- let :post do
59
- Post.new do |p|
60
- p.id = 3
61
- p.category = Category.new{ |c| c.id = 1 }
62
- end
63
- end
108
+ expect(config.route_batch_action_path(params, additional_params)).to eq batch_action_path
109
+ end
110
+ end
64
111
 
65
- before{ reload_routes! }
112
+ context "when registering a plural resource" do
66
113
 
67
- it "should nest the collection path" do
68
- expect(config.route_collection_path(category_id: 1)).to eq "/admin/categories/1/posts"
69
- end
114
+ class ::News; def self.has_many(*); end end
115
+ let(:config) { ActiveAdmin.register News }
70
116
 
71
- it "should nest the instance path" do
72
- expect(config.route_instance_path(post)).to eq "/admin/categories/1/posts/3"
73
- end
117
+ it "should return the plural batch action route with _index and given params" do
118
+ params = { q: { name_equals: "Any" }, scope: :all }
119
+ additional_params = { locale: 'en' }
120
+ batch_action_path = "/admin/news/batch_action?locale=en&q%5Bname_equals%5D=Any&scope=all"
121
+ expect(config.route_batch_action_path(params, additional_params)).to eq batch_action_path
74
122
  end
75
123
  end
76
124
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  module ActiveAdmin
4
- describe Resource, "Scopes" do
4
+ RSpec.describe Resource, "Scopes" do
5
5
 
6
6
  before { load_defaults! }
7
7
 
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::Resource::Sidebars do
3
+ RSpec.describe ActiveAdmin::Resource::Sidebars do
4
4
 
5
5
  let(:resource) do
6
6
  namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
  require 'active_admin/resource_collection'
3
3
 
4
- describe ActiveAdmin::ResourceCollection do
4
+ RSpec.describe ActiveAdmin::ResourceCollection do
5
5
  let(:application) { ActiveAdmin::Application.new }
6
6
  let(:namespace) { ActiveAdmin::Namespace.new application, :admin }
7
7
  let(:collection) { ActiveAdmin::ResourceCollection.new }
@@ -1,6 +1,10 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::ResourceController::DataAccess do
3
+ RSpec.describe ActiveAdmin::ResourceController::DataAccess do
4
+ before do
5
+ load_resources { ActiveAdmin.register Post }
6
+ end
7
+
4
8
  let(:params) do
5
9
  {}
6
10
  end
@@ -20,6 +24,22 @@ describe ActiveAdmin::ResourceController::DataAccess do
20
24
  expect(chain).to receive(:ransack).with(params[:q]).once.and_return(Post.ransack)
21
25
  controller.send :apply_filtering, chain
22
26
  end
27
+
28
+ context "params includes empty values" do
29
+ let(:params) do
30
+ { q: {id_eq: 1, position_eq: ""} }
31
+ end
32
+ it "should return relation without empty filters" do
33
+ expect(Post).to receive(:ransack).with(params[:q]).once.and_wrap_original do |original, *args|
34
+ chain = original.call(*args)
35
+ expect(chain.conditions.size).to eq(1)
36
+ chain
37
+ end
38
+ controller.send :apply_filtering, Post
39
+ end
40
+ end
41
+
42
+
23
43
  end
24
44
 
25
45
  describe "sorting" do
@@ -44,6 +64,35 @@ describe ActiveAdmin::ResourceController::DataAccess do
44
64
  end
45
65
  end
46
66
 
67
+ context "custom strategy" do
68
+ before do
69
+ expect(controller.send(:active_admin_config)).to receive(:ordering).twice.and_return(
70
+ {
71
+ published_date: proc do |order_clause|
72
+ [order_clause.to_sql, 'NULLS LAST'].join(' ') if order_clause.order == 'desc'
73
+ end
74
+ }.with_indifferent_access
75
+ )
76
+ end
77
+
78
+ context "when params applicable" do
79
+ let(:params) {{ order: "published_date_desc" }}
80
+ it "reorders chain" do
81
+ chain = double "ChainObj"
82
+ expect(chain).to receive(:reorder).with('"posts"."published_date" desc NULLS LAST').once.and_return(Post.search)
83
+ controller.send :apply_sorting, chain
84
+ end
85
+ end
86
+ context "when params not applicable" do
87
+ let(:params) {{ order: "published_date_asc" }}
88
+ it "reorders chain" do
89
+ chain = double "ChainObj"
90
+ expect(chain).to receive(:reorder).with('"posts"."published_date" asc').once.and_return(Post.search)
91
+ controller.send :apply_sorting, chain
92
+ end
93
+ end
94
+ end
95
+
47
96
  end
48
97
 
49
98
  describe "scoping" do
@@ -1,6 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::ResourceController::Decorators do
3
+ RSpec.describe ActiveAdmin::ResourceController::Decorators do
4
4
  let(:controller_class) do
5
5
  Class.new do
6
6
  def self.name
@@ -34,7 +34,7 @@ describe ActiveAdmin::ResourceController::Decorators do
34
34
 
35
35
  it "does not decorate when :decorate is set to false" do
36
36
  form = double
37
- allow(form).to receive(:options).and_return(:decorate => false)
37
+ allow(form).to receive(:options).and_return(decorate: false)
38
38
  allow(active_admin_config).to receive(:get_page_presenter).and_return(form)
39
39
  is_expected.not_to be_kind_of(PostDecorator)
40
40
  end
@@ -1,37 +1,36 @@
1
1
  require 'rails_helper'
2
2
 
3
- describe ActiveAdmin::ResourceController::Sidebars, type: :controller do
3
+ RSpec.describe ActiveAdmin::ResourceController::Sidebars, type: :controller do
4
4
  let(:klass){ Admin::PostsController }
5
- render_views # https://github.com/rspec/rspec-rails/issues/860
6
5
 
7
- before do
8
- @controller = klass.new
6
+ shared_context 'with post config' do
7
+ before do
8
+ load_resources { post_config }
9
+
10
+ @controller = klass.new
11
+
12
+ get :index
13
+ end
9
14
  end
10
15
 
11
- context 'without before_filter' do
12
- before do
13
- ActiveAdmin.register Post
14
- reload_routes!
16
+ context 'without skip_sidebar! before filter' do
17
+ include_context 'with post config' do
18
+ let(:post_config) { ActiveAdmin.register Post }
15
19
  end
16
20
 
17
21
  it 'does not set @skip_sidebar' do
18
- get :index
19
-
20
22
  expect(controller.instance_variable_get(:@skip_sidebar)).to eq nil
21
23
  end
22
24
  end
23
25
 
24
- describe '#skip_sidebar!' do
25
- before do
26
- ActiveAdmin.register Post do
27
- before_filter :skip_sidebar!
26
+ context 'with skip_sidebar! before_filter' do
27
+ include_context 'with post config' do
28
+ let(:post_config) do
29
+ ActiveAdmin.register(Post) { before_filter :skip_sidebar! }
28
30
  end
29
- reload_routes!
30
31
  end
31
32
 
32
33
  it 'works' do
33
- get :index
34
-
35
34
  expect(controller.instance_variable_get(:@skip_sidebar)).to eq true
36
35
  end
37
36
  end