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,47 +0,0 @@
1
- Then /^I should see a select filter for "([^"]*)"$/ do |label|
2
- expect(page).to have_css '.filter_select label', text: label
3
- end
4
-
5
- Then /^I should see a string filter for "([^"]*)"$/ do |label|
6
- expect(page).to have_css '.filter_string label', text: label
7
- end
8
-
9
- Then /^I should see a date range filter for "([^"]*)"$/ do |label|
10
- expect(page).to have_css '.filter_date_range label', text: label
11
- end
12
-
13
- Then /^I should see the following filters:$/ do |table|
14
- table.rows_hash.each do |label, type|
15
- step %{I should see a #{type} filter for "#{label}"}
16
- end
17
- end
18
-
19
- Given(/^I add parameter "([^"]*)" with value "([^"]*)" to the URL$/) do |key, value|
20
- url = page.current_url
21
- separator = url.include?('?') ? '&' : '?'
22
- visit url + separator + key.to_s + '=' + value.to_s
23
- end
24
-
25
- Then(/^I should( not)? have parameter "([^"]*)" with value "([^"]*)"$/) do |negative, key, value|
26
- query = URI(page.current_url).query
27
- if query.nil?
28
- expect(negative).to eq true
29
- else
30
- params = Rack::Utils.parse_query query
31
- expect(params[key]).to_not eq value if negative
32
- expect(params[key]).to eq value unless negative
33
- end
34
- end
35
-
36
- Then /^I should see current filter "([^"]*)" equal to "([^"]*)" with label "([^"]*)"$/ do |name, value, label|
37
- expect(page).to have_css "li.current_filter_#{name} span", text: label
38
- expect(page).to have_css "li.current_filter_#{name} b", text: value
39
- end
40
-
41
- Then /^I should see current filter "([^"]*)" equal to "([^"]*)"$/ do |name, value|
42
- expect(page).to have_css "li.current_filter_#{name} b", text: value
43
- end
44
-
45
- Then /^I should see link "([^"]*)" in current filters/ do |label|
46
- expect(page).to have_css "li.current_filter b a", text: label
47
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a flash with "([^"]*)"$/ do |text|
2
- expect(page).to have_content text
3
- end
4
-
5
- Then /^I should see a successful create flash$/ do
6
- expect(page).to have_css 'div.flash_notice', text: /was successfully created/
7
- end
8
-
9
- Then /^I should not see a successful create flash$/ do
10
- expect(page).to_not have_css 'div.flash_notice', text: /was successfully created/
11
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see the default footer$/ do
2
- expect(page).to have_css '#footer', text: "Powered by Active Admin #{ActiveAdmin::VERSION}"
3
- end
4
-
5
- Then /^I should see the footer "([^"]*)"$/ do |footer|
6
- expect(page).to have_css '#footer', text: footer
7
- end
8
-
9
- Then /^I should not see the footer "([^"]*)"$/ do |footer|
10
- expect(page).to_not have_css '#footer', text: footer
11
- end
@@ -1,56 +0,0 @@
1
- require 'csv'
2
-
3
- Then "I should see nicely formatted datetimes" do
4
- expect(page.body).to match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
5
- end
6
-
7
- Then /^I should( not)? see a link to download "([^"]*)"$/ do |negate, format|
8
- method = negate ? :to_not : :to
9
- expect(page).send method, have_css("#index_footer a", text: format)
10
- end
11
-
12
- # Check first rows of the displayed CSV.
13
- Then /^I should download a CSV file with "([^"]*)" separator for "([^"]*)" containing:$/ do |sep, resource_name, table|
14
- body = page.driver.response.body
15
- content_type_header, content_disposition_header = %w[Content-Type Content-Disposition].map do |header_name|
16
- page.response_headers[header_name]
17
- end
18
- expect(content_type_header).to eq 'text/csv; charset=utf-8'
19
- expect(content_disposition_header).to match /\Aattachment; filename=".+?\.csv"\z/
20
-
21
- begin
22
- csv = CSV.parse(body, col_sep: sep)
23
- table.raw.each_with_index do |expected_row, row_index|
24
- expected_row.each_with_index do |expected_cell, col_index|
25
- cell = csv.try(:[], row_index).try(:[], col_index)
26
- if expected_cell.blank?
27
- expect(cell).to eq nil
28
- else
29
- expect(cell || '').to match /#{expected_cell}/
30
- end
31
- end
32
- end
33
- rescue
34
- puts "Expecting:"
35
- p table.raw
36
- puts "to match:"
37
- p csv
38
- raise $!
39
- end
40
- end
41
-
42
- Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
43
- step %{I should download a CSV file with "," separator for "#{resource_name}" containing:}, table
44
- end
45
-
46
- Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
47
- expect(page.driver.response.body).to match /"#{text}"/
48
- end
49
-
50
- Then /^the encoding of the CSV file should be "([^"]*)"$/ do |text|
51
- expect(page.driver.response.body.encoding).to be Encoding.find(Encoding.aliases[text] || text)
52
- end
53
-
54
- Then /^access denied$/ do
55
- expect(page).to have_content(I18n.t("active_admin.access_denied.message"))
56
- end
@@ -1,11 +0,0 @@
1
- Given /^String "([^"]*)" corresponds to "([^"]*)"$/ do |translation, key|
2
- *seq, last_key = key.split('.')
3
- result = seq.reverse.inject({last_key.to_sym => translation}) do |temp_result, nested_key|
4
- {nested_key.to_sym => temp_result}
5
- end
6
- I18n.backend.store_translations :en, active_admin: result
7
- end
8
-
9
- When /^I set my locale to "([^"]*)"$/ do |lang|
10
- I18n.locale = lang
11
- end
@@ -1,29 +0,0 @@
1
- Then /^I should( not)? see the scope "([^"]*)"( selected)?$/ do |negate, name, selected|
2
- should = "I should#{' not' if negate}"
3
- scope = ".scopes#{' .selected' if selected}"
4
- step %{#{should} see "#{name}" within "#{scope}"}
5
- end
6
-
7
- Then /^I should see the scope "([^"]*)" not selected$/ do |name|
8
- step %{I should see the scope "#{name}"}
9
- expect(page).to_not have_css '.scopes .selected', text: name
10
- end
11
-
12
- Then /^I should see the scope "([^"]*)" with the count (\d+)$/ do |name, count|
13
- name = name.tr(' ', '').underscore.downcase
14
- step %{I should see "#{count}" within ".scopes .#{name} .count"}
15
- end
16
-
17
- Then /^I should see the scope with label "([^"]*)"$/ do |label|
18
- expect(page).to have_link(label)
19
- end
20
-
21
- Then /^I should see the current scope with label "([^"]*)"$/ do |label|
22
- expect(page).to have_css '.current_scope_name', text: label
23
- end
24
-
25
- Then /^I should see the scope "([^"]*)" with no count$/ do |name|
26
- name = name.tr(" ", "").underscore.downcase
27
- expect(page).to have_css ".scopes .#{name}"
28
- expect(page).to_not have_css ".scopes .#{name} .count"
29
- end
@@ -1,3 +0,0 @@
1
- When /^I click "(.*?)"$/ do |link|
2
- click_link(link)
3
- end
@@ -1,3 +0,0 @@
1
- Then /^I should see the Active Admin layout$/ do
2
- expect(page).to have_css '#active_admin_content #main_content_wrapper'
3
- end
@@ -1,7 +0,0 @@
1
- Then /^I should see an action item button "([^"]*)"$/ do |content|
2
- expect(page).to have_css '.action_items a', text: content
3
- end
4
-
5
- Then /^I should not see an action item button "([^"]*)"$/ do |content|
6
- expect(page).to_not have_css '.action_items', text: content
7
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a menu item for "([^"]*)"$/ do |name|
2
- expect(page).to have_css '#tabs > li > a', text: name
3
- end
4
-
5
- Then /^I should not see a menu item for "([^"]*)"$/ do |name|
6
- expect(page).to_not have_css '#tabs > li > a', text: name
7
- end
8
-
9
- Then /^I should see a nested menu item for "([^"]*)"$/ do |name|
10
- expect(page).to have_css '#tabs > li > ul > li > a', text: name
11
- end
@@ -1,3 +0,0 @@
1
- Then /^the site should contain a meta tag with name "([^"]*)" and content "([^"]*)"$/ do |name, content|
2
- expect(page).to have_xpath("//meta[@name='#{name}' and @content='#{content}']", visible: false)
3
- end
@@ -1,15 +0,0 @@
1
- Then /^I should not see pagination$/ do
2
- expect(page).to_not have_css '.pagination'
3
- end
4
-
5
- Then /^I should see pagination with (\d+) pages$/ do |count|
6
- expect(page).to have_css '.pagination span.page', count: count
7
- end
8
-
9
- Then /^I should see the pagination "Next" link/ do
10
- expect(page).to have_css "a", text: "Next"
11
- end
12
-
13
- Then /^I should not see the pagination "Next" link/ do
14
- expect(page).to_not have_css "a", text: "Next"
15
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
2
- expect(page).to have_css '.sidebar_section h3', text: title
3
- end
4
-
5
- Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
6
- expect(page).not_to have_css '.sidebar_section h3', text: title
7
- end
8
-
9
- Then(/^I should see a sidebar titled "(.*?)" above sidebar titled "(.*?)"$/) do |top_title, bottom_title|
10
- expect(page).to have_css %Q(.sidebar_section:contains('#{top_title}') + .sidebar_section:contains('#{bottom_title}'))
11
- end
@@ -1,17 +0,0 @@
1
- Then /^I should see the site title "([^"]*)"$/ do |title|
2
- expect(page).to have_css 'h1#site_title', text: title
3
- end
4
-
5
- Then /^I should not see the site title "([^"]*)"$/ do |title|
6
- expect(page).to_not have_css 'h1#site_title', text: title
7
- end
8
-
9
- Then /^I should see the site title image "([^"]*)"$/ do |image|
10
- img = page.find('h1#site_title img')
11
- expect(img[:src]).to eq(image)
12
- end
13
-
14
- Then /^I should see the site title image linked to "([^"]*)"$/ do |url|
15
- link = page.find('h1#site_title a')
16
- expect(link[:href]).to eq(url)
17
- end
@@ -1,8 +0,0 @@
1
- Then /^the "([^"]*)" tab should be selected$/ do |name|
2
- step %{I should see "#{name}" within "ul#tabs li.current"}
3
- end
4
-
5
- Then(/^I should see two tabs "(.*?)" and "(.*?)"$/) do |tab_1, tab_2|
6
- expect(page).to have_link(tab_1)
7
- expect(page).to have_link(tab_2)
8
- end
@@ -1,116 +0,0 @@
1
- Then /^I should see (\d+) ([\w]*) in the table$/ do |count, resource_type|
2
- expect(page).to \
3
- have_css("table.index_table tr > td:first-child", count: count.to_i)
4
- end
5
-
6
- # TODO: simplify this, if possible?
7
- class HtmlTableToTextHelper
8
- def initialize(html, table_css_selector = "table")
9
- @html = html
10
- @selector = table_css_selector
11
- end
12
-
13
- def to_array
14
- rows = Nokogiri::HTML(@html).css("#{@selector} tr")
15
- rows.map do |row|
16
- row.css('th, td').map do |td|
17
- cell_to_string(td)
18
- end
19
- end
20
- end
21
-
22
- private
23
-
24
- def cell_to_string(td)
25
- str = ""
26
- input = td.css('input').last
27
-
28
- if input
29
- str << input_to_string(input)
30
- end
31
-
32
- str << td.content.strip.gsub("\n", ' ')
33
- end
34
-
35
- def input_to_string(input)
36
- case input.attribute("type").value
37
- when "checkbox"
38
- if input.attribute("disabled")
39
- "_"
40
- else
41
- if input.attribute("checked")
42
- "[X]"
43
- else
44
- "[ ]"
45
- end
46
- end
47
- when "text"
48
- if input.attribute("value").present?
49
- "[#{input.attribute("value")}]"
50
- else
51
- "[ ]"
52
- end
53
- when "submit"
54
- input.attribute("value")
55
- else
56
- raise "I don't know what to do with #{input}"
57
- end
58
- end
59
- end
60
-
61
- module TableMatchHelper
62
- # @param table [Array[Array]]
63
- # @param expected_table [Array[Array[String]]]
64
- # The expected_table values are String. They are converted to
65
- # Regexp when they start and end with a '/'
66
- # Example:
67
- #
68
- # assert_table_match(
69
- # [["Name", "Date"], ["Philippe", "Feb 08"]],
70
- # [["Name", "Date"], ["Philippe", "/\w{3} \d{2}/"]]
71
- # )
72
- def assert_tables_match(table, expected_table)
73
- expected_table.each_index do |row_index|
74
- expected_table[row_index].each_index do |column_index|
75
- expected_cell = expected_table[row_index][column_index]
76
- cell = table.try(:[], row_index).try(:[], column_index)
77
- begin
78
- assert_cells_match(cell, expected_cell)
79
- rescue
80
- puts "Cell at line #{row_index} and column #{column_index}: #{cell.inspect} does not match #{expected_cell.inspect}"
81
- puts "Expecting:"
82
- table.each { |row| puts row.inspect }
83
- puts "to match:"
84
- expected_table.each { |row| puts row.inspect }
85
- raise $!
86
- end
87
- end
88
- end
89
- end
90
-
91
- def assert_cells_match(cell, expected_cell)
92
- if expected_cell =~ /^\/.*\/$/
93
- expect(cell).to match /#{expected_cell[1..-2]}/
94
- else
95
- expect((cell || "").strip).to eq expected_cell
96
- end
97
- end
98
- end
99
-
100
- World(TableMatchHelper)
101
-
102
- # Usage:
103
- #
104
- # I should see the "invoices" table:
105
- # | Invoice # | Date | Total Amount |
106
- # | /\d+/ | 27/01/12 | $30.00 |
107
- # | /\d+/ | 12/02/12 | $25.00 |
108
- #
109
- Then /^I should see the "([^"]*)" table:$/ do |table_id, expected_table|
110
- expect(page).to have_css "table##{table_id}"
111
-
112
- assert_tables_match(
113
- HtmlTableToTextHelper.new(page.body, "table##{table_id}").to_array,
114
- expected_table.raw
115
- )
116
- end
@@ -1,52 +0,0 @@
1
- def ensure_user_created(email)
2
- user = AdminUser.where(email: email).first_or_create(password: 'password', password_confirmation: 'password')
3
-
4
- unless user.persisted?
5
- raise "Could not create user #{email}: #{user.errors.full_messages}"
6
- end
7
- user
8
- end
9
-
10
- Given /^(?:I am logged|log) out$/ do
11
- click_link 'Logout' if page.all(:css, "a", text: 'Logout').any?
12
- end
13
-
14
- Given /^I am logged in$/ do
15
- step 'log out'
16
- login_as ensure_user_created 'admin@example.com'
17
- end
18
-
19
- # only for @requires-reloading scenario
20
- Given /^I am logged in with capybara$/ do
21
- ensure_user_created 'admin@example.com'
22
- step 'log out'
23
-
24
- visit new_admin_user_session_path
25
- fill_in 'Email', with: 'admin@example.com'
26
- fill_in 'Password', with: 'password'
27
- click_button 'Login'
28
- end
29
-
30
- Given /^an admin user "([^"]*)" exists$/ do |email|
31
- ensure_user_created(email)
32
- end
33
-
34
- Given /^"([^"]*)" requests a password reset with token "([^"]*)"( but it expires)?$/ do |email, token, expired|
35
- visit new_admin_user_password_path
36
- fill_in 'Email', with: email
37
- allow(Devise).to receive(:friendly_token).and_return(token)
38
- click_button "Reset My Password"
39
-
40
- AdminUser.where(email: email).first.update_attribute :reset_password_sent_at, 1.month.ago if expired
41
- end
42
-
43
- Given /^override locale "([^"]*)" with "([^"]*)"$/ do |path, value|
44
- keys_value = path.split('.') + [value]
45
- locale_hash = keys_value.reverse.inject{|a, n| {n=>a}}
46
- I18n.available_locales
47
- I18n.backend.store_translations(I18n.locale, locale_hash)
48
- end
49
-
50
- When /^I fill in the password field with "([^"]*)"$/ do |password|
51
- fill_in 'admin_user_password', with: password
52
- end
@@ -1,86 +0,0 @@
1
- require 'uri'
2
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
3
- require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
4
-
5
- module WithinHelpers
6
- def with_scope(locator)
7
- locator ? within(*selector_for(locator)) { yield } : yield
8
- end
9
- end
10
- World(WithinHelpers)
11
-
12
- # Single-line step scoper
13
- When /^(.*) within (.*[^:])$/ do |step_name, parent|
14
- with_scope(parent) { step step_name }
15
- end
16
-
17
- # Multi-line step scoper
18
- When /^(.*) within (.*[^:]):$/ do |step_name, parent, table_or_string|
19
- with_scope(parent) { step "#{step_name}:", table_or_string }
20
- end
21
-
22
- Given /^(?:I )am on (.+)$/ do |page_name|
23
- visit path_to(page_name)
24
- end
25
-
26
- When /^(?:I )go to (.+)$/ do |page_name|
27
- visit path_to(page_name)
28
- end
29
-
30
- When /^(?:I )press "([^"]*)"$/ do |button|
31
- click_button(button)
32
- end
33
-
34
- When /^(?:I )follow "([^"]*)"$/ do |link|
35
- first(:link, link).click
36
- end
37
-
38
- When /^(?:I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
39
- fill_in(field, with: value)
40
- end
41
-
42
- When /^(?:I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
43
- select(value, from: field)
44
- end
45
-
46
- When /^(?:I )(check|uncheck|choose) "([^"]*)"$/ do |action, field|
47
- send action, field
48
- end
49
-
50
- When /^(?:I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
51
- attach_file(field, File.expand_path(path))
52
- end
53
-
54
- Then /^(?:I )should( not)? see( the element)? "([^"]*)"$/ do |negate, is_css, text|
55
- should = negate ? :not_to : :to
56
- have = is_css ? have_css(text) : have_content(text)
57
- expect(page).send should, have
58
- end
59
-
60
- Then /^the "([^"]*)" field(?: within (.*))? should( not)? contain "([^"]*)"$/ do |field, parent, negate, value|
61
- with_scope(parent) do
62
- field = find_field(field)
63
- value = field.tag_name == 'textarea' ? field.text : field.value
64
-
65
- expect(value).send negate ? :not_to : :to, match(/#{value}/)
66
- end
67
- end
68
-
69
- Then /^the "([^"]*)" checkbox(?: within (.*))? should( not)? be checked$/ do |label, parent, negate|
70
- with_scope(parent) do
71
- checkbox = find_field(label)
72
- if negate
73
- expect(checkbox).not_to be_checked
74
- else
75
- expect(checkbox).to be_checked
76
- end
77
- end
78
- end
79
-
80
- Then /^(?:|I )should be on (.+)$/ do |page_name|
81
- expect(URI.parse(current_url).path).to eq path_to page_name
82
- end
83
-
84
- Then /^show me the page$/ do
85
- save_and_open_page
86
- end