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
@@ -7,11 +7,10 @@ RSpec.describe BookmarksController do
7
7
  end
8
8
 
9
9
  it 'opts out of search session tracking' do
10
- expect(@controller.blacklight_config.track_search_session).to eq false
10
+ expect(@controller.blacklight_config.track_search_session).to be false
11
11
  end
12
12
  end
13
13
 
14
- # jquery 1.9 ajax does error callback if 200 returns empty body. so use 204 instead.
15
14
  describe "update" do
16
15
  it "has a 200 status code when creating a new one" do
17
16
  put :update, xhr: true, params: { id: '2007020969', format: :js }
@@ -105,7 +104,7 @@ RSpec.describe BookmarksController do
105
104
  end
106
105
 
107
106
  context 'created over an hour ago' do
108
- let(:current_time) { Time.zone.now - 2.hours }
107
+ let(:current_time) { 2.hours.ago }
109
108
 
110
109
  it 'is expired' do
111
110
  get :index, params: { encrypted_user_id: token }
@@ -1,10 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe CatalogController, api: true do
4
- around { |test| Deprecation.silence(Blacklight::Catalog) { test.call } }
5
-
6
4
  let(:doc_id) { '2007020969' }
7
- let(:mock_response) { instance_double(Blacklight::Solr::Response) }
8
5
  let(:mock_document) { instance_double(SolrDocument, export_formats: {}) }
9
6
  let(:search_service) { instance_double(Blacklight::SearchService) }
10
7
 
@@ -63,17 +60,17 @@ RSpec.describe CatalogController, api: true do
63
60
  end
64
61
 
65
62
  it "shows 0 results when the user asks for an invalid value to a custom facet query", integration: true do
66
- get :index, params: { f: { example_query_facet_field: 'bogus' } } # bogus custom facet value
63
+ get :index, params: { f: { example_query_facet_field: ['bogus'] } } # bogus custom facet value
67
64
  expect(assigns(:response).docs).to be_empty
68
65
  end
69
66
 
70
67
  it "returns results (possibly 0) when the user asks for a valid value to a custom facet query", integration: true do
71
- get :index, params: { f: { example_query_facet_field: 'years_25' } } # valid custom facet value with some results
68
+ get :index, params: { f: { example_query_facet_field: ['years_25'] } } # valid custom facet value with some results
72
69
  expect(assigns(:response).docs).not_to be_empty
73
70
  end
74
71
 
75
72
  it "returns no results when the users asks for a value that doesn't match any" do
76
- get :index, params: { f: { example_query_facet_field: 'years_5' } } # valid custom facet value with NO results
73
+ get :index, params: { f: { example_query_facet_field: ['years_5'] } } # valid custom facet value with NO results
77
74
  expect(assigns(:response).docs).to be_empty
78
75
  end
79
76
 
@@ -161,20 +158,20 @@ RSpec.describe CatalogController, api: true do
161
158
 
162
159
  format = facets.find { |x| x['id'] == 'format' }
163
160
 
164
- expect(format['attributes']['items'].map { |x| x['attributes'] }).to match_array([{ "value" => "Book", "hits" => 30, "label" => "Book" }])
161
+ expect(format['attributes']['items'].pluck('attributes')).to match_array([{ "value" => "Book", "hits" => 30, "label" => "Book" }])
165
162
  expect(format['links']['self']).to eq facet_catalog_url(format: :json, id: 'format')
166
163
  expect(format['attributes']['items'].first['links']['self']).to eq search_catalog_url(format: :json, f: { format: ['Book'] })
167
164
  end
168
165
 
169
166
  it "gets the search fields" do
170
167
  expect(search_fields).to have(4).fields
171
- expect(search_fields.map { |x| x['id'] }).to match_array %w[all_fields author subject title]
168
+ expect(search_fields.pluck('id')).to match_array %w[all_fields author subject title]
172
169
  expect(search_fields.first['links']['self']).to eq search_catalog_url(format: :json, search_field: 'all_fields')
173
170
  end
174
171
 
175
172
  describe "facets" do
176
173
  let(:query_facet) { facets.find { |x| x['id'] == 'example_query_facet_field' } }
