blacklight 7.41.0 → 8.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +243 -14
  5. data/.rubocop_todo.yml +137 -429
  6. data/Gemfile +11 -6
  7. data/README.md +11 -3
  8. data/VERSION +1 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  11. data/app/assets/javascripts/blacklight/blacklight.js +374 -493
  12. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  13. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  16. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  17. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  18. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  19. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  20. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  22. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  23. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  24. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  25. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  26. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  27. data/app/builders/blacklight/action_builder.rb +18 -9
  28. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  29. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  30. data/app/components/blacklight/constraints_component.rb +27 -37
  31. data/app/components/blacklight/document/action_component.rb +12 -10
  32. data/app/components/blacklight/document/actions_component.rb +2 -2
  33. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  34. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  35. data/app/components/blacklight/document/citation_component.rb +5 -3
  36. data/app/components/blacklight/document/group_component.rb +7 -3
  37. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  38. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  39. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  40. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  41. data/app/components/blacklight/document_component.html.erb +1 -1
  42. data/app/components/blacklight/document_component.rb +16 -78
  43. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  44. data/app/components/blacklight/document_metadata_component.rb +5 -10
  45. data/app/components/blacklight/facet_component.rb +3 -3
  46. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  47. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  48. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  49. data/app/components/blacklight/facet_field_component.rb +9 -2
  50. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  51. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  52. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  53. data/app/components/blacklight/facet_item_component.rb +1 -43
  54. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  55. data/app/components/blacklight/header_component.rb +1 -1
  56. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  57. data/app/components/blacklight/icons/icon_component.rb +4 -9
  58. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  59. data/app/components/blacklight/icons/list_component.rb +16 -0
  60. data/app/components/blacklight/icons/search_component.rb +16 -0
  61. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  62. data/app/components/blacklight/metadata_field_component.rb +24 -8
  63. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  64. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  65. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  66. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  67. data/app/components/blacklight/response/pagination_component.rb +2 -11
  68. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  69. data/app/components/blacklight/response/sort_component.rb +1 -16
  70. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  71. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  72. data/app/components/blacklight/response/view_type_component.rb +4 -6
  73. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  74. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  75. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  76. data/app/components/blacklight/search_bar_component.rb +2 -16
  77. data/app/components/blacklight/search_button_component.rb +3 -3
  78. data/app/components/blacklight/search_context_component.rb +43 -10
  79. data/app/components/blacklight/search_header_component.html.erb +2 -0
  80. data/app/components/blacklight/search_header_component.rb +6 -0
  81. data/app/components/blacklight/start_over_button_component.rb +5 -3
  82. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  83. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  84. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  85. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  86. data/app/components/blacklight/system/modal_component.rb +1 -3
  87. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  88. data/app/components/blacklight/top_navbar_component.rb +0 -4
  89. data/app/controllers/bookmarks_controller.rb +1 -0
  90. data/app/controllers/catalog_controller.rb +1 -0
  91. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  92. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  93. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  94. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  95. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  96. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  97. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  98. data/app/controllers/search_history_controller.rb +1 -0
  99. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  100. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  101. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  102. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  103. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  104. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  105. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  106. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  107. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  108. data/app/helpers/blacklight_helper.rb +1 -0
  109. data/app/helpers/catalog_helper.rb +1 -0
  110. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  111. data/app/javascript/blacklight/button_focus.js +12 -10
  112. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  113. data/app/javascript/blacklight/core.js +5 -7
  114. data/app/javascript/blacklight/index.js +13 -0
  115. data/app/javascript/blacklight/modal.js +99 -164
  116. data/app/javascript/blacklight/modalForm.js +60 -0
  117. data/app/javascript/blacklight/search_context.js +46 -54
  118. data/app/models/blacklight/facet_paginator.rb +3 -2
  119. data/app/models/blacklight/icon.rb +4 -2
  120. data/app/models/bookmark.rb +0 -2
  121. data/app/models/concerns/blacklight/configurable.rb +5 -4
  122. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  123. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  124. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  125. data/app/models/concerns/blacklight/document/email.rb +1 -0
  126. data/app/models/concerns/blacklight/document/export.rb +2 -1
  127. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  128. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  129. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  130. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  131. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  132. data/app/models/concerns/blacklight/user.rb +17 -8
  133. data/app/models/record_mailer.rb +13 -12
  134. data/app/models/search.rb +1 -7
  135. data/app/models/solr_document.rb +1 -0
  136. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  137. data/app/presenters/blacklight/document_presenter.rb +23 -50
  138. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  139. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  140. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  141. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  142. data/app/presenters/blacklight/field_presenter.rb +1 -0
  143. data/app/presenters/blacklight/index_presenter.rb +2 -40
  144. data/app/presenters/blacklight/json_presenter.rb +10 -6
  145. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  146. data/app/presenters/blacklight/show_presenter.rb +1 -9
  147. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  148. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  149. data/app/services/blacklight/field_retriever.rb +12 -21
  150. data/app/services/blacklight/search_service.rb +10 -17
  151. data/app/values/blacklight/types.rb +0 -18
  152. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  153. data/app/views/bookmarks/_tools.html.erb +7 -12
  154. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  155. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  156. data/app/views/catalog/_citation.html.erb +1 -1
  157. data/app/views/catalog/_constraints.html.erb +1 -14
  158. data/app/views/catalog/_document.atom.builder +12 -14
  159. data/app/views/catalog/_document.html.erb +5 -3
  160. data/app/views/catalog/_document.rss.builder +2 -4
  161. data/app/views/catalog/_facet_layout.html.erb +2 -2
  162. data/app/views/catalog/_facets.html.erb +5 -4
  163. data/app/views/catalog/_home_text.html.erb +2 -14
  164. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  165. data/app/views/catalog/_search_form.html.erb +2 -2
  166. data/app/views/catalog/_search_header.html.erb +1 -2
  167. data/app/views/catalog/_search_results.html.erb +2 -2
  168. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  169. data/app/views/catalog/_show_main_content.html.erb +11 -16
  170. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  171. data/app/views/catalog/_show_tools.html.erb +8 -14
  172. data/app/views/catalog/_view_type_group.html.erb +1 -1
  173. data/app/views/catalog/email.html.erb +2 -2
  174. data/app/views/catalog/email_success.html.erb +5 -6
  175. data/app/views/catalog/facet.html.erb +7 -5
  176. data/app/views/catalog/index.atom.builder +12 -14
  177. data/app/views/catalog/index.html.erb +4 -1
  178. data/app/views/catalog/index.json.jbuilder +19 -19
  179. data/app/views/catalog/index.rss.builder +1 -1
  180. data/app/views/catalog/opensearch.xml.builder +1 -1
  181. data/app/views/catalog/sms.html.erb +2 -2
  182. data/app/views/catalog/sms_success.html.erb +5 -6
  183. data/app/views/catalog/suggest.html.erb +3 -0
  184. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  185. data/app/views/layouts/blacklight/base.html.erb +13 -2
  186. data/app/views/search_history/index.html.erb +6 -2
  187. data/app/views/shared/_flash_messages.html.erb +1 -1
  188. data/app/views/shared/_modal.html.erb +3 -3
  189. data/blacklight.gemspec +7 -11
  190. data/config/importmap.rb +3 -0
  191. data/config/locales/blacklight.ar.yml +0 -1
  192. data/config/locales/blacklight.ca.yml +0 -1
  193. data/config/locales/blacklight.de.yml +0 -1
  194. data/config/locales/blacklight.en.yml +0 -2
  195. data/config/locales/blacklight.es.yml +0 -1
  196. data/config/locales/blacklight.fr.yml +0 -1
  197. data/config/locales/blacklight.hu.yml +0 -1
  198. data/config/locales/blacklight.it.yml +0 -1
  199. data/config/locales/blacklight.nl.yml +0 -1
  200. data/config/locales/blacklight.pt-BR.yml +0 -1
  201. data/config/locales/blacklight.sq.yml +0 -1
  202. data/config/locales/blacklight.zh.yml +0 -1
  203. data/config/routes.rb +3 -2
  204. data/db/migrate/20140202020201_create_searches.rb +1 -0
  205. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  206. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  207. data/docker-compose.yml +3 -3
  208. data/lib/blacklight/abstract_repository.rb +1 -6
  209. data/lib/blacklight/component.rb +47 -10
  210. data/lib/blacklight/configuration/context.rb +4 -4
  211. data/lib/blacklight/configuration/display_field.rb +7 -9
  212. data/lib/blacklight/configuration/facet_field.rb +17 -11
  213. data/lib/blacklight/configuration/field.rb +1 -0
  214. data/lib/blacklight/configuration/fields.rb +12 -15
  215. data/lib/blacklight/configuration/index_field.rb +1 -0
  216. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  217. data/lib/blacklight/configuration/search_field.rb +1 -0
  218. data/lib/blacklight/configuration/show_field.rb +1 -0
  219. data/lib/blacklight/configuration/sort_field.rb +1 -0
  220. data/lib/blacklight/configuration/tool_config.rb +1 -0
  221. data/lib/blacklight/configuration/view_config.rb +14 -10
  222. data/lib/blacklight/configuration.rb +310 -365
  223. data/lib/blacklight/engine.rb +8 -24
  224. data/lib/blacklight/exceptions.rb +2 -2
  225. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  226. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  227. data/lib/blacklight/parameters.rb +7 -21
  228. data/lib/blacklight/routes/exportable.rb +1 -0
  229. data/lib/blacklight/routes/searchable.rb +2 -1
  230. data/lib/blacklight/routes.rb +1 -0
  231. data/lib/blacklight/search_builder.rb +10 -10
  232. data/lib/blacklight/search_state/filter_field.rb +8 -25
  233. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  234. data/lib/blacklight/search_state.rb +23 -79
  235. data/lib/blacklight/solr/document.rb +1 -0
  236. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  237. data/lib/blacklight/solr/repository.rb +4 -24
  238. data/lib/blacklight/solr/request.rb +1 -0
  239. data/lib/blacklight/solr/response/facets.rb +21 -5
  240. data/lib/blacklight/solr/response/group.rb +1 -0
  241. data/lib/blacklight/solr/response/group_response.rb +1 -0
  242. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  243. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  244. data/lib/blacklight/solr/response/params.rb +5 -4
  245. data/lib/blacklight/solr/response/response.rb +1 -0
  246. data/lib/blacklight/solr/response/spelling.rb +1 -0
  247. data/lib/blacklight/solr/response.rb +16 -3
  248. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  249. data/lib/blacklight/solr.rb +7 -0
  250. data/lib/blacklight/version.rb +1 -0
  251. data/lib/blacklight.rb +26 -14
  252. data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
  253. data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
  254. data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
  255. data/lib/generators/blacklight/assets_generator.rb +13 -86
  256. data/lib/generators/blacklight/controller_generator.rb +4 -3
  257. data/lib/generators/blacklight/document_generator.rb +1 -0
  258. data/lib/generators/blacklight/install_generator.rb +4 -3
  259. data/lib/generators/blacklight/models_generator.rb +1 -0
  260. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  261. data/lib/generators/blacklight/solr_generator.rb +1 -1
  262. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  263. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
  264. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  265. data/lib/generators/blacklight/user_generator.rb +7 -9
  266. data/lib/railties/blacklight.rake +6 -7
  267. data/package.json +10 -13
  268. data/rollup.config.js +27 -0
  269. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  270. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  271. data/spec/components/blacklight/document_component_spec.rb +22 -131
  272. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  273. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  274. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  275. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  276. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  277. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  278. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  279. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  280. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  281. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  282. data/spec/controllers/catalog_controller_spec.rb +13 -135
  283. data/spec/features/advanced_search_spec.rb +0 -56
  284. data/spec/features/autocomplete_spec.rb +1 -1
  285. data/spec/features/axe_spec.rb +1 -6
  286. data/spec/features/bookmarks_spec.rb +1 -1
  287. data/spec/features/facets_spec.rb +6 -4
  288. data/spec/features/search_context_spec.rb +5 -11
  289. data/spec/features/search_results_spec.rb +0 -33
  290. data/spec/features/sitelinks_search_box.rb +13 -0
  291. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  292. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  293. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  294. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  295. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  296. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  297. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  298. data/spec/helpers/catalog_helper_spec.rb +7 -118
  299. data/spec/i18n_spec.rb +1 -0
  300. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  301. data/spec/lib/blacklight/component_spec.rb +27 -32
  302. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  303. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  304. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  305. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  306. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  307. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  308. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  309. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  310. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  311. data/spec/models/blacklight/configuration_spec.rb +17 -51
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  313. data/spec/models/blacklight/icon_spec.rb +31 -15
  314. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  315. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  316. data/spec/models/blacklight/solr/repository_spec.rb +0 -45
  317. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  318. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  319. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  320. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  321. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  322. data/spec/models/blacklight/user_spec.rb +22 -0
  323. data/spec/models/solr_document_spec.rb +3 -9
  324. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  325. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  326. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  327. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  328. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  329. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  330. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  331. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  333. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  334. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  335. data/spec/requests/load_suggestions_spec.rb +16 -0
  336. data/spec/routing/catalog_routing_spec.rb +2 -1
  337. data/spec/services/blacklight/search_service_spec.rb +39 -76
  338. data/spec/spec_helper.rb +8 -9
  339. data/spec/support/controller_level_helpers.rb +1 -2
  340. data/spec/support/features/search_helpers.rb +39 -0
  341. data/spec/support/features/session_helpers.rb +1 -0
  342. data/spec/support/features.rb +3 -0
  343. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  344. data/spec/test_app_templates/Gemfile.extra +1 -0
  345. data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
  346. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  347. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  348. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  349. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  350. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  351. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  352. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  353. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  354. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  355. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  356. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  357. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  358. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  360. data/tasks/blacklight.rake +11 -9
  361. data/template.demo.rb +7 -7
  362. metadata +77 -189
  363. data/.babelrc +0 -11
  364. data/.github/matrix.json +0 -62
  365. data/.github/workflows/build.yml +0 -16
  366. data/.github/workflows/lint.yml +0 -23
  367. data/.github/workflows/main.yml +0 -23
  368. data/.github/workflows/test.yml +0 -53
  369. data/app/assets/images/blacklight/list.svg +0 -1
  370. data/app/assets/images/blacklight/search.svg +0 -1
  371. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  372. data/app/components/blacklight/content_areas_shim.rb +0 -13
  373. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  374. data/app/components/blacklight/search/per_page_component.rb +0 -50
  375. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  376. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  377. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  378. data/app/controllers/concerns/blacklight/base.rb +0 -12
  379. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  380. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  381. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  382. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  383. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  384. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  385. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  386. data/app/javascript/blacklight/autocomplete.js +0 -36
  387. data/app/javascript/blacklight/facet_load.js +0 -22
  388. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  389. data/app/views/catalog/_constraints_element.html.erb +0 -14
  390. data/app/views/catalog/_document_action.html.erb +0 -5
  391. data/app/views/catalog/_facet_group.html.erb +0 -5
  392. data/app/views/catalog/_facet_limit.html.erb +0 -3
  393. data/app/views/catalog/_index.html.erb +0 -1
  394. data/app/views/catalog/_index_header.html.erb +0 -22
  395. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  396. data/app/views/catalog/_show.html.erb +0 -6
  397. data/app/views/catalog/_show_header.html.erb +0 -2
  398. data/app/views/catalog/_thumbnail.html.erb +0 -1
  399. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  400. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  401. data/spec/components/blacklight/header_component_spec.rb +0 -20
  402. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  403. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  404. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  405. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  406. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  407. data/spec/features/citation_spec.rb +0 -10
  408. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  409. data/spec/features/sms_spec.rb +0 -12
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  416. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  417. data/spec/support/view_component_test_helpers.rb +0 -35
  418. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  419. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  420. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  421. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  422. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  423. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  424. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  425. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Blacklight::UrlHelperBehavior do
