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.

Files changed (423) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +307 -123
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +90 -46
  5. data/README.md +66 -19
  6. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  8. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  9. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  10. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  11. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  12. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  13. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +55 -0
  14. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  15. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  16. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  17. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  18. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  19. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  20. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  21. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  22. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  25. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  26. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  27. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  28. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  29. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  30. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  31. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  32. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  33. data/config/locales/bg.yml +0 -1
  34. data/config/locales/de.yml +10 -0
  35. data/config/locales/en.yml +19 -1
  36. data/config/locales/es.yml +20 -1
  37. data/config/locales/fi.yml +1 -1
  38. data/config/locales/he.yml +0 -1
  39. data/config/locales/hu.yml +4 -0
  40. data/config/locales/it.yml +4 -0
  41. data/config/locales/lt.yml +2 -2
  42. data/config/locales/nb.yml +15 -5
  43. data/config/locales/nl.yml +11 -0
  44. data/config/locales/pl.yml +71 -3
  45. data/config/locales/ru.yml +2 -0
  46. data/config/locales/tr.yml +9 -0
  47. data/config/locales/uk.yml +2 -0
  48. data/config/locales/zh-CN.yml +33 -5
  49. data/docs/.gitignore +1 -0
  50. data/docs/0-installation.md +2 -2
  51. data/docs/1-general-configuration.md +16 -1
  52. data/docs/10-custom-pages.md +14 -0
  53. data/docs/12-arbre-components.md +28 -1
  54. data/docs/13-authorization-adapter.md +40 -21
  55. data/docs/2-resource-customization.md +8 -3
  56. data/docs/3-index-pages/custom-index.md +1 -1
  57. data/docs/3-index-pages/index-as-blog.md +1 -1
  58. data/docs/3-index-pages/index-as-table.md +5 -5
  59. data/docs/3-index-pages.md +17 -0
  60. data/docs/5-forms.md +16 -2
  61. data/docs/8-custom-actions.md +11 -0
  62. data/docs/CNAME +1 -1
  63. data/docs/Gemfile +2 -0
  64. data/docs/Gemfile.lock +249 -0
  65. data/docs/_config.yml +1 -1
  66. data/docs/_includes/toc.html +1 -1
  67. data/docs/_includes/top-menu.html +9 -1
  68. data/docs/documentation.md +1 -1
  69. data/docs/images/tidelift.svg +14 -0
  70. data/docs/index.html +2 -2
  71. data/docs/stylesheets/main.css +26 -2
  72. data/lib/active_admin/abstract_view_factory.rb +13 -51
  73. data/lib/active_admin/application.rb +49 -155
  74. data/lib/active_admin/application_settings.rb +42 -0
  75. data/lib/active_admin/asset_registration.rb +0 -8
  76. data/lib/active_admin/base_controller/authorization.rb +3 -6
  77. data/lib/active_admin/base_controller.rb +6 -6
  78. data/lib/active_admin/batch_actions/controller.rb +2 -2
  79. data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
  80. data/lib/active_admin/callbacks.rb +1 -1
  81. data/lib/active_admin/csv_builder.rb +1 -1
  82. data/lib/active_admin/dependency.rb +1 -69
  83. data/lib/active_admin/deprecation.rb +0 -25
  84. data/lib/active_admin/dsl.rb +1 -8
  85. data/lib/active_admin/dynamic_setting.rb +38 -0
  86. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  87. data/lib/active_admin/engine.rb +5 -0
  88. data/lib/active_admin/error.rb +1 -1
  89. data/lib/active_admin/filters/active_filter.rb +4 -2
  90. data/lib/active_admin/filters/active_sidebar.rb +5 -1
  91. data/lib/active_admin/filters/forms.rb +7 -4
  92. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  93. data/lib/active_admin/filters/resource_extension.rb +4 -4
  94. data/lib/active_admin/form_builder.rb +97 -62
  95. data/lib/active_admin/generators/boilerplate.rb +1 -1
  96. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  97. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  98. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  99. data/lib/active_admin/menu.rb +2 -8
  100. data/lib/active_admin/menu_item.rb +4 -32
  101. data/lib/active_admin/namespace.rb +20 -8
  102. data/lib/active_admin/namespace_settings.rb +110 -0
  103. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  104. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
  105. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  106. data/lib/active_admin/page_dsl.rb +1 -1
  107. data/lib/active_admin/pundit_adapter.rb +13 -4
  108. data/lib/active_admin/resource/action_items.rb +7 -2
  109. data/lib/active_admin/resource/attributes.rb +7 -4
  110. data/lib/active_admin/resource/menu.rb +3 -3
  111. data/lib/active_admin/resource/naming.rb +3 -3
  112. data/lib/active_admin/resource/routes.rb +9 -4
  113. data/lib/active_admin/resource/scopes.rb +3 -3
  114. data/lib/active_admin/resource/sidebars.rb +1 -1
  115. data/lib/active_admin/resource.rb +2 -2
  116. data/lib/active_admin/resource_collection.rb +2 -2
  117. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  118. data/lib/active_admin/resource_controller/decorators.rb +3 -3
  119. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  120. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  121. data/lib/active_admin/resource_dsl.rb +5 -3
  122. data/lib/active_admin/router.rb +89 -84
  123. data/lib/active_admin/scope.rb +9 -5
  124. data/lib/active_admin/settings_node.rb +19 -0
  125. data/lib/active_admin/version.rb +1 -1
  126. data/lib/active_admin/view_helpers/display_helper.rb +10 -2
  127. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  128. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  129. data/lib/active_admin/view_helpers.rb +1 -1
  130. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  131. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  132. data/lib/active_admin/views/components/menu.rb +32 -0
  133. data/lib/active_admin/views/components/menu_item.rb +58 -0
  134. data/lib/active_admin/views/components/paginated_collection.rb +1 -1
  135. data/lib/active_admin/views/components/scopes.rb +11 -4
  136. data/lib/active_admin/views/components/sidebar.rb +13 -0
  137. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  138. data/lib/active_admin/views/components/site_title.rb +5 -6
  139. data/lib/active_admin/views/components/status_tag.rb +1 -18
  140. data/lib/active_admin/views/components/table_for.rb +3 -12
  141. data/lib/active_admin/views/components/tabs.rb +15 -3
  142. data/lib/active_admin/views/footer.rb +3 -7
  143. data/lib/active_admin/views/header.rb +3 -15
  144. data/lib/active_admin/views/index_as_blog.rb +1 -1
  145. data/lib/active_admin/views/index_as_grid.rb +25 -25
  146. data/lib/active_admin/views/index_as_table.rb +11 -10
  147. data/lib/active_admin/views/pages/base.rb +30 -53
  148. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  149. data/lib/active_admin/views.rb +1 -1
  150. data/lib/active_admin.rb +9 -4
  151. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  152. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  153. data/lib/generators/active_admin/install/install_generator.rb +6 -2
  154. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
  155. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  156. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  157. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  158. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  159. data/lib/ransack_ext.rb +3 -3
  160. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  161. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  162. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  163. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  164. metadata +120 -523
  165. data/.github/ISSUE_TEMPLATE.md +0 -20
  166. data/.gitignore +0 -49
  167. data/.mdlrc +0 -1
  168. data/.rubocop.yml +0 -76
  169. data/.simplecov +0 -13
  170. data/.travis.yml +0 -51
  171. data/.yardopts +0 -7
  172. data/Gemfile +0 -58
  173. data/Rakefile +0 -54
  174. data/activeadmin.gemspec +0 -32
  175. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  176. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  177. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  178. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  179. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  180. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  181. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  182. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  183. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  184. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  185. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  186. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  187. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  188. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  189. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  190. data/codecov.yml +0 -25
  191. data/config/i18n-tasks.yml +0 -26
  192. data/config/mdl_style.rb +0 -9
  193. data/cucumber.yml +0 -3
  194. data/features/action_item.feature +0 -73
  195. data/features/authorization.feature +0 -64
  196. data/features/authorization_cancan.feature +0 -52
  197. data/features/authorization_pundit.feature +0 -37
  198. data/features/belongs_to.feature +0 -124
  199. data/features/breadcrumb.feature +0 -75
  200. data/features/comments/commenting.feature +0 -178
  201. data/features/comments/viewing_index.feature +0 -19
  202. data/features/create_another.feature +0 -55
  203. data/features/dashboard.feature +0 -16
  204. data/features/decorators.feature +0 -43
  205. data/features/development_reloading.feature +0 -28
  206. data/features/edit_page.feature +0 -116
  207. data/features/favicon.feature +0 -20
  208. data/features/first_boot.feature +0 -16
  209. data/features/footer.feature +0 -28
  210. data/features/global_navigation.feature +0 -29
  211. data/features/i18n.feature +0 -55
  212. data/features/index/batch_actions.feature +0 -218
  213. data/features/index/filters.feature +0 -250
  214. data/features/index/format_as_csv.feature +0 -220
  215. data/features/index/formats.feature +0 -88
  216. data/features/index/index_as_block.feature +0 -15
  217. data/features/index/index_as_blog.feature +0 -69
  218. data/features/index/index_as_grid.feature +0 -45
  219. data/features/index/index_as_table.feature +0 -291
  220. data/features/index/index_blank_slate.feature +0 -83
  221. data/features/index/index_parameters.feature +0 -75
  222. data/features/index/index_scope_to.feature +0 -56
  223. data/features/index/index_scopes.feature +0 -285
  224. data/features/index/page_title.feature +0 -41
  225. data/features/index/pagination.feature +0 -63
  226. data/features/index/switch_index_view.feature +0 -73
  227. data/features/menu.feature +0 -72
  228. data/features/meta_tags.feature +0 -21
  229. data/features/new_page.feature +0 -136
  230. data/features/registering_assets.feature +0 -38
  231. data/features/registering_pages.feature +0 -237
  232. data/features/registering_resources.feature +0 -33
  233. data/features/renamed_resource.feature +0 -30
  234. data/features/root_to.feature +0 -17
  235. data/features/show/attributes_table_title.feature +0 -54
  236. data/features/show/columns.feature +0 -40
  237. data/features/show/default_content.feature +0 -44
  238. data/features/show/page_title.feature +0 -58
  239. data/features/show/tabs.feature +0 -33
  240. data/features/sidebar_sections.feature +0 -210
  241. data/features/site_title.feature +0 -47
  242. data/features/specifying_actions.feature +0 -118
  243. data/features/step_definitions/action_item_steps.rb +0 -7
  244. data/features/step_definitions/action_link_steps.rb +0 -19
  245. data/features/step_definitions/additional_web_steps.rb +0 -81
  246. data/features/step_definitions/asset_steps.rb +0 -15
  247. data/features/step_definitions/attribute_steps.rb +0 -18
  248. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  249. data/features/step_definitions/batch_action_steps.rb +0 -81
  250. data/features/step_definitions/blog_steps.rb +0 -3
  251. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  252. data/features/step_definitions/column_steps.rb +0 -8
  253. data/features/step_definitions/comment_steps.rb +0 -32
  254. data/features/step_definitions/configuration_steps.rb +0 -100
  255. data/features/step_definitions/dashboard_steps.rb +0 -15
  256. data/features/step_definitions/factory_steps.rb +0 -35
  257. data/features/step_definitions/filter_steps.rb +0 -47
  258. data/features/step_definitions/flash_steps.rb +0 -11
  259. data/features/step_definitions/footer_steps.rb +0 -11
  260. data/features/step_definitions/format_steps.rb +0 -56
  261. data/features/step_definitions/i18n_steps.rb +0 -11
  262. data/features/step_definitions/index_scope_steps.rb +0 -29
  263. data/features/step_definitions/index_views_steps.rb +0 -3
  264. data/features/step_definitions/layout_steps.rb +0 -3
  265. data/features/step_definitions/member_link_steps.rb +0 -7
  266. data/features/step_definitions/menu_steps.rb +0 -11
  267. data/features/step_definitions/meta_tag_steps.rb +0 -3
  268. data/features/step_definitions/pagination_steps.rb +0 -15
  269. data/features/step_definitions/sidebar_steps.rb +0 -11
  270. data/features/step_definitions/site_title_steps.rb +0 -17
  271. data/features/step_definitions/tab_steps.rb +0 -8
  272. data/features/step_definitions/table_steps.rb +0 -116
  273. data/features/step_definitions/user_steps.rb +0 -52
  274. data/features/step_definitions/web_steps.rb +0 -86
  275. data/features/sti_resource.feature +0 -65
  276. data/features/strong_parameters.feature +0 -69
  277. data/features/support/env.rb +0 -122
  278. data/features/support/paths.rb +0 -73
  279. data/features/support/regular_env.rb +0 -7
  280. data/features/support/reload_env.rb +0 -7
  281. data/features/support/selectors.rb +0 -45
  282. data/features/users/logging_in.feature +0 -36
  283. data/features/users/logging_out.feature +0 -13
  284. data/features/users/resetting_password.feature +0 -34
  285. data/gemfiles/rails_42.gemfile +0 -10
  286. data/gemfiles/rails_50.gemfile +0 -10
  287. data/gemfiles/rails_51.gemfile +0 -10
  288. data/gemfiles/rails_52.gemfile +0 -11
  289. data/lib/active_admin/event.rb +0 -24
  290. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  291. data/lib/active_admin/helpers/settings.rb +0 -114
  292. data/lib/bug_report_templates/active_admin_master.rb +0 -112
  293. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  294. data/spec/bug_report_templates_spec.rb +0 -26
  295. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  296. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  297. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  298. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  299. data/spec/javascripts/fixtures/flashes.html +0 -2
  300. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  301. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  302. data/spec/javascripts/support/jasmine.yml +0 -74
  303. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  304. data/spec/rails_helper.rb +0 -59
  305. data/spec/requests/default_namespace_spec.rb +0 -81
  306. data/spec/requests/memory_spec.rb +0 -25
  307. data/spec/requests/stylesheets_spec.rb +0 -18
  308. data/spec/spec_helper.rb +0 -1
  309. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  310. data/spec/support/active_admin_request_helpers.rb +0 -39
  311. data/spec/support/rails_template.rb +0 -153
  312. data/spec/support/rails_template_with_data.rb +0 -327
  313. data/spec/support/templates/admin/stores.rb +0 -7
  314. data/spec/support/templates/en.yml +0 -8
  315. data/spec/support/templates/manifest.js +0 -3
  316. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  317. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  318. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  319. data/spec/support/templates/policies/application_policy.rb +0 -44
  320. data/spec/support/templates/policies/category_policy.rb +0 -7
  321. data/spec/support/templates/policies/post_policy.rb +0 -15
  322. data/spec/support/templates/policies/store_policy.rb +0 -11
  323. data/spec/support/templates/policies/user_policy.rb +0 -11
  324. data/spec/support/templates/post_decorator.rb +0 -24
  325. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  326. data/spec/unit/action_builder_spec.rb +0 -158
  327. data/spec/unit/active_admin_spec.rb +0 -11
  328. data/spec/unit/application_spec.rb +0 -184
  329. data/spec/unit/asset_registration_spec.rb +0 -81
  330. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  331. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  332. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  333. data/spec/unit/auto_link_spec.rb +0 -93
  334. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  335. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  336. data/spec/unit/belongs_to_spec.rb +0 -76
  337. data/spec/unit/cancan_adapter_spec.rb +0 -43
  338. data/spec/unit/comments_spec.rb +0 -176
  339. data/spec/unit/component_spec.rb +0 -18
  340. data/spec/unit/config_shared_examples.rb +0 -59
  341. data/spec/unit/controller_filters_spec.rb +0 -41
  342. data/spec/unit/csv_builder_spec.rb +0 -313
  343. data/spec/unit/dependency_spec.rb +0 -135
  344. data/spec/unit/devise_spec.rb +0 -110
  345. data/spec/unit/dsl_spec.rb +0 -120
  346. data/spec/unit/filters/active_filter_spec.rb +0 -189
  347. data/spec/unit/filters/active_spec.rb +0 -24
  348. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  349. data/spec/unit/filters/resource_spec.rb +0 -128
  350. data/spec/unit/form_builder_spec.rb +0 -990
  351. data/spec/unit/generators/install_spec.rb +0 -31
  352. data/spec/unit/helpers/collection_spec.rb +0 -68
  353. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  354. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  355. data/spec/unit/helpers/settings_spec.rb +0 -30
  356. data/spec/unit/i18n_spec.rb +0 -29
  357. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  358. data/spec/unit/menu_collection_spec.rb +0 -62
  359. data/spec/unit/menu_item_spec.rb +0 -141
  360. data/spec/unit/menu_spec.rb +0 -71
  361. data/spec/unit/namespace/authorization_spec.rb +0 -27
  362. data/spec/unit/namespace/register_page_spec.rb +0 -99
  363. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  364. data/spec/unit/namespace_spec.rb +0 -124
  365. data/spec/unit/order_clause_spec.rb +0 -81
  366. data/spec/unit/page_controller_spec.rb +0 -5
  367. data/spec/unit/page_spec.rb +0 -128
  368. data/spec/unit/pretty_format_spec.rb +0 -82
  369. data/spec/unit/pundit_adapter_spec.rb +0 -98
  370. data/spec/unit/resource/action_items_spec.rb +0 -69
  371. data/spec/unit/resource/attributes_spec.rb +0 -49
  372. data/spec/unit/resource/includes_spec.rb +0 -21
  373. data/spec/unit/resource/menu_spec.rb +0 -18
  374. data/spec/unit/resource/naming_spec.rb +0 -122
  375. data/spec/unit/resource/ordering_spec.rb +0 -35
  376. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  377. data/spec/unit/resource/pagination_spec.rb +0 -38
  378. data/spec/unit/resource/routes_spec.rb +0 -125
  379. data/spec/unit/resource/scopes_spec.rb +0 -50
  380. data/spec/unit/resource/sidebars_spec.rb +0 -43
  381. data/spec/unit/resource_collection_spec.rb +0 -175
  382. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  383. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  384. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  385. data/spec/unit/resource_controller_spec.rb +0 -273
  386. data/spec/unit/resource_registration_spec.rb +0 -61
  387. data/spec/unit/resource_spec.rb +0 -320
  388. data/spec/unit/routing_spec.rb +0 -211
  389. data/spec/unit/scope_spec.rb +0 -209
  390. data/spec/unit/settings_spec.rb +0 -117
  391. data/spec/unit/view_factory_spec.rb +0 -19
  392. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  393. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  394. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  395. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  396. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  397. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  398. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  399. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  400. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  401. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  402. data/spec/unit/views/components/columns_spec.rb +0 -187
  403. data/spec/unit/views/components/index_list_spec.rb +0 -49
  404. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  405. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  406. data/spec/unit/views/components/panel_spec.rb +0 -58
  407. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  408. data/spec/unit/views/components/site_title_spec.rb +0 -76
  409. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  410. data/spec/unit/views/components/table_for_spec.rb +0 -436
  411. data/spec/unit/views/components/tabs_spec.rb +0 -67
  412. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  413. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  414. data/spec/unit/views/pages/form_spec.rb +0 -54
  415. data/spec/unit/views/pages/index_spec.rb +0 -60
  416. data/spec/unit/views/pages/layout_spec.rb +0 -59
  417. data/spec/unit/views/pages/show_spec.rb +0 -32
  418. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  419. data/tasks/docs.rake +0 -64
  420. data/tasks/lint.rake +0 -21
  421. data/tasks/local.rake +0 -25
  422. data/tasks/parallel_tests.rake +0 -66
  423. 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