177
- let(:query_facet_items) { query_facet['attributes']['items'].map { |x| x['attributes'] } }
174
+ let(:query_facet_items) { query_facet['attributes']['items'].pluck('attributes') }
178
175
 
179
176
  it "has items with labels and values" do
180
177
  expect(query_facet_items.first['label']).to eq 'within 25 Years'
@@ -339,7 +336,7 @@ RSpec.describe CatalogController, api: true do
339
336
  before do
340
337
  allow(mock_document).to receive_messages(export_formats: {})
341
338
  allow(controller).to receive(:search_service).and_return(search_service)
342
- expect(search_service).to receive(:fetch).and_return([mock_response, mock_document])
339
+ expect(search_service).to receive(:fetch).and_return(mock_document)
343
340
  allow(controller).to receive(:current_search_session).and_return(current_search)
344
341
  end
345
342
 
@@ -399,7 +396,7 @@ RSpec.describe CatalogController, api: true do
399
396
 
400
397
  it "renders show.html.erb" do
401
398
  allow(controller).to receive(:search_service).and_return(search_service)
402
- expect(search_service).to receive(:fetch).and_return([mock_response, mock_document])
399
+ expect(search_service).to receive(:fetch).and_return(mock_document)
403
400
 
404
401
  get :show, params: { id: doc_id }
405
402
  expect(response).to render_template(:show)
@@ -408,7 +405,7 @@ RSpec.describe CatalogController, api: true do
408
405
  describe '@document' do
409
406
  before do
410
407
  allow(controller).to receive(:search_service).and_return(search_service)
411
- expect(search_service).to receive(:fetch).and_return([mock_response, mock_document])
408
+ expect(search_service).to receive(:fetch).and_return(mock_document)
412
409
 
413
410
  get :show, params: { id: doc_id }
414
411
  end
@@ -434,7 +431,7 @@ RSpec.describe CatalogController, api: true do
434
431
  Mime::Type.register "application/mock", :mock
435
432
  SolrDocument.use_extension(FakeExtension)
436
433
  allow(controller).to receive(:search_service).and_return(search_service)
437
- expect(search_service).to receive(:fetch).and_return([nil, SolrDocument.new(id: 'my_fake_doc')])
434
+ expect(search_service).to receive(:fetch).and_return(SolrDocument.new(id: 'my_fake_doc'))
438
435
  end
439
436
 
440
437
  after do
@@ -470,23 +467,7 @@ RSpec.describe CatalogController, api: true do
470
467
  end
471
468
  end
472
469
 
473
- describe 'GET suggest' do
474
- it 'returns JSON' do
475
- get :suggest, params: { format: 'json' }
476
- expect(response.body).to eq [].to_json
477
- end
478
-
479
- it 'returns suggestions' do
480
- get :suggest, params: { format: 'json', q: 'new' }
481
- json = JSON.parse(response.body)
482
- expect(json.count).to eq 5
483
- expect(json.first['term']).to eq 'new jersey'
484
- end
485
- end
486
-
487
470
  describe "email/sms" do
488
- let(:mock_response) { instance_double(Blacklight::Solr::Response, documents: [SolrDocument.new(id: 'my_fake_doc'), SolrDocument.new(id: 'my_other_doc')]) }
489
-
490
471
  before do
491
472
  mock_document.extend(Blacklight::Document::Sms)
492
473
  mock_document.extend(Blacklight::Document::Email)
@@ -494,7 +475,7 @@ RSpec.describe CatalogController, api: true do
494
475
  allow(mock_document).to receive(:to_model).and_return(SolrDocument.new(id: 'my_fake_doc'))
495
476
 
496
477
  allow(controller).to receive(:search_service).and_return(search_service)
497
- expect(search_service).to receive(:fetch).and_return([mock_response, [mock_document]])
478
+ expect(search_service).to receive(:fetch).and_return([mock_document])
498
479
  request.env["HTTP_REFERER"] = "/catalog/#{doc_id}"
499
480
  SolrDocument.use_extension(Blacklight::Document::Email)
500
481
  SolrDocument.use_extension(Blacklight::Document::Sms)
@@ -535,10 +516,6 @@ RSpec.describe CatalogController, api: true do
535
516
  post :email, xhr: true, params: { id: doc_id, to: 'test_email@projectblacklight.org' }