4
- around { |test| Deprecation.silence(described_class) { test.call } }
5
-
6
4
  let(:blacklight_config) do
7
5
  Blacklight::Configuration.new.configure do |config|
8
6
  config.index.title_field = 'title_tsim'
@@ -14,6 +12,7 @@ RSpec.describe Blacklight::UrlHelperBehavior do
14
12
 
15
13
  before do
16
14
  allow(controller).to receive(:controller_name).and_return('test')
15
+ allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
17
16
  allow(helper).to receive(:search_action_path) do |*args|
18
17
  search_catalog_url *args
19
18
  end
@@ -23,54 +22,6 @@ RSpec.describe Blacklight::UrlHelperBehavior do
23
22
  allow(helper).to receive(:search_session).and_return({})
24
23
  end
25
24
 
26
- describe "url_for_document" do
27
- let(:controller_class) { ::CatalogController.new }
28
- let(:doc) { SolrDocument.new }
29
-
30
- before do
31
- allow(helper).to receive_messages(controller: controller_class)
32
- allow(helper).to receive_messages(controller_name: controller_class.controller_name)
33
- allow(helper).to receive_messages(params: parameter_class.new)
34
- end
35
-
36
- it "is a polymorphic routing-ready object" do
37
- expect(helper.url_for_document(doc)).to eq doc
38
- end
39
-
40
- it "allows for custom show routes" do
41
- helper.blacklight_config.show.route = { controller: 'catalog' }
42
- expect(helper.url_for_document(doc)).to eq(controller: 'catalog', action: :show, id: doc)
43
- end
44
-
45
- context "within bookmarks" do
46
- let(:controller_class) { ::BookmarksController.new }
47
-
48
- it "uses polymorphic routing" do
49
- expect(helper.url_for_document(doc)).to eq doc
50
- end
51
- end
52
-
53
- context "within an alternative catalog controller" do
54
- let(:controller_class) { ::AlternateController.new }
55
-
56
- before do
57
- helper.blacklight_config.show.route = { controller: :current }
58
- allow(helper).to receive(:params).and_return(parameter_class.new(controller: 'alternate'))
59
- end
60
-
61
- it "supports the :current controller configuration" do
62
- expect(helper.url_for_document(doc)).to eq(controller: 'alternate', action: :show, id: doc)
63
- end
64
- end
65
-
66
- it "is a polymorphic route if the solr document responds to #to_model with a non-SolrDocument" do
67
- some_model = double
68
- doc = SolrDocument.new
69
- allow(doc).to receive_messages(to_model: some_model)
70
- expect(helper.url_for_document(doc)).to eq doc
71
- end
72
- end
73
-
74
25
  describe "link_back_to_catalog" do
