blacklight 7.43.1 → 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 (432) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +244 -15
  5. data/.rubocop_todo.yml +137 -429
  6. data/.solr_wrapper.yml +1 -3
  7. data/Gemfile +11 -6
  8. data/README.md +11 -3
  9. data/VERSION +1 -1
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js +162 -374
  11. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  12. data/app/assets/javascripts/blacklight/blacklight.js +374 -488
  13. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  14. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  15. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  16. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  17. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  18. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  19. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  20. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  21. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  22. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  23. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  24. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  25. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  26. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  27. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  28. data/app/builders/blacklight/action_builder.rb +18 -9
  29. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  30. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  31. data/app/components/blacklight/constraints_component.rb +27 -37
  32. data/app/components/blacklight/document/action_component.rb +12 -10
  33. data/app/components/blacklight/document/actions_component.rb +2 -2
  34. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  35. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  36. data/app/components/blacklight/document/citation_component.rb +5 -3
  37. data/app/components/blacklight/document/group_component.rb +7 -3
  38. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  39. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  40. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  41. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  42. data/app/components/blacklight/document_component.html.erb +1 -1
  43. data/app/components/blacklight/document_component.rb +16 -78
  44. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  45. data/app/components/blacklight/document_metadata_component.rb +5 -10
  46. data/app/components/blacklight/facet_component.rb +3 -3
  47. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  48. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  49. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  50. data/app/components/blacklight/facet_field_component.rb +9 -2
  51. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  52. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  53. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  54. data/app/components/blacklight/facet_item_component.rb +1 -43
  55. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  56. data/app/components/blacklight/header_component.rb +1 -1
  57. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  58. data/app/components/blacklight/icons/icon_component.rb +4 -9
  59. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  60. data/app/components/blacklight/icons/list_component.rb +16 -0
  61. data/app/components/blacklight/icons/search_component.rb +16 -0
  62. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  63. data/app/components/blacklight/metadata_field_component.rb +24 -8
  64. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  65. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  66. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  67. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  68. data/app/components/blacklight/response/pagination_component.rb +2 -11
  69. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  70. data/app/components/blacklight/response/sort_component.rb +1 -16
  71. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  72. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  73. data/app/components/blacklight/response/view_type_component.rb +4 -6
  74. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  75. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  76. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  77. data/app/components/blacklight/search_bar_component.rb +2 -16
  78. data/app/components/blacklight/search_button_component.rb +3 -3
  79. data/app/components/blacklight/search_context_component.rb +43 -10
  80. data/app/components/blacklight/search_header_component.html.erb +2 -0
  81. data/app/components/blacklight/search_header_component.rb +6 -0
  82. data/app/components/blacklight/start_over_button_component.rb +5 -3
  83. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  84. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  85. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  86. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  87. data/app/components/blacklight/system/modal_component.rb +1 -3
  88. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  89. data/app/components/blacklight/top_navbar_component.rb +0 -4
  90. data/app/controllers/bookmarks_controller.rb +1 -0
  91. data/app/controllers/catalog_controller.rb +1 -0
  92. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  93. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  94. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  95. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  96. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  97. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  98. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  99. data/app/controllers/search_history_controller.rb +1 -0
  100. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  101. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  102. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  103. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  104. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  105. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  106. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  107. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  108. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  109. data/app/helpers/blacklight_helper.rb +1 -0
  110. data/app/helpers/catalog_helper.rb +1 -0
  111. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  112. data/app/javascript/blacklight/button_focus.js +12 -10
  113. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  114. data/app/javascript/blacklight/core.js +5 -7
  115. data/app/javascript/blacklight/index.js +13 -0
  116. data/app/javascript/blacklight/modal.js +99 -164
  117. data/app/javascript/blacklight/modalForm.js +60 -0
  118. data/app/javascript/blacklight/search_context.js +46 -54
  119. data/app/models/blacklight/facet_paginator.rb +3 -2
  120. data/app/models/blacklight/icon.rb +4 -2
  121. data/app/models/bookmark.rb +0 -2
  122. data/app/models/concerns/blacklight/configurable.rb +5 -4
  123. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  124. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  125. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  126. data/app/models/concerns/blacklight/document/email.rb +1 -0
  127. data/app/models/concerns/blacklight/document/export.rb +2 -1
  128. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  129. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  130. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  131. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  132. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  133. data/app/models/concerns/blacklight/user.rb +17 -8
  134. data/app/models/record_mailer.rb +13 -12
  135. data/app/models/search.rb +1 -7
  136. data/app/models/solr_document.rb +1 -0
  137. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  138. data/app/presenters/blacklight/document_presenter.rb +23 -50
  139. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  140. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  141. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  142. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  143. data/app/presenters/blacklight/field_presenter.rb +1 -0
  144. data/app/presenters/blacklight/index_presenter.rb +2 -40
  145. data/app/presenters/blacklight/json_presenter.rb +10 -6
  146. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  147. data/app/presenters/blacklight/show_presenter.rb +1 -9
  148. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  149. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  150. data/app/services/blacklight/field_retriever.rb +12 -21
  151. data/app/services/blacklight/search_service.rb +10 -17
  152. data/app/values/blacklight/types.rb +0 -18
  153. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  154. data/app/views/bookmarks/_tools.html.erb +7 -12
  155. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  156. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  157. data/app/views/catalog/_citation.html.erb +1 -1
  158. data/app/views/catalog/_constraints.html.erb +1 -14
  159. data/app/views/catalog/_document.atom.builder +12 -14
  160. data/app/views/catalog/_document.html.erb +5 -3
  161. data/app/views/catalog/_document.rss.builder +2 -4
  162. data/app/views/catalog/_facet_layout.html.erb +2 -2
  163. data/app/views/catalog/_facets.html.erb +5 -4
  164. data/app/views/catalog/_home_text.html.erb +2 -14
  165. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  166. data/app/views/catalog/_search_form.html.erb +2 -2
  167. data/app/views/catalog/_search_header.html.erb +1 -2
  168. data/app/views/catalog/_search_results.html.erb +2 -2
  169. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  170. data/app/views/catalog/_show_main_content.html.erb +11 -16
  171. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  172. data/app/views/catalog/_show_tools.html.erb +8 -14
  173. data/app/views/catalog/_view_type_group.html.erb +1 -1
  174. data/app/views/catalog/email.html.erb +2 -2
  175. data/app/views/catalog/email_success.html.erb +5 -6
  176. data/app/views/catalog/facet.html.erb +7 -5
  177. data/app/views/catalog/index.atom.builder +12 -14
  178. data/app/views/catalog/index.html.erb +4 -1
  179. data/app/views/catalog/index.json.jbuilder +19 -19
  180. data/app/views/catalog/index.rss.builder +1 -1
  181. data/app/views/catalog/opensearch.xml.builder +1 -1
  182. data/app/views/catalog/sms.html.erb +2 -2
  183. data/app/views/catalog/sms_success.html.erb +5 -6
  184. data/app/views/catalog/suggest.html.erb +3 -0
  185. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  186. data/app/views/layouts/blacklight/base.html.erb +13 -2
  187. data/app/views/search_history/index.html.erb +6 -2
  188. data/app/views/shared/_flash_messages.html.erb +1 -1
  189. data/app/views/shared/_modal.html.erb +3 -3
  190. data/blacklight.gemspec +7 -13
  191. data/config/importmap.rb +1 -1
  192. data/config/locales/blacklight.ar.yml +0 -1
  193. data/config/locales/blacklight.ca.yml +0 -1
  194. data/config/locales/blacklight.de.yml +0 -1
  195. data/config/locales/blacklight.en.yml +0 -2
  196. data/config/locales/blacklight.es.yml +0 -1
  197. data/config/locales/blacklight.fr.yml +0 -1
  198. data/config/locales/blacklight.hu.yml +0 -1
  199. data/config/locales/blacklight.it.yml +0 -1
  200. data/config/locales/blacklight.nl.yml +0 -1
  201. data/config/locales/blacklight.pt-BR.yml +0 -1
  202. data/config/locales/blacklight.sq.yml +0 -1
  203. data/config/locales/blacklight.zh.yml +0 -1
  204. data/config/routes.rb +3 -2
  205. data/db/migrate/20140202020201_create_searches.rb +1 -0
  206. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  207. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  208. data/docker-compose.yml +3 -3
  209. data/lib/blacklight/abstract_repository.rb +1 -8
  210. data/lib/blacklight/component.rb +47 -10
  211. data/lib/blacklight/configuration/context.rb +4 -4
  212. data/lib/blacklight/configuration/display_field.rb +7 -9
  213. data/lib/blacklight/configuration/facet_field.rb +17 -11
  214. data/lib/blacklight/configuration/field.rb +7 -6
  215. data/lib/blacklight/configuration/fields.rb +12 -15
  216. data/lib/blacklight/configuration/index_field.rb +1 -0
  217. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  218. data/lib/blacklight/configuration/search_field.rb +1 -0
  219. data/lib/blacklight/configuration/show_field.rb +1 -0
  220. data/lib/blacklight/configuration/sort_field.rb +3 -2
  221. data/lib/blacklight/configuration/tool_config.rb +1 -0
  222. data/lib/blacklight/configuration/view_config.rb +14 -10
  223. data/lib/blacklight/configuration.rb +310 -365
  224. data/lib/blacklight/engine.rb +8 -38
  225. data/lib/blacklight/exceptions.rb +2 -2
  226. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  227. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  228. data/lib/blacklight/parameters.rb +7 -21
  229. data/lib/blacklight/routes/exportable.rb +1 -0
  230. data/lib/blacklight/routes/searchable.rb +2 -1
  231. data/lib/blacklight/routes.rb +1 -0
  232. data/lib/blacklight/runtime_registry.rb +0 -24
  233. data/lib/blacklight/search_builder.rb +10 -10
  234. data/lib/blacklight/search_state/filter_field.rb +8 -25
  235. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  236. data/lib/blacklight/search_state.rb +23 -79
  237. data/lib/blacklight/solr/document.rb +1 -0
  238. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  239. data/lib/blacklight/solr/repository.rb +14 -39
  240. data/lib/blacklight/solr/request.rb +1 -0
  241. data/lib/blacklight/solr/response/facets.rb +21 -5
  242. data/lib/blacklight/solr/response/group.rb +1 -0
  243. data/lib/blacklight/solr/response/group_response.rb +1 -0
  244. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  245. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  246. data/lib/blacklight/solr/response/params.rb +5 -4
  247. data/lib/blacklight/solr/response/response.rb +1 -0
  248. data/lib/blacklight/solr/response/spelling.rb +1 -0
  249. data/lib/blacklight/solr/response.rb +16 -3
  250. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  251. data/lib/blacklight/solr.rb +7 -0
  252. data/lib/blacklight/version.rb +1 -0
  253. data/lib/blacklight.rb +26 -14
  254. data/lib/generators/blacklight/assets/importmap_generator.rb +8 -9
  255. data/lib/generators/blacklight/assets/propshaft_generator.rb +2 -11
  256. data/lib/generators/blacklight/assets/sprockets_generator.rb +17 -51
  257. data/lib/generators/blacklight/assets_generator.rb +11 -7
  258. data/lib/generators/blacklight/controller_generator.rb +4 -3
  259. data/lib/generators/blacklight/document_generator.rb +1 -0
  260. data/lib/generators/blacklight/install_generator.rb +3 -5
  261. data/lib/generators/blacklight/models_generator.rb +1 -0
  262. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  263. data/lib/generators/blacklight/solr_generator.rb +1 -1
  264. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  265. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +6 -71
  266. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  267. data/lib/generators/blacklight/user_generator.rb +7 -9
  268. data/lib/railties/blacklight.rake +6 -7
  269. data/package.json +10 -13
  270. data/rollup.config.js +27 -0
  271. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  272. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  273. data/spec/components/blacklight/document_component_spec.rb +22 -131
  274. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  275. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  276. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  277. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  278. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  279. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  280. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  281. data/spec/controllers/application_controller_spec.rb +0 -23
  282. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  283. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  284. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  285. data/spec/controllers/catalog_controller_spec.rb +13 -135
  286. data/spec/features/advanced_search_spec.rb +0 -56
  287. data/spec/features/autocomplete_spec.rb +1 -1
  288. data/spec/features/axe_spec.rb +1 -6
  289. data/spec/features/bookmarks_spec.rb +1 -1
  290. data/spec/features/facets_spec.rb +6 -4
  291. data/spec/features/search_context_spec.rb +5 -11
  292. data/spec/features/search_results_spec.rb +0 -33
  293. data/spec/features/sitelinks_search_box.rb +13 -0
  294. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  295. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -386
  296. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  297. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  298. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  299. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  300. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  301. data/spec/helpers/catalog_helper_spec.rb +7 -118
  302. data/spec/i18n_spec.rb +1 -0
  303. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  304. data/spec/lib/blacklight/component_spec.rb +27 -32
  305. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  306. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  307. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  308. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  309. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  310. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  311. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  312. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  313. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  314. data/spec/models/blacklight/configuration_spec.rb +17 -51
  315. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  316. data/spec/models/blacklight/document/dublin_core_spec.rb +2 -2
  317. data/spec/models/blacklight/icon_spec.rb +31 -15
  318. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  319. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  320. data/spec/models/blacklight/solr/repository_spec.rb +0 -114
  321. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  322. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  323. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  324. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  325. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  326. data/spec/models/blacklight/user_spec.rb +22 -0
  327. data/spec/models/solr_document_spec.rb +3 -9
  328. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  329. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  330. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  331. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  333. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  334. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  335. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  336. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  337. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  338. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  339. data/spec/requests/load_suggestions_spec.rb +16 -0
  340. data/spec/routing/catalog_routing_spec.rb +2 -1
  341. data/spec/services/blacklight/search_service_spec.rb +39 -76
  342. data/spec/spec_helper.rb +8 -9
  343. data/spec/support/controller_level_helpers.rb +1 -2
  344. data/spec/support/features/search_helpers.rb +39 -0
  345. data/spec/support/features/session_helpers.rb +1 -0
  346. data/spec/support/features.rb +3 -0
  347. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  348. data/spec/test_app_templates/Gemfile.extra +1 -0
  349. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -1
  350. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  351. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  352. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  353. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  354. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  355. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  356. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  357. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  358. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  359. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  360. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  361. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  362. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  363. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  364. data/tasks/blacklight.rake +11 -9
  365. data/template.demo.rb +7 -7
  366. metadata +68 -219
  367. data/.babelrc +0 -11
  368. data/.github/matrix.json +0 -71
  369. data/.github/workflows/build.yml +0 -16
  370. data/.github/workflows/lint.yml +0 -23
  371. data/.github/workflows/main.yml +0 -23
  372. data/.github/workflows/test.yml +0 -52
  373. data/app/assets/images/blacklight/list.svg +0 -1
  374. data/app/assets/images/blacklight/search.svg +0 -1
  375. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  376. data/app/components/blacklight/content_areas_shim.rb +0 -13
  377. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  378. data/app/components/blacklight/search/per_page_component.rb +0 -50
  379. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  380. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  381. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  382. data/app/controllers/concerns/blacklight/base.rb +0 -12
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  393. data/app/views/catalog/_constraints_element.html.erb +0 -14
  394. data/app/views/catalog/_document_action.html.erb +0 -5
  395. data/app/views/catalog/_facet_group.html.erb +0 -5
  396. data/app/views/catalog/_facet_limit.html.erb +0 -3
  397. data/app/views/catalog/_index.html.erb +0 -1
  398. data/app/views/catalog/_index_header.html.erb +0 -22
  399. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  400. data/app/views/catalog/_show.html.erb +0 -6
  401. data/app/views/catalog/_show_header.html.erb +0 -2
  402. data/app/views/catalog/_thumbnail.html.erb +0 -1
  403. data/lib/blacklight/controller_runtime.rb +0 -42
  404. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  405. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  406. data/lib/blacklight/log_subscriber.rb +0 -25
  407. data/spec/components/blacklight/header_component_spec.rb +0 -20
  408. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  409. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  410. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  411. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  412. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  413. data/spec/features/citation_spec.rb +0 -10
  414. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  415. data/spec/features/sms_spec.rb +0 -12
  416. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  417. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  418. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  419. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  420. data/spec/lib/blacklight/engine_spec.rb +0 -41
  421. data/spec/lib/blacklight/runtime_registry_spec.rb +0 -46
  422. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  423. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  424. data/spec/support/view_component_test_helpers.rb +0 -35
  425. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  426. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  427. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  428. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  429. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  430. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  431. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  432. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::HeaderComponent, type: :component do
