activeadmin 1.3.1 → 1.4.0

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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +467 -0
  3. data/.gitignore +2 -5
  4. data/.rspec +1 -0
  5. data/.rspec_parallel +2 -0
  6. data/.rubocop.yml +25 -7
  7. data/.simplecov +4 -6
  8. data/CHANGELOG.md +175 -83
  9. data/CODE_OF_CONDUCT.md +64 -12
  10. data/CONTRIBUTING.md +77 -40
  11. data/Gemfile +7 -55
  12. data/Gemfile.common +53 -0
  13. data/Gemfile.lock +431 -0
  14. data/README.md +39 -18
  15. data/Rakefile +1 -32
  16. data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  18. data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
  19. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  20. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  21. data/app/views/active_admin/devise/registrations/new.html.erb +1 -1
  22. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  23. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  24. data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
  25. data/bin/install_chromedriver.sh +17 -0
  26. data/config/locales/de.yml +10 -0
  27. data/config/locales/en.yml +19 -1
  28. data/config/locales/es.yml +20 -1
  29. data/config/locales/fi.yml +1 -1
  30. data/config/locales/it.yml +4 -0
  31. data/config/locales/nb.yml +15 -5
  32. data/config/locales/nl.yml +11 -0
  33. data/config/locales/pl.yml +71 -3
  34. data/config/locales/ru.yml +2 -0
  35. data/config/locales/tr.yml +9 -0
  36. data/config/locales/zh-CN.yml +33 -5
  37. data/config/mdl_style.rb +2 -0
  38. data/cucumber.yml +7 -3
  39. data/docs/.gitignore +1 -0
  40. data/docs/1-general-configuration.md +16 -1
  41. data/docs/10-custom-pages.md +14 -0
  42. data/docs/12-arbre-components.md +28 -1
  43. data/docs/13-authorization-adapter.md +36 -17
  44. data/docs/2-resource-customization.md +8 -3
  45. data/docs/3-index-pages.md +17 -0
  46. data/docs/3-index-pages/custom-index.md +1 -1
  47. data/docs/3-index-pages/index-as-blog.md +1 -1
  48. data/docs/3-index-pages/index-as-table.md +5 -5
  49. data/docs/5-forms.md +16 -2
  50. data/docs/8-custom-actions.md +11 -0
  51. data/docs/Gemfile +2 -0
  52. data/docs/Gemfile.lock +249 -0
  53. data/docs/_config.yml +1 -1
  54. data/docs/_includes/toc.html +1 -1
  55. data/docs/_includes/top-menu.html +9 -1
  56. data/docs/documentation.md +1 -1
  57. data/docs/images/tidelift.svg +14 -0
  58. data/docs/stylesheets/main.css +26 -2
  59. data/gemfiles/rails_42.gemfile +2 -2
  60. data/gemfiles/rails_42.gemfile.lock +410 -0
  61. data/gemfiles/rails_50.gemfile +2 -2
  62. data/gemfiles/rails_50.gemfile.lock +424 -0
  63. data/gemfiles/rails_51.gemfile +2 -2
  64. data/gemfiles/rails_51.gemfile.lock +423 -0
  65. data/lib/active_admin/abstract_view_factory.rb +13 -51
  66. data/lib/active_admin/application.rb +42 -142
  67. data/lib/active_admin/application_settings.rb +39 -0
  68. data/lib/active_admin/base_controller/authorization.rb +1 -2
  69. data/lib/active_admin/batch_actions/controller.rb +1 -1
  70. data/lib/active_admin/dependency.rb +8 -0
  71. data/lib/active_admin/deprecation.rb +0 -25
  72. data/lib/active_admin/dynamic_setting.rb +38 -0
  73. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  74. data/lib/active_admin/engine.rb +5 -0
  75. data/lib/active_admin/filters/active_filter.rb +1 -1
  76. data/lib/active_admin/filters/resource_extension.rb +1 -1
  77. data/lib/active_admin/form_builder.rb +95 -60
  78. data/lib/active_admin/inputs/datepicker_input.rb +7 -0
  79. data/lib/active_admin/menu.rb +2 -8
  80. data/lib/active_admin/menu_item.rb +3 -31
  81. data/lib/active_admin/namespace.rb +18 -6
  82. data/lib/active_admin/namespace_settings.rb +107 -0
  83. data/lib/active_admin/orm/active_record/comments.rb +11 -0
  84. data/lib/active_admin/orm/active_record/comments/comment.rb +1 -1
  85. data/lib/active_admin/resource/action_items.rb +6 -1
  86. data/lib/active_admin/resource_controller/decorators.rb +3 -3
  87. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  88. data/lib/active_admin/router.rb +89 -84
  89. data/lib/active_admin/scope.rb +5 -1
  90. data/lib/active_admin/settings_node.rb +19 -0
  91. data/lib/active_admin/version.rb +1 -1
  92. data/lib/active_admin/views/components/active_admin_form.rb +2 -3
  93. data/lib/active_admin/views/components/menu.rb +32 -0
  94. data/lib/active_admin/views/components/menu_item.rb +58 -0
  95. data/lib/active_admin/views/components/scopes.rb +11 -4
  96. data/lib/active_admin/views/components/sidebar.rb +13 -0
  97. data/lib/active_admin/views/components/site_title.rb +5 -6
  98. data/lib/active_admin/views/components/table_for.rb +1 -10
  99. data/lib/active_admin/views/components/tabs.rb +4 -1
  100. data/lib/active_admin/views/footer.rb +2 -6
  101. data/lib/active_admin/views/header.rb +3 -15
  102. data/lib/active_admin/views/index_as_blog.rb +1 -1
  103. data/lib/active_admin/views/index_as_grid.rb +25 -25
  104. data/lib/active_admin/views/index_as_table.rb +6 -6
  105. data/lib/active_admin/views/pages/base.rb +27 -53
  106. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  107. data/lib/bug_report_templates/active_admin_master.rb +2 -3
  108. data/tasks/application_generator.rb +48 -0
  109. data/tasks/gemfiles.rake +8 -0
  110. data/tasks/lint.rake +96 -7
  111. data/tasks/local.rake +10 -8
  112. data/tasks/test.rake +30 -16
  113. metadata +26 -440
  114. data/.travis.yml +0 -51
  115. data/features/action_item.feature +0 -73
  116. data/features/authorization.feature +0 -64
  117. data/features/authorization_cancan.feature +0 -52
  118. data/features/authorization_pundit.feature +0 -37
  119. data/features/belongs_to.feature +0 -124
  120. data/features/breadcrumb.feature +0 -75
  121. data/features/comments/commenting.feature +0 -178
  122. data/features/comments/viewing_index.feature +0 -19
  123. data/features/create_another.feature +0 -55
  124. data/features/dashboard.feature +0 -16
  125. data/features/decorators.feature +0 -43
  126. data/features/development_reloading.feature +0 -28
  127. data/features/edit_page.feature +0 -116
  128. data/features/favicon.feature +0 -20
  129. data/features/first_boot.feature +0 -16
  130. data/features/footer.feature +0 -28
  131. data/features/global_navigation.feature +0 -29
  132. data/features/i18n.feature +0 -55
  133. data/features/index/batch_actions.feature +0 -218
  134. data/features/index/filters.feature +0 -250
  135. data/features/index/format_as_csv.feature +0 -220
  136. data/features/index/formats.feature +0 -88
  137. data/features/index/index_as_block.feature +0 -15
  138. data/features/index/index_as_blog.feature +0 -69
  139. data/features/index/index_as_grid.feature +0 -45
  140. data/features/index/index_as_table.feature +0 -291
  141. data/features/index/index_blank_slate.feature +0 -83
  142. data/features/index/index_parameters.feature +0 -75
  143. data/features/index/index_scope_to.feature +0 -56
  144. data/features/index/index_scopes.feature +0 -285
  145. data/features/index/page_title.feature +0 -41
  146. data/features/index/pagination.feature +0 -63
  147. data/features/index/switch_index_view.feature +0 -73
  148. data/features/menu.feature +0 -72
  149. data/features/meta_tags.feature +0 -21
  150. data/features/new_page.feature +0 -136
  151. data/features/registering_assets.feature +0 -38
  152. data/features/registering_pages.feature +0 -237
  153. data/features/registering_resources.feature +0 -33
  154. data/features/renamed_resource.feature +0 -30
  155. data/features/root_to.feature +0 -17
  156. data/features/show/attributes_table_title.feature +0 -54
  157. data/features/show/columns.feature +0 -40
  158. data/features/show/default_content.feature +0 -44
  159. data/features/show/page_title.feature +0 -58
  160. data/features/show/tabs.feature +0 -33
  161. data/features/sidebar_sections.feature +0 -210
  162. data/features/site_title.feature +0 -47
  163. data/features/specifying_actions.feature +0 -118
  164. data/features/step_definitions/action_item_steps.rb +0 -7
  165. data/features/step_definitions/action_link_steps.rb +0 -19
  166. data/features/step_definitions/additional_web_steps.rb +0 -81
  167. data/features/step_definitions/asset_steps.rb +0 -15
  168. data/features/step_definitions/attribute_steps.rb +0 -18
  169. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  170. data/features/step_definitions/batch_action_steps.rb +0 -81
  171. data/features/step_definitions/blog_steps.rb +0 -3
  172. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  173. data/features/step_definitions/column_steps.rb +0 -8
  174. data/features/step_definitions/comment_steps.rb +0 -32
  175. data/features/step_definitions/configuration_steps.rb +0 -100
  176. data/features/step_definitions/dashboard_steps.rb +0 -15
  177. data/features/step_definitions/factory_steps.rb +0 -35
  178. data/features/step_definitions/filter_steps.rb +0 -47
  179. data/features/step_definitions/flash_steps.rb +0 -11
  180. data/features/step_definitions/footer_steps.rb +0 -11
  181. data/features/step_definitions/format_steps.rb +0 -56
  182. data/features/step_definitions/i18n_steps.rb +0 -11
  183. data/features/step_definitions/index_scope_steps.rb +0 -29
  184. data/features/step_definitions/index_views_steps.rb +0 -3
  185. data/features/step_definitions/layout_steps.rb +0 -3
  186. data/features/step_definitions/member_link_steps.rb +0 -7
  187. data/features/step_definitions/menu_steps.rb +0 -11
  188. data/features/step_definitions/meta_tag_steps.rb +0 -3
  189. data/features/step_definitions/pagination_steps.rb +0 -15
  190. data/features/step_definitions/sidebar_steps.rb +0 -11
  191. data/features/step_definitions/site_title_steps.rb +0 -17
  192. data/features/step_definitions/tab_steps.rb +0 -8
  193. data/features/step_definitions/table_steps.rb +0 -116
  194. data/features/step_definitions/user_steps.rb +0 -52
  195. data/features/step_definitions/web_steps.rb +0 -86
  196. data/features/sti_resource.feature +0 -65
  197. data/features/strong_parameters.feature +0 -69
  198. data/features/support/env.rb +0 -122
  199. data/features/support/paths.rb +0 -73
  200. data/features/support/regular_env.rb +0 -7
  201. data/features/support/reload_env.rb +0 -7
  202. data/features/support/selectors.rb +0 -45
  203. data/features/users/logging_in.feature +0 -36
  204. data/features/users/logging_out.feature +0 -13
  205. data/features/users/resetting_password.feature +0 -34
  206. data/gemfiles/rails_52.gemfile +0 -11
  207. data/lib/active_admin/helpers/settings.rb +0 -114
  208. data/spec/bug_report_templates_spec.rb +0 -26
  209. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  210. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  211. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  212. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  213. data/spec/javascripts/fixtures/flashes.html +0 -2
  214. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  215. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  216. data/spec/javascripts/support/jasmine.yml +0 -74
  217. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  218. data/spec/rails_helper.rb +0 -59
  219. data/spec/requests/default_namespace_spec.rb +0 -81
  220. data/spec/requests/memory_spec.rb +0 -25
  221. data/spec/requests/stylesheets_spec.rb +0 -18
  222. data/spec/spec_helper.rb +0 -1
  223. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  224. data/spec/support/active_admin_request_helpers.rb +0 -39
  225. data/spec/support/rails_template.rb +0 -153
  226. data/spec/support/rails_template_with_data.rb +0 -327
  227. data/spec/support/templates/admin/stores.rb +0 -7
  228. data/spec/support/templates/en.yml +0 -8
  229. data/spec/support/templates/manifest.js +0 -3
  230. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  231. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  232. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  233. data/spec/support/templates/policies/application_policy.rb +0 -44
  234. data/spec/support/templates/policies/category_policy.rb +0 -7
  235. data/spec/support/templates/policies/post_policy.rb +0 -15
  236. data/spec/support/templates/policies/store_policy.rb +0 -11
  237. data/spec/support/templates/policies/user_policy.rb +0 -11
  238. data/spec/support/templates/post_decorator.rb +0 -24
  239. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  240. data/spec/unit/action_builder_spec.rb +0 -158
  241. data/spec/unit/active_admin_spec.rb +0 -11
  242. data/spec/unit/application_spec.rb +0 -184
  243. data/spec/unit/asset_registration_spec.rb +0 -81
  244. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  245. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  246. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  247. data/spec/unit/auto_link_spec.rb +0 -93
  248. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  249. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  250. data/spec/unit/belongs_to_spec.rb +0 -76
  251. data/spec/unit/cancan_adapter_spec.rb +0 -43
  252. data/spec/unit/comments_spec.rb +0 -176
  253. data/spec/unit/component_spec.rb +0 -18
  254. data/spec/unit/config_shared_examples.rb +0 -59
  255. data/spec/unit/controller_filters_spec.rb +0 -41
  256. data/spec/unit/csv_builder_spec.rb +0 -313
  257. data/spec/unit/dependency_spec.rb +0 -135
  258. data/spec/unit/devise_spec.rb +0 -110
  259. data/spec/unit/dsl_spec.rb +0 -120
  260. data/spec/unit/filters/active_filter_spec.rb +0 -189
  261. data/spec/unit/filters/active_spec.rb +0 -24
  262. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  263. data/spec/unit/filters/resource_spec.rb +0 -128
  264. data/spec/unit/form_builder_spec.rb +0 -990
  265. data/spec/unit/generators/install_spec.rb +0 -31
  266. data/spec/unit/helpers/collection_spec.rb +0 -68
  267. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  268. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  269. data/spec/unit/helpers/settings_spec.rb +0 -30
  270. data/spec/unit/i18n_spec.rb +0 -29
  271. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  272. data/spec/unit/menu_collection_spec.rb +0 -62
  273. data/spec/unit/menu_item_spec.rb +0 -141
  274. data/spec/unit/menu_spec.rb +0 -71
  275. data/spec/unit/namespace/authorization_spec.rb +0 -27
  276. data/spec/unit/namespace/register_page_spec.rb +0 -99
  277. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  278. data/spec/unit/namespace_spec.rb +0 -124
  279. data/spec/unit/order_clause_spec.rb +0 -81
  280. data/spec/unit/page_controller_spec.rb +0 -5
  281. data/spec/unit/page_spec.rb +0 -128
  282. data/spec/unit/pretty_format_spec.rb +0 -82
  283. data/spec/unit/pundit_adapter_spec.rb +0 -98
  284. data/spec/unit/resource/action_items_spec.rb +0 -69
  285. data/spec/unit/resource/attributes_spec.rb +0 -49
  286. data/spec/unit/resource/includes_spec.rb +0 -21
  287. data/spec/unit/resource/menu_spec.rb +0 -18
  288. data/spec/unit/resource/naming_spec.rb +0 -122
  289. data/spec/unit/resource/ordering_spec.rb +0 -35
  290. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  291. data/spec/unit/resource/pagination_spec.rb +0 -38
  292. data/spec/unit/resource/routes_spec.rb +0 -125
  293. data/spec/unit/resource/scopes_spec.rb +0 -50
  294. data/spec/unit/resource/sidebars_spec.rb +0 -43
  295. data/spec/unit/resource_collection_spec.rb +0 -175
  296. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  297. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  298. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  299. data/spec/unit/resource_controller_spec.rb +0 -273
  300. data/spec/unit/resource_registration_spec.rb +0 -61
  301. data/spec/unit/resource_spec.rb +0 -320
  302. data/spec/unit/routing_spec.rb +0 -211
  303. data/spec/unit/scope_spec.rb +0 -209
  304. data/spec/unit/settings_spec.rb +0 -117
  305. data/spec/unit/view_factory_spec.rb +0 -19
  306. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  307. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  308. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  309. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  310. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  311. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  312. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  313. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  314. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  315. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  316. data/spec/unit/views/components/columns_spec.rb +0 -187
  317. data/spec/unit/views/components/index_list_spec.rb +0 -49
  318. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  319. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  320. data/spec/unit/views/components/panel_spec.rb +0 -58
  321. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  322. data/spec/unit/views/components/site_title_spec.rb +0 -76
  323. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  324. data/spec/unit/views/components/table_for_spec.rb +0 -436
  325. data/spec/unit/views/components/tabs_spec.rb +0 -67
  326. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  327. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  328. data/spec/unit/views/pages/form_spec.rb +0 -54
  329. data/spec/unit/views/pages/index_spec.rb +0 -60
  330. data/spec/unit/views/pages/layout_spec.rb +0 -59
  331. data/spec/unit/views/pages/show_spec.rb +0 -32
  332. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  333. data/tasks/parallel_tests.rake +0 -66