75
26
  let(:query_params) { { q: "query", f: "facets", controller: 'catalog' } }
76
27
  let(:bookmarks_query_params) { { controller: 'bookmarks' } }
@@ -148,61 +99,6 @@ RSpec.describe Blacklight::UrlHelperBehavior do
148
99
  end
149
100
  end
150
101
 
151
- describe "link_to_previous_document" do
152
- context "when the argument is nil" do
153
- subject { helper.link_to_previous_document(nil) }
154
-
155
- it { is_expected.to eq '<span class="previous">&laquo; Previous</span>' }
156
- end
157
- end
158
-
159
- describe "link_to_query" do
160
- it "builds a link tag to catalog using query string (no other params)" do
161
- query = "brilliant"
162
- allow(helper).to receive_messages(params: parameter_class.new)
163
- tag = helper.link_to_query(query)
164
- expect(tag).to match /q=#{query}/
165
- expect(tag).to match %r{>#{query}</a>}
166
- end
167
-
168
- it "builds a link tag to catalog using query string and other existing params" do
169
- query = "wonderful"
170
- allow(helper).to receive_messages(params: parameter_class.new(qt: "title_search", per_page: "50"))
171
- tag = helper.link_to_query(query)
172
- expect(tag).to match /qt=title_search/
173
- expect(tag).to match /per_page=50/
174
- end
175
-
176
- it "ignores existing :page param" do
177
- query = "yes"
178
- allow(helper).to receive_messages(params: parameter_class.new(page: "2", qt: "author_search"))
179
- tag = helper.link_to_query(query)
180
- expect(tag).to match /qt=author_search/
181
- expect(tag).not_to match /page/
182
- end
183
-
184
- it "is html_safe" do
185
- query = "brilliant"
186
- allow(helper).to receive_messages(params: parameter_class.new(page: "2", qt: "author_search"))
187
- tag = helper.link_to_query(query)
188
- expect(tag).to be_html_safe
189
- end
190
- end
191
-
192
- describe "start_over_path" do
193
- it 'is the catalog path with the current view type' do
194
- allow(blacklight_config).to receive(:view).and_return(list: nil, abc: nil)
195
- allow(helper).to receive_messages(blacklight_config: blacklight_config)
196
- expect(helper.start_over_path(view: 'abc')).to eq search_catalog_url(view: 'abc')
197
- end
198
-
199
- it 'does not include the current view type if it is the default' do
200
- allow(blacklight_config).to receive(:view).and_return(list: nil, asdf: nil)
201
- allow(helper).to receive_messages(blacklight_config: blacklight_config)
202
- expect(helper.start_over_path(view: 'list')).to eq search_catalog_url
203
- end
204
- end
205
-
206
102
  describe "link_to_document" do
207
103
  let(:title_tsim) { '654321' }
208
104
  let(:id) { '123456' }
@@ -216,30 +112,22 @@ RSpec.describe Blacklight::UrlHelperBehavior do
216
112
  end
217
113
 
218
114
  it "consists of the document title wrapped in a <a>" do
219
- allow(Deprecation).to receive(:warn)
220
- expect(helper.link_to_document(document, :title_tsim)).to have_selector("a", text: '654321', count: 1)
115
+ expect(helper.link_to_document(document)).to have_selector("a", text: '654321', count: 1)
221
116
  end
222
117
 
223
118
  it "accepts and returns a string label" do
224
119
  expect(helper.link_to_document(document, 'This is the title')).to have_selector("a", text: 'This is the title', count: 1)
225
120
  end
226
121
 
227
- it "accepts and returns a Proc" do
228
- allow(Deprecation).to receive(:warn)
229
- expect(helper.link_to_document(document, proc { |doc, _opts| doc[:id] + ": " + doc.first(:title_tsim) })).to have_selector("a", text: '123456: 654321', count: 1)
230
- end
231
-
232
122
  context 'when label is missing' do
233
123
  let(:data) { { 'id' => id } }
234
124
 
235
125
  it "returns id" do
236
- allow(Deprecation).to receive(:warn)
237
- expect(helper.link_to_document(document, :title_tsim)).to have_selector("a", text: '123456', count: 1)
126
+ expect(helper.link_to_document(document)).to have_selector("a", text: '123456', count: 1)
238
127
  end
239
128
 
240
129
  it "is html safe" do
241
- allow(Deprecation).to receive(:warn)
242
- expect(helper.link_to_document(document, :title_tsim)).to be_html_safe
130
+ expect(helper.link_to_document(document)).to be_html_safe
243
131
  end
244
132
 
245
133
  it "passes on the title attribute to the link_to_with_data method" do
@@ -253,15 +141,14 @@ RSpec.describe Blacklight::UrlHelperBehavior do
253
141
  context "with an integer id" do
254
142
  let(:id) { 123_456 }
255
143
 
256
- it "works" do
144
+ it "has a link" do
257
145
  expect(helper.link_to_document(document)).to have_selector("a")
258
146
  end
259
147
  end
260
148
  end
261
149
 
262
150
  it "converts the counter parameter into a data- attribute" do
263
- allow(Deprecation).to receive(:warn)
264
- expect(helper.link_to_document(document, :title_tsim, counter: 5)).to include 'data-context-href="tracking url"'
151
+ expect(helper.link_to_document(document, 'foo', counter: 5)).to include 'data-context-href="tracking url"'
265
152
  expect(helper.main_app).to have_received(:track_test_path).with(hash_including(id: have_attributes(id: '123456'), counter: 5))
266
153
  end
267
154
 
@@ -279,19 +166,10 @@ RSpec.describe Blacklight::UrlHelperBehavior do
279
166
  end
280
167
 
281
168
  describe "link_to_previous_search" do
282
- let(:params) { {} }
169
+ let(:params) { { q: 'search query' } }
283
170
 
284
171
  it "links to the given search parameters" do
285
- allow(helper).to receive(:render_search_to_s).with(params).and_return "link text"
286
- expect(helper.link_to_previous_search({})).to eq helper.link_to("link text", helper.search_action_path)
287
- end
288
- end
289
-
290
- describe "#bookmarks_export_url" do
291
- it "is the bookmark url with an encrypted user token" do
292
- allow(helper).to receive_messages(encrypt_user_id: 'xyz', current_or_guest_user: double(id: 123))
293
- url = helper.bookmarks_export_url(:html)
294
- expect(url).to eq helper.bookmarks_url(format: :html, encrypted_user_id: 'xyz')
172
+ expect(helper.link_to_previous_search(params)).to have_link(href: helper.search_action_path(params)).and(have_text('search query'))
295
173
  end
296
174
  end
297
175
 
@@ -310,7 +188,7 @@ RSpec.describe Blacklight::UrlHelperBehavior do
310
188
 
311
189
  it "uses the track_search_session configuration to determine whether to track the search session" do
312
190
  blacklight_config.track_search_session = false
313
- expect(helper.session_tracking_path(document, x: 1)).to eq nil
191
+ expect(helper.session_tracking_path(document, x: 1)).to be_nil
314
192
  end
315
193
  end
316
194
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  RSpec.describe BlacklightHelper do
3
4
  before do
4
5
  allow(helper).to receive(:current_or_guest_user).and_return(User.new)
@@ -16,7 +17,7 @@ RSpec.describe BlacklightHelper do
16
17
  expect(application_name).to eq "Blacklight"
17
18
  end
18
19
 
19
- context "when the language is not english " do
20
+ context "when the language is not english" do
20
21
  around do |example|
21
22
  I18n.locale = :de
22
23
  example.run
@@ -72,7 +73,7 @@ RSpec.describe BlacklightHelper do
72
73
  end
73
74
 
74
75
  before do
75
- allow(helper).to receive(:presenter).and_return(presenter)
76
+ allow(helper).to receive(:document_presenter).and_return(presenter)
76
77
  allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
77
78
  end
78
79
 
@@ -131,104 +132,6 @@ RSpec.describe BlacklightHelper do
131
132
  expect(helper.render_index_doc_actions(document)).to be_blank
132
133
  end
133
134
  end
134
-
135
- describe "render_show_doc_actions" do
136
- it "renders partials" do
137
- response = helper.render_show_doc_actions(document)
138
- expect(response).to have_selector(".bookmark-toggle")
139
- end
140
- end
141
- end
142
-
143
- describe "#should_render_index_field?" do
144
- before do
145
- allow(helper).to receive_messages(should_render_field?: true, document_has_value?: true)
146
- end
147
-
148
- it "is true" do
149
- expect(Deprecation).to receive(:warn)
150
- expect(helper.should_render_index_field?(double, double)).to be true
151
- end
152
-
153
- it "is false if the document doesn't have a value for the field" do
154
- expect(Deprecation).to receive(:warn)
155
- allow(helper).to receive_messages(document_has_value?: false)
156
- expect(helper.should_render_index_field?(double, double)).to be false
157
- end
158
-
159
- it "is false if the configuration has the field disabled" do
160
- expect(Deprecation).to receive(:warn)
161
- allow(helper).to receive_messages(should_render_field?: false)
162
- expect(helper.should_render_index_field?(double, double)).to be false
163
- end
164
- end
165
-
166
- describe "#should_render_show_field?" do
167
- before do
168
- allow(helper).to receive_messages(should_render_field?: true, document_has_value?: true)
169
- end
170
-
171
- it "is true" do
172
- expect(Deprecation).to receive(:warn)
173
- expect(helper.should_render_show_field?(double, double)).to be true
174
- end
175
-
176
- it "is false if the document doesn't have a value for the field" do
177
- expect(Deprecation).to receive(:warn)
178
- allow(helper).to receive_messages(document_has_value?: false)
179
- expect(helper.should_render_show_field?(double, double)).to be false
180
- end
181
-
182
- it "is false if the configuration has the field disabled" do
183
- expect(Deprecation).to receive(:warn)
184
- allow(helper).to receive_messages(should_render_field?: false)
185
- expect(helper.should_render_show_field?(double, double)).to be false
186
- end
187
- end
188
-
189
- describe "#document_has_value?" do
190
- let(:doc) { double(SolrDocument) }
191
-
192
- before { allow(Deprecation).to receive(:warn) }
193
-
194
- it "ifs the document has the field value" do
195
- allow(doc).to receive(:has?).with('asdf').and_return(true)
196
- field_config = double(field: 'asdf')
197
- expect(helper.document_has_value?(doc, field_config)).to eq true
198
- end
199
-
200
- it "ifs the document has a highlight field value" do
201
- allow(doc).to receive(:has?).with('asdf').and_return(false)
202
- allow(doc).to receive(:has_highlight_field?).with('asdf').and_return(true)
203
- field_config = double(field: 'asdf', highlight: true)
204
- expect(helper.document_has_value?(doc, field_config)).to eq true
205
- end
206
-
207
- it "ifs the field has a model accessor" do
208
- allow(doc).to receive(:has?).with('asdf').and_return(false)
209
- allow(doc).to receive(:has_highlight_field?).with('asdf').and_return(false)
210
- field_config = double(field: 'asdf', highlight: true, accessor: true)
211
- expect(helper.document_has_value?(doc, field_config)).to eq true
212
- end
213
- end
214
-
215
- describe '#render_index_field_label' do
216
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
217
-
218
- let(:doc) { SolrDocument.new({}) }
219
-
220
- before do
221
- allow(helper).to receive_messages(document_index_view_type: :current_view)
222
- end
223
-
224
- it 'accepts an explicit field label' do
225
- expect(helper.render_index_field_label(doc, field: 'xyz', label: 'some label')).to eq 'some label:'
226
- end
227
-
228
- it 'calculates the appropriate field label for a field' do
229
- allow(helper).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
230
- expect(helper.render_index_field_label(doc, field: 'xyz')).to eq 'Xyz:'
231
- end
232
135
  end
233
136
 
234
137
  describe "render_grouped_response?" do
@@ -243,43 +146,6 @@ RSpec.describe BlacklightHelper do
243
146
  end
244
147
  end
245
148
 
246
- describe "render_grouped_document_index" do
247
- pending 'not implemented'
248
- end
249
-
250
- describe "should_show_spellcheck_suggestions?" do
251
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
252
-
253
- before do
254
- allow(helper).to receive_messages spell_check_max: 5
255
- end
256
-
257
- it "does not show suggestions if there are enough results" do
258
- response = double(total: 10)
259
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
260
- end
261
-
262
- it "only shows suggestions if there are very few results" do
263
- response = double(total: 4, spelling: double(words: [1]))
264
- expect(helper.should_show_spellcheck_suggestions?(response)).to be true
265
- end
266
-
267
- it "only shows suggestions from collations" do
268
- response = double(total: 4, spelling: double(words: [], collation: { blah: 1 }))
269
- expect(helper.should_show_spellcheck_suggestions?(response)).to be true
270
- end
271
-
272
- it "shows suggestions only if there are spelling suggestions available" do
273
- response = double(total: 4, spelling: double(words: [], collation: nil))
274
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
275
- end
276
-
277
- it "does not show suggestions if spelling is not available" do
278
- response = double(total: 4, spelling: nil)
279
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
280
- end
281
- end
282
-
283
149
  describe "#opensearch_description_tag" do
284
150
  subject { helper.opensearch_description_tag 'title', 'href' }
285
151
 
@@ -331,17 +197,12 @@ RSpec.describe BlacklightHelper do
331
197
  blacklight_config.view.gallery(template: '/my/partial')
332
198
  end
333
199
 
200
+ def stub_template(hash)
201
+ view.view_paths.unshift(ActionView::FixtureResolver.new(hash))
202
+ end
203
+
334
204
  it 'renders that template' do
335
- # Not sure why we need to re-implement rspec's stub_template, but
336
- # we already were, and need a Rails 7.1+ safe alternate too
337
- # https://github.com/rspec/rspec-rails/commit/4d65bea0619955acb15023b9c3f57a3a53183da8
338
- # https://github.com/rspec/rspec-rails/issues/2696
339
- replace_hash = { 'my/_partial.html.erb' => 'some content' }
340
- if ::Rails.version.to_f >= 7.1
341
- controller.prepend_view_path(RSpec::Rails::ViewExampleGroup::StubResolverCache.resolver_for(replace_hash))
342
- else
343
- view.view_paths.unshift(ActionView::FixtureResolver.new(replace_hash))
344
- end
205
+ stub_template 'my/_partial.html.erb' => 'some content'
345
206
 
346
207
  response = helper.render_document_index_with_view :gallery, [obj1, obj1]
347
208
 
@@ -393,109 +254,4 @@ RSpec.describe BlacklightHelper do
393
254
  end
394
255
  end
395
256
  end
396
-
397
- context "related classes" do
398
- let(:presenter_class) { double }
399
- let(:blacklight_config) { Blacklight::Configuration.new }
400
-
401
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
402
-
403
- before do
404
- allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
405
- end
406
-
407
- describe "#index_presenter_class" do
408
- it "uses the value defined in the blacklight configuration" do
409
- blacklight_config.index.document_presenter_class = presenter_class
410
- expect(helper.index_presenter_class(nil)).to eq presenter_class
411
- end
412
-
413
- it "defaults to Blacklight::IndexPresenter" do
414
- expect(helper.index_presenter_class(nil)).to eq Blacklight::IndexPresenter
415
- end
416
- end
417
-
418
- describe "#show_presenter_class" do
419
- it "uses the value defined in the blacklight configuration" do
420
- blacklight_config.show.document_presenter_class = presenter_class
421
- expect(helper.show_presenter_class(nil)).to eq presenter_class
422
- end
423
-
424
- it "defaults to Blacklight::DocumentPresenter" do
425
- expect(helper.show_presenter_class(nil)).to eq Blacklight::ShowPresenter
426
- end
427
- end
428
- end
429
-
430
- describe "#render_document_heading" do
431
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
432
-
433
- let(:document) { double }
434
-
435
- before do
436
- allow(helper).to receive(:presenter).and_return(double(heading: "Heading"))
437
- end
438
-
439
- it "accepts no arguments and render the document heading" do
440
- expect(helper.render_document_heading).to have_selector "h4", text: "Heading"
441
- end
442
-
443
- it "accepts the tag name as an option" do
444
- expect(helper.render_document_heading(tag: "h1")).to have_selector "h1", text: "Heading"
445
- end
446
-
447
- it "accepts an explicit document argument" do
448
- allow(helper).to receive(:presenter).with(document).and_return(double(heading: "Document Heading"))
449
- expect(helper.render_document_heading(document)).to have_selector "h4", text: "Document Heading"
450
- end
451
-
452
- it "accepts the document with a tag option" do
453
- allow(helper).to receive(:presenter).with(document).and_return(double(heading: "Document Heading"))
454
- expect(helper.render_document_heading(document, tag: "h3")).to have_selector "h3", text: "Document Heading"
455
- end
456
- end
457
-
458
- describe "#presenter" do
459
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
460
-
461
- let(:document) { double }
462
-
463
- before do
464
- allow(helper).to receive(:index_presenter).and_return(:index_presenter)
465
- allow(helper).to receive(:show_presenter).and_return(:show_presenter)
466
- allow(helper).to receive(:action_name).and_return(action_name)
467
- end
468
-
469
- context "action is show" do
470
- let(:action_name) { "show" }
471
-
472
- it "uses the show presenter" do
473
- expect(helper.presenter(document)).to eq(:show_presenter)
474
- end
475
- end
476
-
477
- context "action is citation" do
478
- let(:action_name) { "citation" }
479
-
480
- it "uses the show presenter" do
481
- expect(helper.presenter(document)).to eq(:show_presenter)
482
- end
483
- end
484
-
485
- context "action is index" do
486
- let(:action_name) { "index" }
487
-
488
- it "uses the index presenter" do
489
- expect(helper.presenter(document)).to eq(:index_presenter)
490
- end
491
- end
492
-
493
- context "action is foo" do
494
- let(:action_name) { "foo" }
495
-
496
- it "uses the index presenter (by default)" do
497
- expect(helper.presenter(document)).to eq(:index_presenter)
498
- end
499
- end
500
- end
501
257
  end
@@ -164,111 +164,6 @@ RSpec.describe CatalogHelper do
164
164
  end
165
165
  end
166
166
 
167
- describe "should_autofocus_on_search_box?" do
168
- before do
169
- allow(Deprecation).to receive(:warn)
170
- end
171
-
172
- it "is focused if we're on a catalog-like index page without query or facet parameters" do
173
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "index", has_search_parameters?: false)
174
- expect(helper.should_autofocus_on_search_box?).to be true
175
- end
176
-
177
- it "does not be focused if we're not on a catalog controller" do
178
- allow(helper).to receive_messages(controller: ApplicationController.new)
179
- expect(helper.should_autofocus_on_search_box?).to be false
180
- end
181
-
182
- it "does not be focused if we're not on a catalog controller index" do
183
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "show")
184
- expect(helper.should_autofocus_on_search_box?).to be false
185
- end
186
-
187
- it "does not be focused if a search parameters are provided" do
188
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "index", has_search_parameters?: true)
189
- expect(helper.should_autofocus_on_search_box?).to be false
190
- end
191
- end
192
-
193
- describe "has_thumbnail?" do
194
- before do
195
- allow(Deprecation).to receive(:warn)
196
- end
197
-
198
- let(:document) { SolrDocument.new(data) }
199
- let(:data) { {} }
200
-
201
- it "has a thumbnail if a thumbnail_method is configured" do
202
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_method: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
203
- expect(helper.has_thumbnail?(document)).to be true
204
- end
205
-
206
- context "if a thumbnail_field is configured and it exists in the document" do
207
- let(:data) { { xyz: 'abc' } }
208
-
209
- it "has a thumbnail" do
210
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
211
- expect(helper.has_thumbnail?(document)).to be true
212
- end
213
- end
214
-
215
- it "does not have a thumbnail if the thumbnail_field is missing from the document" do
216
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
217
- allow(document).to receive_messages(has?: false)
218
- expect(helper.has_thumbnail?(document)).to be false
219
- end
220
-
221
- it "does not have a thumbnail if none of the fields are configured" do
222
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(document_presenter_class: Blacklight::IndexPresenter)))
223
- expect(helper).not_to have_thumbnail(document)
224
- end
225
- end
226
-
227
- describe "render_thumbnail_tag" do
228
- let(:index_presenter) do
229
- instance_double(Blacklight::IndexPresenter, thumbnail: thumbnail_presenter)
230
- end
231
- let(:thumbnail_presenter) { instance_double(Blacklight::ThumbnailPresenter) }
232
-
233
- before do
234
- allow(Deprecation).to receive(:warn)
235
- allow(helper).to receive(:index_presenter).with(document).and_return(index_presenter)
236
- end
237
-
238
- let(:document) { instance_double(SolrDocument) }
239
-
240
- it "calls thumbnail presenter with default values" do
241
- expect(thumbnail_presenter).to receive(:thumbnail_tag).with({}, {})
242
- helper.render_thumbnail_tag document
243
- end
244
-
245
- it "calls thumbnail presenter with provided values" do
246
- expect(thumbnail_presenter).to receive(:thumbnail_tag).with({}, { suppress_link: true })
247
- helper.render_thumbnail_tag document, {}, suppress_link: true
248
- end
249
- end
250
-
251
- describe "thumbnail_url" do
252
- before do
253
- allow(Deprecation).to receive(:warn)
254
- end
255
-
256
- it "pulls the configured thumbnail field out of the document" do
257
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)))
258
- document = instance_double(SolrDocument)
259
- allow(document).to receive(:has?).with(:xyz).and_return(true)
260
- allow(document).to receive(:first).with(:xyz).and_return("asdf")
261
- expect(helper.thumbnail_url(document)).to eq("asdf")
262
- end
263
-
264
- it "returns nil if the thumbnail field doesn't exist" do
265
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)))
266
- document = instance_double(SolrDocument)
267
- allow(document).to receive(:has?).with(:xyz).and_return(false)
268
- expect(helper.thumbnail_url(document)).to be_nil
269
- end
270
- end
271
-
272
167
  describe "document_counter_with_offset" do