536
517
  expect(request).to render_template 'email_success'
537
518
  expect(request.flash[:success]).to eq "Email Sent"
538
- allow(search_service).to receive(:search_results)
539
- # When we go to another page, the flash message should no longer display
540
- get :index
541
- expect(request.flash[:success]).to be_nil
542
519
  end
543
520
  end
544
521
 
@@ -585,7 +562,7 @@ RSpec.describe CatalogController, api: true do
585
562
 
586
563
  it "redirects back to the record upon success" do
587
564
  post :sms, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
588
- expect(request.flash[:error]).to eq nil
565
+ expect(request.flash[:error]).to be_nil
589
566
  expect(request).to redirect_to(solr_document_path(doc_id))
590
567
  end
591
568
 
@@ -593,10 +570,6 @@ RSpec.describe CatalogController, api: true do
593
570
  post :sms, xhr: true, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
594
571
  expect(request).to render_template 'sms_success'
595
572
  expect(request.flash[:success]).to eq "SMS Sent"
596
- allow(search_service).to receive(:search_results)
597
- # When we go to another page, the flash message should no longer display
598
- get :index
599
- expect(request.flash[:success]).to be_nil
600
573
  end
601
574
  end
602
575
  end
@@ -615,31 +588,6 @@ RSpec.describe CatalogController, api: true do
615
588
  get :citation, params: { id: "bad-record-identifer" }
616
589
  end.to raise_error Blacklight::Exceptions::RecordNotFound
617
590
  end
618
-
619
- context "when there is an invalid search", api: false do
620
- let(:service) { instance_double(Blacklight::SearchService) }
621
- let(:fake_error) { Blacklight::Exceptions::InvalidRequest.new }
622
-
623
- before do
624
- allow(controller).to receive(:search_service).and_return(service)
625
- allow(service).to receive(:search_results) { |*_args| raise fake_error }
626
- allow(Rails.env).to receive_messages(test?: false)
627
- end
628
-
629
- it "redirects the user to the root url for a bad search" do
630
- expect(controller.logger).to receive(:error).with(fake_error)
631
- get :index, params: { q: '+' }
632
- expect(response.redirect_url).to eq root_url
633
- expect(request.flash[:notice]).to eq "Sorry, I don't understand your search."
634
- expect(response).not_to be_successful
635
- expect(response.status).to eq 302
636
- end
637
-
638
- it "returns status 500 if the catalog path is raising an exception" do
639
- allow(controller).to receive(:flash).and_return(notice: I18n.t('blacklight.search.errors.request_error'))
640
- expect { get :index, params: { q: '+' } }.to raise_error Blacklight::Exceptions::InvalidRequest
641
- end
642
- end
643
591
  end
644
592
 
645
593
  context "without a user authentication provider" do
@@ -787,7 +735,7 @@ RSpec.describe CatalogController, api: true do
787
735
  end
788
736
 
789
737
  describe "with a facet" do
790
- before { allow(controller).to receive_messages(params: { f: { "field" => ["value"] } }) }
738
+ before { allow(controller).to receive_messages(params: { f: { "format" => ["value"] } }) }
791
739
 
792
740
  it { is_expected.to be true }
793
741
  end
@@ -849,76 +797,6 @@ RSpec.describe CatalogController, api: true do
849
797
  expect(controller.send(:search_facet_path, id: "some_facet", page: 5)).to eq facet_catalog_path(id: "some_facet")
850
798
  end
851
799
  end