4
- before do
5
- with_controller_class(CatalogController) do
6
- allow(controller).to receive(:current_user).and_return(nil)
7
- allow(controller).to receive(:search_action_url).and_return('/search')
8
- render
9
- end
10
- end
11
-
12
- context 'with no slots' do
13
- let(:render) { render_inline(described_class.new(blacklight_config: CatalogController.blacklight_config)) }
14
-
15
- it 'draws the topbar' do
16
- expect(page).to have_css 'nav.topbar'
17
- expect(page).to have_link 'Blacklight', href: '/'
18
- end
19
- end
20
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Blacklight::Icons::IconComponent, type: :component do
6
- subject(:component) { sub_component.new }
7
-
8
- let(:sub_component) do
9
- Class.new(described_class) do
10
- def self.name
11
- 'TestIconComponent'
12
- end
13
- end
14
- end
15
-
16
- context 'when no classes are passed in' do
17
- subject(:component) { sub_component.new }
18
-
19
- it "renders component" do
20
- render_inline(component)
21
- expect(page).to have_css "span[class='blacklight-icons blacklight-icons-test_icon']"
22
- end
23
- end
24
-
25
- context 'when classes are passed in' do
26
- subject(:component) { sub_component.new(classes: 'my-icon') }
27
-
28
- it "renders component" do
29
- render_inline(component)
30
- expect(page).to have_css "span[class='my-icon blacklight-icons blacklight-icons-test_icon']"
31
- end
32
- end
33
-
34
- context 'when name is passed in' do
35
- subject(:component) { sub_component.new(name: 'my-icon') }
36
-
37
- it "renders component" do
38
- render_inline(component)
39
- expect(page).to have_css "span[class='blacklight-icons blacklight-icons-my-icon']"
40
- end
41
- end
42
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Blacklight::Response::PaginationComponent, type: :component do
6
- let(:render) do
7
- with_request_url '/catalog?q=foo' do
8
- render_inline(instance)
9
- end
10
- end
11
-
12
- let(:instance) { described_class.new(response: response) }
13
-
14
- context 'when there are many results' do
15
- let(:response) { instance_double(Blacklight::Solr::Response, total: 10, current_page: 5, limit_value: 10_000, total_pages: 100) }
16
-
17
- context 'with default config' do
18
- before { render }
19
-
20
- it "has links to deep pages" do
21
- expect(page).not_to have_link '98'
22
- expect(page).to have_link '99'
23
- expect(page).to have_link '100'
24
- expect(page).not_to have_link '101'
25
- end
26
- end
27
-
28
- context 'when a different configuration that removes deep links is passed as a parameter' do
29
- let(:instance) { described_class.new(response: response, left: 5, right: 0, outer_window: nil) }
30
-
31
- before { render }
32
-
33
- it "does not link to deep pages" do
34
- expect(page).to have_link '1'
35
- expect(page).not_to have_link '100'
36
- end
37
- end
38
-
39
- context 'when a different configuration that removes deep links is configured in the controller' do
40
- before do
41
- allow(controller.blacklight_config.index)
42
- .to receive(:pagination_options)
43
- .and_return(theme: 'blacklight', left: 5, right: 0)
44
- render
45
- end
46
-
47
- it "does not link to deep pages" do
48
- expect(page).to have_link '1'
49
- expect(page).not_to have_link '100'
50
- end
51
- end
52
- end
53
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Blacklight::SearchContext::ServerItemPaginationComponent, type: :component do
6
- subject(:render) { render_inline(instance) }
7
-
8
- let(:current_document_id) { 9 }
9
- let(:current_document) { SolrDocument.new(id: current_document_id) }
10
- let(:search_session) { { 'document_id' => current_document_id, 'counter' => 1, 'total' => '3' } }
11
- let(:instance) { described_class.new(search_context: search_context, search_session: search_session, current_document: current_document) }
12
-
13
- before do
14
- allow(controller).to receive(:search_session).and_return(search_session)
15
- allow(controller).to receive(:current_search_session).and_return(double(id: current_document_id))
16
- controller.class.helper_method :search_session
17
- controller.class.helper_method :current_search_session
18
- end
19
-
20
- context 'when there is next and previous' do
21
- let(:search_context) { { next: next_doc, prev: prev_doc } }
22
- let(:prev_doc) { SolrDocument.new(id: '777') }
23
- let(:next_doc) { SolrDocument.new(id: '888') }
24
-
25
- before do
26
- # allow(controller).to receive(:controller_tracking_method).and_return('track_catalog_path')
27
-
28
- allow(controller).to receive_messages(controller_name: 'catalog', link_to_previous_document: '', link_to_next_document: '')
29
- end
30
-
31
- it "renders content" do
32
- expect(render.css('.page-links').to_html).not_to be_blank
33
- end
34
- end
35
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::Facet do
4
- subject do
5
- Class.new do
6
- include Blacklight::Facet
7
- attr_reader :blacklight_config
8
-
9
- def initialize blacklight_config
10
- @blacklight_config = blacklight_config
11
- end
12
- end.new(blacklight_config)
13
- end
14
-
15
- let(:blacklight_config) { Blacklight::Configuration.new }
16
-
17
- describe "#facet_configuration_for_field" do
18
- it "looks up fields by key" do
19
- blacklight_config.add_facet_field 'a'
20
- expect(subject.facet_configuration_for_field('a')).to eq blacklight_config.facet_fields['a']
21
- end
22
-
23
- it "looks up fields by field name" do
24
- blacklight_config.add_facet_field 'a', field: 'b'
25
- expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
26
- end
27
-
28
- it "supports both strings and symbols" do
29
- blacklight_config.add_facet_field 'a', field: :b
30
- expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
31
- end
32
- end
33
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::SearchFields do
4
- around { |test| Deprecation.silence(described_class) { test.call } }
5
-
6
- class MockConfig
7
- include Blacklight::SearchFields
8
- end
9
-
10
- before(:all) do
11
- @config = Blacklight::Configuration.new do |config|
12
- config.default_solr_params = { qt: 'search' }
13
-
14
- config.add_search_field 'all_fields', label: 'All Fields'
15
- config.add_search_field 'title', qt: 'title_search'
16
- config.add_search_field 'author', qt: 'author_search'
17
- config.add_search_field 'subject', qt: 'subject_search'
18
- config.add_search_field 'no_display', qt: 'something', include_in_simple_select: false
19
- end
20
- end
21
-
22
- before do
23
- @search_field_obj = MockConfig.new
24
- allow(@search_field_obj).to receive(:blacklight_config).and_return(@config)
25
- end
26
-
27
- it "returns search field list with calculated :label when needed" do
28
- @search_field_obj.search_field_list.each do |hash|
29
- expect(hash.label).not_to be_blank
30
- end
31
- end
32
-
33
- describe "for unspecified :key" do
34
- before do
35
- @bad_config = MockConfig.new
36
- end
37
-
38
- it "raises exception on #search_field_list" do
39
- expect do
40
- allow(@bad_config).to receive(:blacklight_config).and_return(Blacklight::Configuration.new do |config|
41
- config.add_search_field label: 'All Fields', qt: 'all_fields'
42
- config.add_search_field 'title', qt: 'title_search'
43
- end)
44
- end.to raise_error ArgumentError
45
- end
46
- end
47
-
48
- describe "for duplicate keys" do
49
- before do
50
- @bad_config = MockConfig.new
51
- end
52
-
53
- it "raises on #search_field_list" do
54
- expect do
55
- allow(@bad_config).to receive(:blacklight_config).and_return(Blacklight::Configuration.new do |config|
56
- config.add_search_field 'my_key', label: 'All Fields'
57
- config.add_search_field 'my_key', label: 'title'
58
- end)
59
- end.to raise_error RuntimeError
60
- end
61
- end
62
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'Citation functionality' do
4
- before { visit solr_document_path('2007020969') }
5
-
6
- it 'displays the Cite modal with expected header' do
7
- click_link 'Cite'
8
- expect(find('div.modal-header')).to have_text 'Cite'
9
- end
10
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'Sitelinks search box' do
4
- it 'is home page' do
5
- visit root_path
6
- expect(page).to have_selector 'script[type="application/ld+json"]', visible: :hidden
7
- end
8
-
9
- it 'on search page' do
10
- visit search_catalog_path q: 'book'
11
- expect(page).not_to have_selector 'script[type="application/ld+json"]', visible: :hidden
12
- end
13
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'SMS functionality' do
4
- before { visit solr_document_path('2007020969') }
5
-
6
- it 'displays SMS modal with form' do
7
- click_link 'SMS'
8
- expect(find('div.modal-header')).to have_text 'SMS This'
9
- fill_in 'Phone Number:', with: '555-555-5555'
10
- select 'Verizon', from: 'Carrier'
11
- end
12
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::HashAsHiddenFieldsHelperBehavior do
4
- around { |test| Deprecation.silence(described_class) { test.call } }
5
-
6
- let(:params) do
7
- { q: "query",
8
- search_field: "search_field",
9
- per_page: 10,
10
- page: 5,
11
- extra_arbitrary_key: "arbitrary_value",
12
- f: { field1: %w[a b], field2: ["z"] } }
13
- end
14
- let(:generated) { helper.render_hash_as_hidden_fields(params) }
15
-
16
- it "converts a hash with nested complex data to Rails-style hidden form fields" do
17
- allow(Deprecation).to receive(:warn)
18
- expect(generated).to have_selector("input[type='hidden'][name='q'][value='query']", visible: false)
19
- expect(generated).to have_selector("input[type='hidden'][name='per_page'][value='10']", visible: false)
20
- expect(generated).to have_selector("input[type='hidden'][name='page'][value='5']", visible: false)
21
- expect(generated).to have_selector("input[type='hidden'][name='extra_arbitrary_key'][value='arbitrary_value']", visible: false)
22
- expect(generated).to have_selector("input[type='hidden'][name='f[field2][]'][value='z']", visible: false)
23
- expect(generated).to have_selector("input[type='hidden'][name='f[field1][]'][value='a']", visible: false)
24
- expect(generated).to have_selector("input[type='hidden'][name='f[field1][]'][value='b']", visible: false)
25
- end
26
- end
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::RenderConstraintsHelperBehavior do
4
- around { |test| Deprecation.silence(described_class) { test.call } }
5
-
6
- let(:config) do
7
- Blacklight::Configuration.new do |config|
8
- config.add_facet_field 'type'
9
- config.add_search_field 'title'
10
- end
11
- end
12
-
13
- before do
14
- # the helper methods below infer paths from the current route
15
- controller.request.path_parameters[:controller] = 'catalog'
16
- allow(helper).to receive(:search_action_path) do |*args|
17
- search_catalog_path *args
18
- end
19
-
20
- allow(helper).to receive(:blacklight_config).and_return(config)
21
- allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
22
- end
23
-
24
- describe '#render_constraints_query' do
25
- subject { helper.render_constraints_query(params) }
26
-
27
- let(:my_engine) { double("Engine") }
28
- let(:params) { ActionController::Parameters.new(q: 'foobar', f: { type: 'journal' }) }
29
-
30
- it "has a link relative to the current url" do
31
- expect(subject).to have_link 'Remove constraint', href: '/catalog?f%5Btype%5D%5B%5D=journal'
32
- end
33
- end
34
-
35
- describe '#render_constraints_clauses' do
36
- subject { helper.render_constraints_clauses(params) }
37
-
38
- let(:my_engine) { double("Engine") }
39
- let(:params) { ActionController::Parameters.new(clause: { "0": { field: 'title', query: 'nature' } }, f: { type: 'journal' }) }
40
-
41
- it 'renders the clause constraint' do
42
- expect(subject).to have_selector '.constraint-value', text: /Title\s+nature/
43
- end
44
-
45
- it "has a link relative to the current url" do
46
- expect(subject).to have_link 'Remove constraint Title: nature', href: '/catalog?f%5Btype%5D%5B%5D=journal'
47
- end
48
- end
49
-
50
- describe '#render_filter_element' do
51
- subject { helper.render_filter_element('type', ['journal'], path) }
52
-
53
- before do
54
- allow(helper).to receive(:blacklight_config).and_return(config)
55
- expect(helper).to receive(:facet_field_label).with('type').and_return("Item Type")
56
- end
57
-
58
- let(:params) { ActionController::Parameters.new q: 'biz' }
59
- let(:path) { Blacklight::SearchState.new(params, config, controller) }
60
-
61
- it "has a link relative to the current url" do
62
- expect(subject).to have_link "Remove constraint Item Type: journal", href: "/catalog?q=biz"
63
- expect(subject).to have_selector ".filter-name", text: 'Item Type'
64
- end
65
-
66
- context 'with string values' do
67
- subject { helper.render_filter_element('type', 'journal', path) }
68
-
69
- it "handles string values gracefully" do
70
- expect(subject).to have_link "Remove constraint Item Type: journal", href: "/catalog?q=biz"
71
- end
72
- end
73
-
74
- context 'with multivalued facets' do
75
- subject { helper.render_filter_element('type', [%w[journal book]], path) }
76
-
77
- it "handles such values gracefully" do
78
- expect(subject).to have_link "Remove constraint Item Type: journal OR book", href: "/catalog?q=biz"
79
- end
80
- end
81
- end
82
-
83
- describe "#render_constraints_filters" do
84
- subject { helper.render_constraints_filters(params) }
85
-
86
- let(:params) { ActionController::Parameters.new f: { 'type' => [''] } }
87
-
88
- it "renders nothing for empty facet limit param" do
89
- expect(subject).to be_blank
90
- end
91
- end
92
- end
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::SearchHistoryConstraintsHelperBehavior do
4
- around { |test| Deprecation.silence(described_class) { test.call } }
5
-
6
- before(:all) do
7
- @config = Blacklight::Configuration.new do |config|
8
- config.add_search_field 'default_search_field', label: 'Default'
9
-
10
- config.add_facet_field 'some_facet', label: 'Some'
11
- config.add_facet_field 'other_facet', label: 'Other'
12
- config.add_facet_field 'i18n_facet'
13
-
14
- I18n.backend.store_translations(:en, blacklight: { search: { fields: { facet: { i18n_facet: 'English facet label' } } } })
15
- I18n.backend.store_translations(:de, blacklight: { search: { fields: { facet: { i18n_facet: 'German facet label' } } } })
16
- end
17
- end
18
-
19
- before do
20
- allow(helper).to receive(:blacklight_config).and_return(@config)
21
- end
22
-
23
- describe "render_search_to_s_*" do
24
- describe "render_search_to_s_element" do
25
- it "renders basic element" do
26
- response = helper.render_search_to_s_element("key", "value")
27
- expect(response).to have_selector("span.constraint") do |span|
28
- expect(span).to have_selector("span.filter-name", text: "key:")
29
- expect(span).to have_selector("span.filter-values", text: "value")
30
- end
31
- expect(response).to be_html_safe
32
- end
33
-
34
- it "escapes them that need escaping" do
35
- response = helper.render_search_to_s_element("key>", "value>")
36
- expect(response).to have_selector("span.constraint") do |span|
37
- expect(span).to have_selector("span.filter-name", text: 'key>:')
38
- expect(span).to have_selector("span.filter-values", text: 'value>')
39
- end
40
- expect(response).to be_html_safe
41
- end
42
-
43
- xit "does not escape with options set thus" do
44
- response = helper.render_search_to_s_element("<key>", "value>", escape_key: false, escape_value: false)
45
- expect(response).to have_selector("span.constraint") do |span|
46
- expect(span).to have_selector("span.filter-name", text: "key>:")
47
- expect(span).to have_selector("span.filter-values", text: "value>")
48
- end
49
- expect(response).to be_html_safe
50
- end
51
- end
52
-
53
- describe "render_search_to_s" do
54
- before do
55
- @params = { q: "history", f: { "some_facet" => %w[value1 value1], "other_facet" => ["other1"] } }
56
- end
57
-
58
- it "calls lesser methods" do
59
- allow(helper).to receive(:blacklight_config).and_return(@config)
60
- allow(helper).to receive(:default_search_field).and_return(Blacklight::Configuration::SearchField.new(key: 'default_search_field', display_label: 'Default'))
61
- allow(helper).to receive(:label_for_search_field).with(nil).and_return('')
62
- # API hooks expect this to be so
63
- response = helper.render_search_to_s(@params)
64
-
65
- expect(response).to include(helper.render_search_to_s_q(@params))
66
- expect(response).to include(helper.render_search_to_s_filters(@params))
67
- expect(response).to be_html_safe
68
- end
69
- end
70
-
71
- describe "render_search_to_s_filters" do
72
- it "renders a constraint for a selected facet in the config" do
73
- response = helper.render_search_to_s_filters(f: { "some_facet" => %w[value1 value2] })
74
- expect(response).to eq("<span class=\"constraint\"><span class=\"filter-name\">Some:</span><span class=\"filter-values\"><span class=\"filter-value\">value1</span><span class=\"filter-separator\"> and </span><span class=\"filter-value\">value2</span></span></span>")
75
- end
76
-
77
- it "renders a constraint for a selected facet not in the config" do
78
- response = helper.render_search_to_s_filters(f: { "undefined_facet" => %w[value1 value2] })
79
- expect(response).to eq("<span class=\"constraint\"><span class=\"filter-name\">#{'undefined_facet'.titleize}:</span><span class=\"filter-values\"><span class=\"filter-value\">value1</span><span class=\"filter-separator\"> and </span><span class=\"filter-value\">value2</span></span></span>")
80
- end
81
-
82
- context 'with I18n translations for selected facet' do
83
- before do
84
- @orig_locale = I18n.locale
85
- end
86
-
87
- after do
88
- I18n.locale = @orig_locale
89
- end
90
-
91
- it 'renders the correct I18n label for a selected facet with I18n translations' do
92
- { en: 'English facet label', de: 'German facet label' }.each do |locale, label|
93
- I18n.locale = locale
94
- response = helper.render_search_to_s_filters(f: { 'i18n_facet' => %w[value1 value2] })
95
- expect(response).to include(label)
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::SuggestHelperBehavior do
4
- before do
5
- allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
6
- expect(Deprecation).to receive(:warn)
7
- end
8
-
9
- describe '#autocomplete_enabled?' do
10
- describe 'with autocomplete config' do
11
- let(:blacklight_config) do
12
- Blacklight::Configuration.new.configure do |config|
13
- config.autocomplete_enabled = true
14
- config.autocomplete_path = 'suggest'
15
- end
16
- end
17
-
18
- it 'is enabled' do
19
- expect(helper.autocomplete_enabled?).to be true
20
- end
21
- end
22
-
23
- describe 'without disabled config' do
24
- let(:blacklight_config) do
25
- Blacklight::Configuration.new.configure do |config|
26
- config.autocomplete_enabled = false
27
- config.autocomplete_path = 'suggest'
28
- end
29
- end
30
-
31
- it 'is disabled' do
32
- expect(helper.autocomplete_enabled?).to be false
33
- end
34
- end
35
-
36
- describe 'without path config' do
37
- let(:blacklight_config) do
38
- Blacklight::Configuration.new.configure do |config|
39
- config.autocomplete_enabled = true
40
- end
41
- end
42
-
43
- it 'is disabled' do
44
- expect(helper.autocomplete_enabled?).to be false
45
- end
46
- end
47
- end
48
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::Engine do
4
- [:bookmarks_http_method, :email_regexp, :facet_missing_param, :sms_mappings].each do |dep_key|
5
- describe "config.#{dep_key}" do
6
- subject { described_class.config }
7
-
8
- let(:unlikely_value) { 'unlikely value' }
9
-
10
- it 'is deprecated' do
11
- allow(Deprecation).to receive(:warn)
12
- subject.send(dep_key)
13
- expect(Deprecation).to have_received(:warn)
14
- end
15
-
16
- it 'delegates to config.blacklight' do
17
- allow(subject.blacklight).to receive(dep_key).and_return(unlikely_value)
18
- expect(subject.send(dep_key)).to eql(unlikely_value)
19
- end
20
- end
21
-
22
- describe "config.#{dep_key}=" do
23
- subject { described_class.config }
24
-
25
- let(:unlikely_value) { 'unlikely value' }
26
-
27
- it 'is deprecated' do
28
- allow(Deprecation).to receive(:warn)
29
- allow(subject.blacklight).to receive(:"#{dep_key}=").with(unlikely_value)
30
- subject.send(:"#{dep_key}=", unlikely_value)
31
- expect(Deprecation).to have_received(:warn)
32
- end
33
-
34
- it 'delegates to config.blacklight' do
35
- allow(subject.blacklight).to receive(:"#{dep_key}=").with(unlikely_value)
36
- subject.send(:"#{dep_key}=", unlikely_value)
37
- expect(subject.blacklight).to have_received(:"#{dep_key}=").with(unlikely_value)
38
- end
39
- end
40
- end
41
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Blacklight::RuntimeRegistry do
4
- before { described_class.stats.reset }
5
-
6
- describe ".call" do
7
- it "accumulates the event's duration into stats.solr_runtime" do
8
- described_class.call("solr_request.blacklight", 0.0, 0.0125, nil, {})
9
-
10
- expect(described_class.stats.solr_runtime).to eq 12.5
11
- end
12
-
13
- it "increments stats.solr_query_count" do
14
- described_class.call("solr_request.blacklight", 0.0, 0.0125, nil, {})
15
- described_class.call("solr_request.blacklight", 0.0, 0.0125, nil, {})
16
-
17
- expect(described_class.stats.solr_query_count).to eq 2
18
- end
19
- end
20
-
21
- describe ".stats" do
22
- it "is thread-local" do
23
- described_class.call("solr_request.blacklight", 0.0, 0.0125, nil, {})
24
-
25
- Thread.new { expect(described_class.stats.solr_runtime).to eq 0.0 }.join
26
- end
27
- end
28
-
29
- describe "Stats#reset" do
30
- it "clears the accumulated runtime and query count" do
31
- stats = described_class.stats
32
- described_class.call("solr_request.blacklight", 0.0, 0.0125, nil, {})
33
-
34
- stats.reset
35
-
36
- expect(stats.solr_runtime).to eq 0.0
37
- expect(stats.solr_query_count).to eq 0
38
- end
39
- end
40
-
41
- describe "subscribed to solr_request.blacklight notifications" do
42
- it "fires without raising (Blacklight::Engine subscribes this at boot)" do
43
- expect { ActiveSupport::Notifications.instrument("solr_request.blacklight") }.not_to raise_error
44
- end
45
- end
46
- end