273
168
  it "renders the document index with the appropriate offset" do
274
169
  assign(:response, instance_double(Blacklight::Solr::Response, start: 0, grouped?: false))
@@ -299,32 +194,32 @@ RSpec.describe CatalogHelper do
299
194
 
300
195
  it "pulls data out of a document's field" do
301
196
  blacklight_config.index.display_type_field = :type
302
- doc = { type: 'book' }
197
+ doc = { type: 'book' }.with_indifferent_access
303
198
  expect(helper.render_document_class(doc)).to eq "blacklight-book"
304
199
  end
305
200
 
306
201
  it "supports multivalued fields" do
307
202
  blacklight_config.index.display_type_field = :type
308
- doc = { type: %w[book mss] }
203
+ doc = { type: %w[book mss] }.with_indifferent_access
309
204
  expect(helper.render_document_class(doc)).to eq "blacklight-book blacklight-mss"
310
205
  end
311
206
 
312
207
  it "supports empty fields" do
313
208
  blacklight_config.index.display_type_field = :type
314
- doc = { type: [] }
209
+ doc = { type: [] }.with_indifferent_access
315
210
  expect(helper.render_document_class(doc)).to be_blank
316
211
  end
317
212
 
318
213
  it "supports missing fields" do
319
214
  blacklight_config.index.display_type_field = :type