852
-
853
- describe "facet_limit_for" do
854
- let(:blacklight_config) { controller.blacklight_config }
855
-
856
- it "returns specified value for facet_field specified" do
857
- expect(controller.facet_limit_for("subject_ssim")).to eq blacklight_config.facet_fields["subject_ssim"].limit
858
- end
859
-
860
- it "facet_limit_hash should return hash with key being facet_field and value being configured limit" do
861
- # facet_limit_hash has been removed from solrhelper in refactor. should it go back?
862
- skip "facet_limit_hash has been removed from solrhelper in refactor. should it go back?"
863
- expect(controller.facet_limit_hash).to eq blacklight_config[:facet][:limits]
864
- end
865
-
866
- it "handles no facet_limits in config" do
867
- blacklight_config.facet_fields = {}
868
- expect(controller.facet_limit_for("subject_ssim")).to be_nil
869
- end
870
-
871
- describe "for 'true' configured values" do
872
- before do
873
- allow(controller).to receive(:blacklight_config).and_return(blacklight_config)
874
- end
875
-
876
- let(:blacklight_config) do
877
- Blacklight::Configuration.new do |config|
878
- config.add_facet_field "language_facet", limit: true
879
- end
880
- end
881
-
882
- it "returns nil if no @response available" do
883
- expect(controller.facet_limit_for("some_unknown_field")).to be_nil
884
- end
885
-
886
- it "gets from @response facet.limit if available" do
887
- response = instance_double(Blacklight::Solr::Response, aggregations: { "language_facet" => double(limit: nil) })
888
- controller.instance_variable_set(:@response, response)
889
- blacklight_config.facet_fields['language_facet'].limit = 10
890
- expect(controller.facet_limit_for("language_facet")).to eq 10
891
- end
892
-
893
- it "gets the limit from the facet field in @response" do
894
- response = instance_double(Blacklight::Solr::Response, aggregations: { "language_facet" => double(limit: 16) })
895
- controller.instance_variable_set(:@response, response)
896
- expect(controller.facet_limit_for("language_facet")).to eq 15
897
- end
898
-
899
- it "defaults to 10" do
900
- expect(controller.facet_limit_for("language_facet")).to eq 10
901
- end
902
- end
903
-
904
- context 'for facet fields with a key that is different from the field name' do
905
- before do
906
- allow(controller).to receive(:blacklight_config).and_return(blacklight_config)
907
- end
908
-
909
- let(:blacklight_config) do
910
- Blacklight::Configuration.new do |config|
911
- config.add_facet_field 'some_key', field: 'x', limit: true
912
- end
913
- end
914
-
915
- it 'gets the limit from the facet field in the @response' do
916
- response = instance_double(Blacklight::Solr::Response, aggregations: { 'x' => double(limit: 16) })
917
- controller.instance_variable_set(:@response, response)
918
- expect(controller.facet_limit_for('some_key')).to eq 15
919
- end
920
- end
921
- end
922
800
  end
923
801
 
924
802
  # there must be at least one facet, and each facet must have at least one value
@@ -5,28 +5,9 @@ require 'spec_helper'
5
5
  RSpec.describe "Blacklight Advanced Search Form" do
6
6
  describe "advanced search form" do
7
7
  before do
8
- CatalogController.blacklight_config.search_fields['all_fields']['clause_params'] = {
9
- edismax: {}
10
- }
11
- CatalogController.blacklight_config.search_fields['author']['clause_params'] = {
12
- edismax: { qf: '${author_qf}' }
13
- }
14
- CatalogController.blacklight_config.search_fields['title']['clause_params'] = {
15
- edismax: { qf: '${title_qf}' }
16
- }
17
- CatalogController.blacklight_config.search_fields['subject']['clause_params'] = {
18
- edismax: { qf: '${subject_qf}' }
19
- }
20
- CatalogController.blacklight_config.json_solr_path = 'advanced'
21
8
  visit '/catalog/advanced?hypothetical_existing_param=true&q=ignore+this+existing+query'
22
9
  end
23
10
 
24
- after do
25
- %w[all_fields author title subject].each do |field|
26
- CatalogController.blacklight_config.search_fields[field].delete(:clause_params)
27
- end
28
- end
29
-
30
11
  it "has field and facet blocks" do
31
12
  expect(page).to have_selector('.query-criteria')
32
13
  expect(page).to have_selector('.limit-criteria')
@@ -64,43 +45,6 @@ RSpec.describe "Blacklight Advanced Search Form" do
64
45
  click_on 'advanced-search-submit'
65
46
  expect(page).to have_content 'Remove constraint Title: Medicine'
66
47
  expect(page).to have_content 'Strong Medicine speaks'