@@ -1,31 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe "AA installation" do
4
- context "should create" do
5
-
6
- it "active_admin.scss" do
7
- path = Rails.root + "app/assets/stylesheets/active_admin.scss"
8
-
9
- expect(File.exist?(path)).to eq true
10
- end
11
-
12
- it "active_admin.js.coffee" do
13
- path = Rails.root + "app/assets/javascripts/active_admin.js.coffee"
14
-
15
- expect(File.exist?(path)).to eq true
16
- end
17
-
18
- it "the dashboard" do
19
- path = Rails.root + "app/admin/dashboard.rb"
20
-
21
- expect(File.exist?(path)).to eq true
22
- end
23
-
24
- it "the initializer" do
25
- path = Rails.root + "config/initializers/active_admin.rb"
26
-
27
- expect(File.exist?(path)).to eq true
28
- end
29
-
30
- end
31
- end
@@ -1,68 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Helpers::Collection do
4
-
5
- include ActiveAdmin::Helpers::Collection
6
-
7
- before do
8
- Post.create!(title: "A post")
9
- Post.create!(title: "A post")
10
- Post.create!(title: "An other post")
11
- end
12
-
13
- describe "#collection_size" do
14
- it "should return the collection size for an ActiveRecord class" do
15
- expect(collection_size(Post.where(nil))).to eq 3
16
- end
17
-
18
- it "should return the collection size for an ActiveRecord::Relation" do
19
- expect(collection_size(Post.where(title: "A post"))).to eq 2
20
- end
21
-
22
- it "should return the collection size for a collection with group by" do
23
- expect(collection_size(Post.group(:title))).to eq 2
24
- end
25
-
26
- it "should return the collection size for a collection with group by, select and custom order" do
27
- expect(collection_size(Post.select("title, count(*) as nb_posts").group(:title).order("nb_posts"))).to eq 2
28
- end
29
-
30
- it "should return the collection size for an Array" do
31
- expect(collection_size(Post.where(title: "A post").to_a)).to eq 2
32
- end
33
-
34
- it "should take the defined collection by default" do
35
- def collection; Post.where(nil); end
36
-
37
- expect(collection_size).to eq 3
38
-
39
- def collection; Post.where(title: "An other post"); end
40
-
41
- expect(collection_size).to eq 1
42
-
43
- def collection; Post.where(title: "A post").to_a end
44
-
45
- expect(collection_size).to eq 2
46
- end
47
- end
48
-
49
- describe "#collection_is_empty?" do
50
- it "should return true when the collection is empty" do
51
- expect(collection_is_empty?(Post.where(title: "Non existing post"))).to eq true
52
- end
53
-
54
- it "should return false when the collection is not empty" do
55
- expect(collection_is_empty?(Post.where(title: "A post"))).to eq false
56
- end
57
-
58
- it "should take the defined collection by default" do
59
- def collection; Post.where(nil); end
60
-
61
- expect(collection_is_empty?).to eq false
62
-
63
- def collection; Post.where(title: "Non existing post"); end
64
-
65
- expect(collection_is_empty?).to eq true
66
- end
67
- end
68
- end
@@ -1,79 +0,0 @@
1
- require 'rails_helper'
2
-
3
- # Adapted from Rails 5 to support Rails 4.
4
- # https://github.com/rails/rails/blob/9c35bf2a6a27431c6aa283db781c19f61c5155be/actionview/test/template/output_safety_helper_test.rb
5
- RSpec.describe ActiveAdmin::OutputSafetyHelper, type: :view do
6
- include described_class
7
-
8
- before do
9
- @string = "hello"
10
- end
11
-
12
- describe "to_sentence" do
13
- it "escapes non-html_safe values" do
14
- actual = to_sentence(%w(< > & ' "))
15
- assert actual.html_safe?
16
- assert_equal("&lt;, &gt;, &amp;, &#39;, and &quot;", actual)
17
-
18
- actual = to_sentence(%w(<script>))
19
- assert actual.html_safe?
20
- assert_equal("&lt;script&gt;", actual)
21
- end
22
-
23
- it "does not double escape if single value is html_safe" do
24
- assert_equal("&lt;script&gt;", to_sentence([ERB::Util.html_escape("<script>")]))
25
- assert_equal("&lt;script&gt;", to_sentence(["&lt;script&gt;".html_safe]))
26
- assert_equal("&amp;lt;script&amp;gt;", to_sentence(["&lt;script&gt;"]))
27
- end
28
-
29
- it "checks connector words for html safety" do
30
- assert_equal "one & two, and three", to_sentence(["one", "two", "three"], words_connector: " & ".html_safe)
31
- assert_equal "one & two", to_sentence(["one", "two"], two_words_connector: " & ".html_safe)
32
- assert_equal "one, two &lt;script&gt;alert(1)&lt;/script&gt; three", to_sentence(["one", "two", "three"], last_word_connector: " <script>alert(1)</script> ")
33
- end
34
-
35
- it "does not escape html_safe values" do
36
- ptag = content_tag("p") do
37
- safe_join(["<marquee>shady stuff</marquee>", tag("br")])
38
- end
39
- url = "https://example.com"
40
- expected = %(<a href="#{url}">#{url}</a> and <p>&lt;marquee&gt;shady stuff&lt;/marquee&gt;<br /></p>)
41
- actual = to_sentence([link_to(url, url), ptag])
42
- assert actual.html_safe?
43
- assert_equal(expected, actual)
44
- end
45
-
46
- it "handles blank strings" do
47
- actual = to_sentence(["", "two", "three"])
48
- assert actual.html_safe?
49
- assert_equal ", two, and three", actual
50
- end
51
-
52
- it "handles nil values" do
53
- actual = to_sentence([nil, "two", "three"])
54
- assert actual.html_safe?
55
- assert_equal ", two, and three", actual
56
- end
57
-
58
- it "still supports ActiveSupports Array#to_sentence arguments" do
59
- assert_equal "one two, and three", to_sentence(["one", "two", "three"], words_connector: " ")
60
- assert_equal "one & two, and three", to_sentence(["one", "two", "three"], words_connector: " & ".html_safe)
61
- assert_equal "onetwo, and three", to_sentence(["one", "two", "three"], words_connector: nil)
62
- assert_equal "one, two, and also three", to_sentence(["one", "two", "three"], last_word_connector: ", and also ")
63
- assert_equal "one, twothree", to_sentence(["one", "two", "three"], last_word_connector: nil)
64
- assert_equal "one, two three", to_sentence(["one", "two", "three"], last_word_connector: " ")
65
- assert_equal "one, two and three", to_sentence(["one", "two", "three"], last_word_connector: " and ")
66
- end
67
-
68
- it "is not affected by $," do
69
- separator_was = $,
70
- $, = "|"
71
- begin
72
- assert_equal "one and two", to_sentence(["one", "two"])
73
- assert_equal "one, two, and three", to_sentence(["one", "two", "three"])
74
- ensure
75
- $, = separator_was
76
- end
77
- end
78
- end
79
- end
@@ -1,35 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::ScopeChain do
4
-
5
- include ActiveAdmin::ScopeChain
6
-
7
- describe "#scope_chain" do
8
- let(:relation) { double }
9
-
10
- context "when Scope has a scope method" do
11
- let(:scope) { ActiveAdmin::Scope.new :published }
12
-
13
- it "should call the method on the relation and return it" do
14
- expect(relation).to receive(:published).and_return(:scoped_relation)
15
- expect(scope_chain(scope, relation)).to eq :scoped_relation
16
- end
17
- end
18
-
19
- context "when Scope has the scope method method ':all'" do
20
- let(:scope) { ActiveAdmin::Scope.new :all }
21
-
22
- it "should return the relation" do
23
- expect(scope_chain(scope, relation)).to eq relation
24
- end
25
- end
26
-
27
- context "when Scope has a name and a scope block" do
28
- let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| :scoped_relation } }
29
-
30
- it "should instance_exec the block and return it" do
31
- expect(scope_chain(scope, relation)).to eq :scoped_relation
32
- end
33
- end
34
- end
35
- end
@@ -1,30 +0,0 @@
1
- require 'rails_helper'
2
- require 'active_admin/helpers/settings'
3
-
4
- RSpec.describe ActiveAdmin::Settings do
5
-
6
- # A Class with settings module included
7
- let(:klass) do
8
- Class.new do
9
- include ActiveAdmin::Settings
10
- end
11
- end
12
-
13
- it "should add a new setting with a default" do
14
- klass.setting :my_setting, "Hello World"
15
- expect(klass.default_settings[:my_setting]).to eq "Hello World"
16
- end
17
-
18
- it "should initialize the defaults" do
19
- klass.setting :my_setting, "Hello World"
20
- expect(klass.new.my_setting).to eq "Hello World"
21
- end
22
-
23
- it "should support settings of nil" do
24
- klass.setting :my_setting, :some_val
25
- inst = klass.new
26
- inst.my_setting = nil
27
- expect(inst.my_setting).to eq nil
28
- end
29
-
30
- end
@@ -1,29 +0,0 @@
1
- require 'rails_helper'
2
- require 'i18n/tasks'
3
-
4
- Dir.glob('config/locales/*.yml') do |locale_file|
5
- RSpec.describe locale_file do
6
- it { is_expected.to be_parseable }
7
- it { is_expected.to have_one_top_level_namespace }
8
- it { is_expected.to be_named_like_top_level_namespace }
9
- it { is_expected.to_not have_legacy_interpolations }
10
- it { is_expected.to have_a_valid_locale }
11
- it { is_expected.to be_a_subset_of 'config/locales/en.yml' }
12
- end
13
- end
14
-
15
- RSpec.describe 'I18n' do
16
- let(:i18n) { I18n::Tasks::BaseTask.new }
17
- let(:unused_keys) { i18n.unused_keys }
18
-
19
- let(:failure_msg) do
20
- <<-MSG.squish
21
- #{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to
22
- show them
23
- MSG
24
- end
25
-
26
- it 'does not have unused keys' do
27
- expect(unused_keys).to be_empty, failure_msg
28
- end
29
- end
@@ -1,36 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.shared_examples_for "ActiveAdmin::Localizers::ResourceLocalizer" do
4
- it "should use proper translation" do
5
- string = ActiveAdmin::Localizers::ResourceLocalizer.t(action, model: model, model_name: model_name)
6
- expect(string).to eq translation
7
- end
8
-
9
- it "should accessible via ActiveAdmin::Localizers" do
10
- resource = double(resource_label: model, resource_name: double(i18n_key: model_name))
11
- localizer = ActiveAdmin::Localizers.resource(resource)
12
- expect(localizer.t(action)).to eq translation
13
- end
14
- end
15
-
16
- RSpec.describe ActiveAdmin::Localizers::ResourceLocalizer do
17
- let(:action) { 'new_model' }
18
- let(:model) { 'Comment' }
19
- let(:model_name) { 'comment' }
20
-
21
- it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
22
- let(:translation) { 'New Comment' }
23
- end
24
-
25
- describe "model action specified" do
26
- around do |example|
27
- with_translation active_admin: {resources: {comment: {new_model: 'Write comment'}}} do
28
- example.call
29
- end
30
- end
31
-
32
- it_behaves_like "ActiveAdmin::Localizers::ResourceLocalizer" do
33
- let(:translation) { 'Write comment' }
34
- end
35
- end
36
- end
@@ -1,62 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::MenuCollection do
4
-
5
- let(:menus) { ActiveAdmin::MenuCollection.new }
6
-
7
- describe "#add" do
8
-
9
- it "should initialize a new menu when first item" do
10
- menus.add :default, label: "Hello World"
11
-
12
- expect(menus.fetch(:default).items.size).to eq 1
13
- expect(menus.fetch(:default)["Hello World"]).to be_an_instance_of(ActiveAdmin::MenuItem)
14
- end
15
-
16
- it "should add items to an existing menu" do
17
- menus.add :default, label: "Hello World"
18
- menus.add :default, label: "Hello World Again"
19
-
20
- expect(menus.fetch(:default).items.size).to eq 2
21
- end
22
-
23
- end
24
-
25
- describe "#clear!" do
26
-
27
- it "should remove all menus" do
28
- menus.add :default, label: "Hello World"
29
-
30
- menus.clear!
31
-
32
- expect {
33
- menus.fetch(:non_default_menu)
34
- }.to raise_error(ActiveAdmin::NoMenuError)
35
-
36
- end
37
-
38
- end
39
-
40
- describe "#on_build" do
41
-
42
- it "runs a callback when fetching a menu" do
43
- menus.on_build do |m|
44
- m.add :default, label: "Hello World"
45
- end
46
-
47
- expect(menus.fetch(:default)["Hello World"]).to_not eq nil
48
- end
49
-
50
- it "re-runs the callbacks when the menu is cleared" do
51
- menus.on_build do |m|
52
- m.add :default, label: "Hello World"
53
- end
54
-
55
- expect(menus.fetch(:default)["Hello World"]).to_not eq nil
56
- menus.clear!
57
- expect(menus.fetch(:default)["Hello World"]).to_not eq nil
58
- end
59
-
60
- end
61
-
62
- end
@@ -1,141 +0,0 @@
1
- require 'active_admin/menu'
2
- require 'active_admin/menu_item'
3
-
4
- module ActiveAdmin
5
- RSpec.describe MenuItem do
6
-
7
- it "should have a label" do
8
- item = MenuItem.new(label: "Dashboard")
9
- expect(item.label).to eq "Dashboard"
10
- end
11
-
12
- it "should have a url" do
13
- item = MenuItem.new(url: "/admin")
14
- expect(item.url).to eq "/admin"
15
- end
16
-
17
- it "should have a priority of 10 by default" do
18
- item = MenuItem.new
19
- expect(item.priority).to eq 10
20
- end
21
-
22
- context "conditional display" do
23
- it "should store a Proc internally and evaluate it when requested" do
24
- item = MenuItem.new
25
- expect(item.instance_variable_get(:@should_display)).to be_a Proc
26
- expect(item.display?).to_not be_a Proc
27
- end
28
-
29
- it "should show the item by default" do
30
- expect(MenuItem.new.display?).to eq true
31
- end
32
-
33
- it "should hide the item" do
34
- expect(MenuItem.new(if: proc{false}).display?).to eq false
35
- end
36
- end
37
-
38
- it "should default to an empty hash for html_options" do
39
- item = MenuItem.new
40
- expect(item.html_options).to be_empty
41
- end
42
-
43
- it "should accept an options hash for link_to" do
44
- item = MenuItem.new html_options: { target: :blank }
45
- expect(item.html_options).to include(target: :blank)
46
- end
47
-
48
- context "with no items" do
49
- it "should be empty" do
50
- item = MenuItem.new
51
- expect(item.items).to be_empty
52
- end
53
-
54
- it "should accept new children" do
55
- item = MenuItem.new label: "Dashboard"
56
- item.add label: "My Child Dashboard"
57
- expect(item.items.first).to be_a MenuItem
58
- expect(item.items.first.label).to eq "My Child Dashboard"
59
- end
60
- end
61
-
62
- context "with many children" do
63
- let(:item) do
64
- i = MenuItem.new(label: "Dashboard")
65
- i.add label: "Blog"
66
- i.add label: "Cars"
67
- i.add label: "Users", priority: 1
68
- i.add label: "Settings", priority: 2
69
- i.add label: "Analytics", priority: 44
70
- i
71
- end
72
-
73
- it "should contain 5 submenu items" do
74
- expect(item.items.count).to eq 5
75
- end
76
-
77
- it "should give access to the menu item as an array" do
78
- expect(item['Blog'].label).to eq 'Blog'
79
- end
80
-
81
- it "should sort items based on priority and name" do
82
- expect(item.items[0].label).to eq 'Users'
83
- expect(item.items[1].label).to eq 'Settings'
84
- expect(item.items[2].label).to eq 'Blog'
85
- expect(item.items[3].label).to eq 'Cars'
86
- expect(item.items[4].label).to eq 'Analytics'
87
- end
88
-
89
- it "children should hold a reference to their parent" do
90
- expect(item["Blog"].parent).to eq item
91
- end
92
- end
93
-
94
- describe "accessing ancestory" do
95
- let(:item){ MenuItem.new label: "Blog" }
96
-
97
- context "with no parent" do
98
- it "should return an empty array" do
99
- expect(item.ancestors).to eq []
100
- end
101
- end
102
-
103
- context "with one parent" do
104
- let(:sub_item) do
105
- item.add label: "Create New"
106
- item["Create New"]
107
- end
108
- it "should return an array with the parent" do
109
- expect(sub_item.ancestors).to eq [item]
110
- end
111
- end
112
-
113
- context "with many parents" do
114
- before(:each) do
115
- c1 = {label: "C1"}
116
- c2 = {label: "C2"}
117
- c3 = {label: "C3"}
118
-
119
- item.add(c1).add(c2).add(c3)
120
-
121
- item
122
- end
123
- let(:sub_item){ item["C1"]["C2"]["C3"] }
124
- it "should return an array with the parents in reverse order" do
125
- expect(sub_item.ancestors).to eq [item["C1"]["C2"], item["C1"], item]
126
- end
127
- end
128
- end # accessing ancestory
129
-
130
- describe "#id" do
131
- it "should be normalized" do
132
- expect(MenuItem.new(id: "Foo Bar").id).to eq "foo_bar"
133
- end
134
-
135
- it "should not accept Procs" do
136
- expect{ MenuItem.new(id: proc{"Dynamic"}).id }.to raise_error TypeError
137
- end
138
- end
139
-
140
- end
141
- end