320
- doc = {}
215
+ doc = {}.with_indifferent_access
321
216
  expect(helper.render_document_class(doc)).to be_blank
322
217
  end
323
218
 
324
219
  it "supports view-specific field configuration" do
325
220
  allow(helper).to receive(:document_index_view_type).and_return(:some_view_type)
326
221
  blacklight_config.view.some_view_type(display_type_field: :other_type)
327
- doc = { other_type: "document" }
222
+ doc = { other_type: "document" }.with_indifferent_access
328
223
  expect(helper.render_document_class(doc)).to eq "blacklight-document"
329
224
  end
330
225
  end
@@ -338,11 +233,11 @@ RSpec.describe CatalogHelper do
338
233
  end
339
234
 
340
235
  it "is bookmarked if the document is in the bookmarks" do
341
- expect(helper.bookmarked?(bookmarked_document)).to eq true
236
+ expect(helper.bookmarked?(bookmarked_document)).to be true
342
237
  end
343
238
 
344
239
  it "does not be bookmarked if the document is not listed in the bookmarks" do
345
- expect(helper.bookmarked?(SolrDocument.new(id: 'b'))).to eq false
240
+ expect(helper.bookmarked?(SolrDocument.new(id: 'b'))).to be false
346
241
  end
347
242
  end
348
243
 
@@ -388,11 +283,5 @@ RSpec.describe CatalogHelper do
388
283
 
389
284
  it { is_expected.to eq "foobar / Format: Book" }
390
285
  end
391
-
392
- context 'when the f param is not an array' do
393
- let(:params) { ActionController::Parameters.new(q: 'foobar', f: { format: 'Book' }) }
394
-
395
- it { is_expected.to eq "foobar / Format: Book" }
396
- end
397
286
  end
398
287
  end