67
- expect(page).to have_selector('article.document', count: 1)
68
- end
69
-
70
- it 'can limit to facets' do
71
- fill_in 'Subject', with: 'Women'
72
- click_on 'Language'
73
- check 'Urdu 3'
74
- click_on 'advanced-search-submit'
75
- expect(page).to have_content 'Pākistānī ʻaurat dorāhe par'
76
- expect(page).not_to have_content 'Ajikto kŭrŏk chŏrŏk sasimnikka : and 아직도 그럭 저럭 사십니까'
77
- expect(page).to have_selector('article.document', count: 1)
78
- end
79
-
80
- it 'handles boolean queries' do
81
- fill_in 'All Fields', with: 'history NOT strong'
82
- click_on 'advanced-search-submit'
83
- expect(page).to have_content('Ci an zhou bian')
84
- expect(page).not_to have_content('Strong Medicine speaks')
85
- expect(page).to have_selector('article.document', count: 10)
86
- end
87
-
88
- it 'handles queries in multiple fields with the ALL operator' do
89
- fill_in 'All Fields', with: 'history'
90
- fill_in 'Author', with: 'hearth'
91
- click_on 'advanced-search-submit'
92
- expect(page).to have_content('Strong Medicine speaks')
93
- expect(page).to have_selector('article.document', count: 1)
94
- end
95
-
96
- it 'handles queries in multiple fields with the ANY operator' do
97
- select 'any', from: 'op'
98
- fill_in 'All Fields', with: 'history'
99
- fill_in 'Subject', with: 'women'
100
- click_on 'advanced-search-submit'
101
- expect(page).to have_content('Ci an zhou bian')
102
- expect(page).to have_content('Pākistānī ʻaurat dorāhe par')
103
- expect(page).to have_selector('article.document', count: 10)
104
48
  end
105
49
  end
106
50
 
@@ -3,6 +3,6 @@
3
3
  RSpec.describe 'Autocomplete suggestions' do
4
4
  it 'search form has suggest path' do
5
5
  visit root_path
6
- expect(page).to have_css 'input[data-autocomplete-path="/catalog/suggest"]'
6
+ expect(page).to have_css 'auto-complete[src="/catalog/suggest"]'
7
7
  end
8
8
  end
@@ -21,11 +21,6 @@ RSpec.describe 'Accessibility testing', api: false, js: true do
21
21
  expect(page).to be_accessible
22
22
  end
23
23
 
24
- it 'validates the advanced search form' do
25
- visit advanced_search_catalog_path
26
- expect(page).to be_accessible.excluding('.search-query-form')
27
- end
28
-
29
24
  it 'validates the single results page' do
30
25
  visit solr_document_path('2007020969')
31
26
  expect(page).to be_accessible
@@ -33,6 +28,6 @@ RSpec.describe 'Accessibility testing', api: false, js: true do
33
28
 
34
29
  def be_accessible(skipping: [])
35
30
  # typeahead does funny things with the search bar
36
- be_axe_clean.excluding('.tt-hint').skipping(skipping + [('color-contrast' if Bootstrap::VERSION < '5')].compact)
31
+ be_axe_clean.excluding('.tt-hint').skipping(skipping + [('color-contrast' if defined?(Bootstrap) && Bootstrap::VERSION < '5')].compact)
37
32
  end
38
33
  end
@@ -45,7 +45,7 @@ RSpec.describe "Bookmarks" do
45
45
  check 'Bookmark'
46
46
 
47
47
  visit solr_document_path('2007020969')
48
- expect(page).to have_css('input[type="checkbox"]:checked')
48
+ expect(page).to have_css('input[type="checkbox"][checked]')
49
49
  uncheck 'In Bookmarks'
50
50
  end
51
51
 
@@ -69,7 +69,7 @@ RSpec.describe "Facets" do
69
69
  page.find('h3.facet-field-heading button', text: 'Pivot Field').click
70
70
 
71
71
  within '#facet-example_pivot_field' do
72
- expect(page).to have_css('.facet-leaf-node', text: "Book 30")
72
+ expect(page).to have_css('.facet-leaf-node', text: "Book 30", normalize_ws: true)
73
73
  expect(page).not_to have_css('.facet-select', text: 'Tibetan')
74
74
  page.find('.facet-toggle-handle').click
75
75
  click_link 'Tibetan'
@@ -79,11 +79,13 @@ RSpec.describe "Facets" do
79
79
  expect(page).to have_css('.constraint-value', text: 'Language Tibetan')
80
80
  end
81
81
 
82
- describe 'heading button focus' do
83
- it 'changes to the button on button click', js: true do
82
+ describe 'heading button focus with Firefox' do
83
+ it 'changes to the button on button click in Firefox' do
84
+ pending 'Capybara::NotSupportedByDriverError: Capybara::Driver::Base#evaluate_script'
84
85
  visit root_path
85
86
  page.find('h3.facet-field-heading button', text: 'Format').click
86
- expect(page.active_element.text).to eq 'Format'
87
+ focused_element_data_target = page.evaluate_script("document.activeElement")['data-bs-target']
88
+ expect(focused_element_data_target).to eq '#facet-format'
87
89
  end
88
90
  end
89
91
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe "Search Results context", js: true do
4
- it "passes the current search id through" do
3
+ RSpec.describe "Search Results context" do
4
+ it "passes the current search id through", js: true do
5
5
  search_for ''
6
6
  click_on 'Pluvial nectar of blessings'
7
7
  search_id = Search.last.id.to_s
@@ -16,7 +16,7 @@ RSpec.describe "Search Results context", js: true do
16
16
  expect(prev['data-context-href']).to eq "/catalog/2004310986/track?counter=8&document_id=2004310986&search_id=#{search_id}"
17
17
  end
18
18
 
19
- it "redirects context urls to the original url" do
19
+ it "redirects context urls to the original url", js: true do
20
20
  search_for ''
21
21
  first('.index_title a').click
22
22
  expect(page).to have_content "« Previous | 1 of 30 | Next »"
@@ -35,7 +35,7 @@ RSpec.describe "Search Results context", js: true do
35
35
  it "does not display stale previous and next links for direct item views" do
36
36
  search_for ''
37
37
  click_on 'Pluvial nectar of blessings'
38
- expect(page).to have_link('Cite')
38
+
39
39
  # Go to the number 9 result separately
40
40
  visit '/catalog/2003546302'
41
41
  expect(page).not_to have_selector '.page-links'
@@ -43,7 +43,7 @@ RSpec.describe "Search Results context", js: true do
43
43
  end
44
44
 
45
45
  context "navigating between search results using context pagination" do
46
- it "updates the back to search link with the current search pagination context" do
46
+ it "updates the back to search link with the current search pagination context", js: true do
47
47
  search_for ''
48
48
  expect(page).to have_content "1 - 10"
49
49
  find_all('.index_title a').last.click
@@ -55,9 +55,3 @@ RSpec.describe "Search Results context", js: true do
55
55
  end
56
56
  end
57
57
  end
58
-
59
- def search_for q
60
- visit root_path
61
- fill_in "q", with: q
62
- click_button 'search'
63
- end
@@ -58,36 +58,3 @@ RSpec.describe "Search Results" do
58
58
  expect(page).to have_xpath("//a[contains(@href, 77826928)]")
59
59
  end
60
60
  end
61
-
62
- def search_for q
63
- visit root_path
64
- fill_in "q", with: q
65
- click_button 'search'
66
- end
67
-
68
- def position_in_result_page(page, id)
69
- i = -1
70
- page.all(".index_title a").each_with_index do |link, idx|
71
- i = (idx + 1) if link['href'] =~ Regexp.new(Regexp.escape(id) + "$")
72
- end
73
- i.to_i
74
- end
75
-
76
- def number_of_results_for_query(query)
77
- visit root_path
78
- fill_in "q", with: query
79
- click_button "search"
80
- get_number_of_results_from_page(page)
81
- end
82
-
83
- def number_of_results_from_page(page)
84
- tmp_value = Capybara.ignore_hidden_elements
85
- Capybara.ignore_hidden_elements = false
86
- val = begin
87
- page.find("meta[name=totalResults]")['content'].to_i
88
- rescue StandardError
89
- 0
90
- end
91
- Capybara.ignore_hidden_elements = tmp_value
92
- val
93
- end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'Sitelinks search box' do
4
+ it 'is home page' do
5
+ visit root_path
6
+ expect(page).to have_css 'script[type="application/ld+json"]'
7
+ end
8
+
9
+ it 'on search page' do
10
+ visit search_catalog_path q: 'book'
11
+ expect(page).not_to have_css 'script[type="application/ld+json"]'
12
+ end
13
+ end