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
@@ -8,20 +8,12 @@ RSpec.describe "catalog/_document" do
8
8
  allow(controller).to receive(:controller_name).and_return('test')
9
9
  allow(view).to receive(:render_grouped_response?).and_return(false)
10
10
  allow(view).to receive(:blacklight_config).and_return(blacklight_config)
11
+ allow(view).to receive(:search_session).and_return({})
12
+ allow(view).to receive(:current_search_session).and_return(nil)
13
+ allow(view.main_app).to receive(:track_test_path).and_return('/track')
11
14
  assign(:response, instance_double(Blacklight::Solr::Response, start: 20))
12
15
  end
13
16
 
14
- it "renders the header, thumbnail and index by default" do
15
- stub_template "catalog/_index_header.html.erb" => "document_header"
16
- stub_template "catalog/_thumbnail.html.erb" => "thumbnail_default"
17
- stub_template "catalog/_index_default.html.erb" => "index_default"
18
- render partial: "catalog/document", locals: { document: document, document_counter: 1 }
19
- expect(rendered).to have_selector 'article.document[@data-document-counter="22"]'
20
- expect(rendered).to match /document_header/
21
- expect(rendered).to match /thumbnail_default/
22
- expect(rendered).to match /index_default/
23
- end
24
-
25
17
  it "uses the index.partials parameter to determine the partials to render" do
26
18
  blacklight_config.index.partials = %w[a b c]
27
19
  stub_template "catalog/_a_default.html.erb" => "a_partial"
@@ -32,27 +24,4 @@ RSpec.describe "catalog/_document" do
32
24
  expect(rendered).to match /b_partial/
33
25
  expect(rendered).to match /c_partial/
34
26
  end
35
-
36
- it 'provides the rendered partials to an explicitly configured component but does not render them by default' do
37
- blacklight_config.index.partials = %w[a]
38
- stub_template "catalog/_a_default.html.erb" => "partial"
39
- blacklight_config.index.document_component = Blacklight::DocumentComponent
40
- allow(view).to receive(:search_session).and_return({})
41
- allow(view).to receive(:current_search_session).and_return(nil)
42
- allow(view.main_app).to receive(:track_test_path).and_return('/track')
43
-
44
- render partial: "catalog/document", locals: { document: document, document_counter: 1 }
45
-
46
- expect(rendered).to have_selector 'article.document header', text: '22. xyz'
47
- expect(rendered).not_to match(/partial/)
48
- end
49
-
50
- it 'renders the partial using a provided view config' do
51
- view_config = Blacklight::Configuration::ViewConfig.new partials: %w[a]
52
- stub_template "catalog/_a_default.html.erb" => "partial"
53
-
54
- render partial: "catalog/document", locals: { document: document, document_counter: 1, view_config: view_config }
55
-
56
- expect(rendered).to match(/partial/)
57
- end
58
27
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  RSpec.describe 'catalog/_facet_index_navigation.html.erb', type: :view do
4
4
  let(:pagination) { Blacklight::Solr::FacetPaginator.new([]) }
5
- let(:facet) { Blacklight::Configuration::FacetField.new(index_range: '0'..'9') }
5
+ let(:facet) { Blacklight::Configuration::FacetField.new(index_range: '0'..'9', presenter: Blacklight::FacetFieldPresenter) }
6
6
  let(:display_facet) { double(items: [], offset: 0, prefix: '', sort: 'index') }
7
7
  let(:blacklight_config) { Blacklight::Configuration.new }
8
8
 
@@ -2,11 +2,9 @@
2
2
 
3
3
  RSpec.describe "catalog/_paginate_compact.html.erb" do
4
4
  let(:user) { User.new { |u| u.save(validate: false) } }
5
- let(:blacklight_config) { Blacklight::Configuration.new }
6
5
 
7
6
  before do
8
7
  controller.request.path_parameters[:action] = 'index'
9
- allow(controller).to receive(:blacklight_config).and_return(blacklight_config)
10
8
  end
11
9
 
12
10
  it "renders paginatable arrays" do
@@ -6,6 +6,7 @@ RSpec.describe "/catalog/_search_header.html.erb" do
6
6
  it "renders the default search header partials" do
7
7
  stub_template "_did_you_mean.html.erb" => "did_you_mean"
8
8
  stub_template "_sort_and_per_page.html.erb" => "sort_and_per_page"
9
+ allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
9
10
  render
10
11
  expect(rendered).to match /did_you_mean/
11
12
  expect(rendered).to match /sort_and_per_page/
@@ -6,6 +6,7 @@ RSpec.describe "catalog/_show_sidebar.html.erb" do
6
6
  let(:blacklight_config) do
7
7
  Blacklight::Configuration.new do |config|
8
8
  config.index.title_field = 'title_tsim'
9
+ config.index.sidebar_component = Blacklight::Document::SidebarComponent
9
10
  end
10
11
  end
11
12
 
@@ -3,28 +3,16 @@
3
3
  RSpec.describe "catalog/_show_tools.html.erb" do
4
4
  let(:document) { SolrDocument.new id: 'xyz', format: 'a' }
5
5
  let(:blacklight_config) { Blacklight::Configuration.new }
6
+ let(:component) { instance_double(Blacklight::Document::ActionsComponent) }
6
7
 
7
8
  before do
8
- assign :response, instance_double(Blacklight::Solr::Response, params: {})
9
+ allow(Blacklight::Document::ActionsComponent).to receive(:new).and_return(component)
10
+ allow(view).to receive(:render).with(component)
11
+ allow(view).to receive(:render).with('catalog/show_tools', { document: document }).and_call_original
9
12
  allow(view).to receive(:blacklight_config).and_return blacklight_config
10
13
  allow(view).to receive(:has_user_authentication_provider?).and_return false
11
14
  end
12
15
 
13
- context 'without passing in a document local explicitly' do
14
- before do
15
- assign :document, document
16
- end
17
-
18
- let(:document_actions) { blacklight_config.show.document_actions }
19
-
20
- it 'defaults to the @document and renders the action' do
21
- allow(view).to receive(:some_action_solr_document_path).with(document, any_args).and_return 'x'
22
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action'
23
- render 'catalog/show_tools'
24
- expect(rendered).to have_link "Some action", href: "x"
25
- end
26
- end
27
-
28
16
  describe "document actions" do
29
17
  let(:document_actions) { blacklight_config.show.document_actions }
30
18
 
@@ -32,56 +20,7 @@ RSpec.describe "catalog/_show_tools.html.erb" do
32
20
  allow(view).to receive(:some_action_solr_document_path).with(document, any_args).and_return 'x'
33
21
  document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action'
34
22
  render 'catalog/show_tools', document: document
35
- expect(rendered).to have_link "Some action", href: "x"
36
- end
37
-
38
- it "uses the provided label" do
39
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
40
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, label: "Some label", partial: 'document_action'
41
- render 'catalog/show_tools', document: document
42
- expect(rendered).to have_selector '.some_action', text: "Some label"
43
- end
44
-
45
- it "evaluates a document action's if configurations" do
46
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
47
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, if: false, partial: 'document_action'
48
- render 'catalog/show_tools', document: document
49
- expect(rendered).not_to have_selector '.some_action', text: "Some action"
50
- end
51
-
52
- it "evaluates a document action's if configuration with a proc" do
53
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
54
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action', if: proc { |_config, doc| doc.id == "xyz" }
55
- render 'catalog/show_tools', document: document
56
- expect(rendered).not_to have_selector '.some_action', text: "Some action"
57
- end
58
-
59
- it "evaluates a document action's unless configurations" do
60
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
61
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action', unless: true
62
- render 'catalog/show_tools', document: document
63
- expect(rendered).not_to have_selector '.some_action', text: "Some action"
64
- end
65
-
66
- it "allows the tool to have a custom id" do
67
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
68
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action', id: "some_action"
69
- render 'catalog/show_tools', document: document
70
- expect(rendered).to have_selector '#some_action', text: "Some action"
71
- end
72
-
73
- it "defaults to modal behavior" do
74
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
75
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action'
76
- render 'catalog/show_tools', document: document
77
- expect(rendered).to have_selector '.some_action > a[data-blacklight-modal="trigger"]', text: "Some action"
78
- end
79
-
80
- it "allows configuration to opt out of modal behavior" do
81
- allow(view).to receive(:some_action_solr_document_path).and_return "x"
82
- document_actions[:some_action] = Blacklight::Configuration::ToolConfig.new key: :some_action, name: :some_action, partial: 'document_action', modal: false
83
- render 'catalog/show_tools', document: document
84
- expect(rendered).not_to have_selector '.some_action > a[data-blacklight-modal="trigger"]', text: "Some action"
23
+ expect(view).to have_received(:render).with(component)
85
24
  end
86
25
 
87
26
  context 'without any document actions defined' do
@@ -5,18 +5,27 @@ RSpec.describe "catalog/_view_type_group" do
5
5
  let(:response) { instance_double(Blacklight::Solr::Response, empty?: false) }
6
6
 
7
7
  before do
8
- allow(view).to receive(:view_label), &:to_s
9
- allow(view).to receive_messages(how_sort_and_per_page?: true, blacklight_config: blacklight_config)
8
+ allow(view).to receive_messages(blacklight_config: blacklight_config)
10
9
  controller.request.path_parameters[:action] = 'index'
11
10
  assign(:response, response)
12
11
  end
13
12
 
14
- it "does not display the group when there's only one option" do
13
+ it "does not display the group when there's no documents to view" do
14
+ blacklight_config.configure do |config|
15
+ config.view.a(icon: :list)
16
+ config.view.b(icon: :list)
17
+ end
18
+
15
19
  allow(response).to receive_messages(empty?: true)
16
20
  render partial: 'catalog/view_type_group'
17
21
  expect(rendered).to be_empty
18
22
  end
19
23
 
24
+ it "does not display the group when there's only one option" do
25
+ render partial: 'catalog/view_type_group'
26
+ expect(rendered).to be_empty
27
+ end
28
+
20
29
  it "displays the group" do
21
30
  blacklight_config.configure do |config|
22
31
  config.view.delete(:list)
@@ -26,12 +35,12 @@ RSpec.describe "catalog/_view_type_group" do
26
35
  end
27
36
  render partial: 'catalog/view_type_group'
28
37
  expect(rendered).to have_selector('.btn-group.view-type-group')
29
- expect(rendered).to have_selector('.view-type-a', text: 'a')
38
+ expect(rendered).to have_selector('.view-type-a', text: 'A')
30
39
  within '.view-type-a' do
31
40
  expect(rendered).to have_selector 'svg'
32
41
  end
33
- expect(rendered).to have_selector('.view-type-b', text: 'b')
34
- expect(rendered).to have_selector('.view-type-c', text: 'c')
42
+ expect(rendered).to have_selector('.view-type-b', text: 'B')
43
+ expect(rendered).to have_selector('.view-type-c', text: 'C')
35
44
  end
36
45
 
37
46
  it "sets the current view to 'active'" do
@@ -41,8 +50,7 @@ RSpec.describe "catalog/_view_type_group" do
41
50
  config.view.b(icon: :list)
42
51
  end
43
52
  render partial: 'catalog/view_type_group'
44
- expect(rendered).to have_selector('.active', text: 'a')
45
- expect(rendered).not_to have_selector('.active', text: 'b')
46
- expect(rendered).to have_selector('.btn', text: 'b')
53
+ expect(rendered).to have_selector('.active', text: 'A')
54
+ expect(rendered).not_to have_selector('.active', text: 'B')
47
55
  end
48
56
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe "catalog/email_success.html.erb" do
4
- it "includes the data-blacklight-modal properties" do
4
+ it "includes updates to the main flash messages" do
5
5
  render
6
- expect(rendered).to have_selector "div[data-blacklight-modal=container]"
6
+ expect(rendered).to have_selector 'turbo-stream[action="append"][target="main-flashes"]'
7
7
  end
8
8
  end
@@ -3,8 +3,13 @@
3
3
  RSpec.describe 'catalog/facet.html.erb' do
4
4
  let(:display_facet) { double }
5
5
  let(:blacklight_config) { Blacklight::Configuration.new }
6
+ let(:component) { instance_double(Blacklight::FacetComponent) }
6
7
 
7
8
  before do
9
+ allow(Blacklight::FacetComponent).to receive(:new).and_return(component)
10
+ allow(view).to receive(:render).and_call_original
11
+ allow(view).to receive(:render).with(component)
12
+
8
13
  blacklight_config.add_facet_field 'xyz', label: "Facet title"
9
14
  allow(view).to receive(:blacklight_config).and_return(blacklight_config)
10
15
  stub_template 'catalog/_facet_pagination.html.erb' => 'pagination'
@@ -13,19 +18,17 @@ RSpec.describe 'catalog/facet.html.erb' do
13
18
  end
14
19
 
15
20
  it "has the facet title" do
16
- allow(view).to receive(:render_facet_limit)
17
21
  render
18
22
  expect(rendered).to have_selector 'h1', text: "Facet title"
19
23
  end
20
24
 
21
25
  it "renders facet pagination" do
22
- allow(view).to receive(:render_facet_limit)
23
26
  render
24
27
  expect(rendered).to have_content 'pagination'
25
28
  end
26
29
 
27
30
  it "renders the facet limit" do
28
- allow(view).to receive(:render_facet_limit).with(display_facet, layout: false)
29
31
  render
32
+ expect(view).to have_received(:render).with(component)
30
33
  end
31
34
  end
@@ -5,11 +5,11 @@ require 'rexml/document'
5
5
  RSpec.describe "catalog/index" do
6
6
  let(:document_list) do
7
7
  10.times.map do |i|
8
- doc = SolrDocument.new(id: i)
9
- allow(doc).to receive(:export_as_some_format).and_return("")
10
- allow(doc).to receive(:to_semantic_values).and_return(author: ['xyz']) if i.zero?
11
- doc.will_export_as(:some_format, "application/some-format") if i == 1
12
- doc
8
+ SolrDocument.new(id: i, title_tsim: "Title #{i}").tap do |doc|
9
+ allow(doc).to receive(:export_as_some_format).and_return("")
10
+ allow(doc).to receive(:to_semantic_values).and_return(author: ['xyz']) if i.zero?
11
+ doc.will_export_as(:some_format, "application/some-format") if i == 1
12
+ end
13
13
  end
14
14
  end
15
15
 
@@ -22,7 +22,6 @@ RSpec.describe "catalog/index" do
22
22
  params['content_format'] = 'some_format'
23
23
  allow(view).to receive(:action_name).and_return('index')
24
24
  allow(view).to receive(:blacklight_config).and_return(blacklight_config)
25
- allow(view).to receive(:search_field_options_for_select).and_return([])
26
25
  end
27
26
 
28
27
  # We need to use rexml to test certain things that have_tag wont' test
@@ -88,15 +87,22 @@ RSpec.describe "catalog/index" do
88
87
  end
89
88
 
90
89
  it "has a summary" do
91
- stub_template "catalog/_index.html.erb" => "partial content"
92
90
  render template: 'catalog/index', formats: [:atom]
93
- expect(rendered).to have_selector("entry > summary", text: 'partial content')
91
+ expect(rendered).to have_selector("entry > summary", text: 'Title 0')
94
92
  end
95
93
 
96
- context 'with a custom HTML partial' do
94
+ context 'with a custom template' do
97
95
  before do
98
- blacklight_config.view.atom.summary_partials = ['whatever']
99
- stub_template 'catalog/_whatever_default.html.erb' => 'whatever content'
96
+ my_template = Class.new(ViewComponent::Base) do
97
+ def call
98
+ 'whatever content'
99
+ end
100
+
101
+ def self.name
102
+ 'TestComponent'
103
+ end
104
+ end
105
+ blacklight_config.view.atom.summary_component = my_template
100
106
  end
101
107
 
102
108
  it "has the customized summary" do
@@ -4,26 +4,25 @@ RSpec.describe "catalog/index.html.erb" do
4
4
  describe "with no search parameters" do
5
5
  before do
6
6
  allow(view).to receive(:has_search_parameters?).and_return(false)
7
- allow(view).to receive(:blacklight_config).and_return(Blacklight::Configuration.new)
7
+ allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
8
+ @response = instance_double(Blacklight::Solr::Response, empty?: true, total: 11, start: 1, limit_value: 10, aggregations: {})
8
9
  end
9
10
 
10
11
  let(:sidebar) { view.content_for(:sidebar) }
11
12
 
12
- it "renders the search_sidebar partial" do
13
- stub_template "catalog/_search_sidebar.html.erb" => "sidebar_content"
13
+ it "renders the Search::SidebarComponent component" do
14
14
  render
15
- expect(sidebar).to match /sidebar_content/
15
+
16
+ expect(sidebar).to match /Limit your search/
16
17
  end
17
18
  end
18
19
 
19
20
  describe "with search parameters" do
20
21
  before do
21
- allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
22
22
  allow(view).to receive(:has_search_parameters?).and_return(true)
23
23
  stub_template "catalog/_results_pagination.html.erb" => ""
24
24
  stub_template "catalog/_search_header.html.erb" => "header_content"
25
25
  allow(view).to receive(:blacklight_config).and_return(Blacklight::Configuration.new)
26
- allow(view).to receive(:render_opensearch_response_metadata).and_return("")
27
26
  @response = instance_double(Blacklight::Solr::Response, empty?: true, total: 11, start: 1, limit_value: 10)
28
27
  end
29
28
 
@@ -85,12 +85,12 @@ RSpec.describe "catalog/index.json", api: true do
85
85
  let(:facets) { hash[:included].select { |x| x['type'] == 'facet' } }
86
86
  let(:format) { facets.find { |x| x['id'] == 'format' } }
87
87
  let(:format_items) { format['attributes']['items'] }
88
- let(:format_item_attributes) { format_items.map { |x| x['attributes'] } }
88
+ let(:format_item_attributes) { format_items.pluck('attributes') }
89
89
 
90
90
  context 'when no facets have been selected' do
91
91
  it 'has facet information and links' do
92
92
  expect(facets).to be_present
93
- expect(facets.map { |x| x['id'] }).to include 'format'
93
+ expect(facets.pluck('id')).to include 'format'
94
94
  expect(format['links']).to include self: 'http://test.host/some/facet/url'
95
95
  expect(format['attributes']['label']).to eq 'Format'
96
96
  expect(format_item_attributes).to match_array [{ value: 'Book', hits: 30, label: 'Book' }]
@@ -3,8 +3,11 @@
3
3
  RSpec.describe "catalog/show.html.erb" do
4
4
  let(:document) { SolrDocument.new id: 'xyz', format: 'a' }
5
5
  let(:blacklight_config) { Blacklight::Configuration.new }
6
+ let(:presenter) { Blacklight::ShowPresenter.new(document, view, blacklight_config) }
6
7
 
7
8
  before do
9
+ allow(presenter).to receive(:html_title).and_return('Heading')
10
+ allow(view).to receive(:document_presenter).and_return(presenter)
8
11
  allow(view).to receive(:action_name).and_return('show')
9
12
  allow(view).to receive_messages(has_user_authentication_provider?: false)
10
13
  allow(view).to receive_messages(render_document_sidebar_partial: "Sidebar")
@@ -14,7 +17,6 @@ RSpec.describe "catalog/show.html.erb" do
14
17
  end
15
18
 
16
19
  it "sets the @page_title" do
17
- allow(view).to receive(:document_show_html_title).and_return("Heading")
18
20
  render
19
21
  page_title = view.instance_variable_get(:@page_title)
20
22
  expect(page_title).to eq "Heading - Blacklight"
@@ -22,22 +24,12 @@ RSpec.describe "catalog/show.html.erb" do
22
24
  end
23
25
 
24
26
  it "includes schema.org itemscope/type properties" do
25
- allow(view).to receive(:document_show_html_title).and_return("Heading")
26
27
  allow(document).to receive_messages(itemtype: 'some-item-type-uri')
27
28
  render
28
29
  expect(rendered).to have_selector('div#document[@itemscope]')
29
30
  expect(rendered).to have_selector('div#document[@itemtype="some-item-type-uri"]')
30
31
  end
31
32
 
32
- it "renders the show_header and show partials by default" do
33
- allow(view).to receive(:render_grouped_response?).and_return(false)
34
- stub_template "catalog/_show_header_default.html.erb" => "document_header"
35
- stub_template "catalog/_show_default.html.erb" => "show_default"
36
- render
37
- expect(rendered).to match /document_header/
38
- expect(rendered).to match /show_default/
39
- end
40
-
41
33
  it "uses the show.partials parameter to determine the partials to render" do
42
34
  allow(view).to receive(:render_grouped_response?).and_return(false)
43
35
  blacklight_config.show.partials = %w[a b c]
@@ -49,18 +41,4 @@ RSpec.describe "catalog/show.html.erb" do
49
41
  expect(rendered).to match /b_partial/
50
42
  expect(rendered).to match /c_partial/
51
43
  end
52
-
53
- it 'provides the rendered partials to an explicitly configured component but does not render them by default' do
54
- blacklight_config.show.partials = %w[a]
55
- stub_template "catalog/_a_default.html.erb" => "partial"
56
- blacklight_config.show.document_component = Blacklight::DocumentComponent
57
- allow(view).to receive(:search_session).and_return({})
58
- allow(view).to receive(:current_search_session).and_return(nil)
59
- allow(view.main_app).to receive(:track_test_path).and_return('/track')
60
-
61
- render
62
-
63
- expect(rendered).to have_selector 'div.document header h1', text: 'xyz'
64
- expect(rendered).not_to match(/partial/)
65
- end
66
44
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe "catalog/sms_success.html.erb" do
4
- it "includes the data-blacklight-modal properties" do
4
+ it "includes updates to the main flash messages" do
5
5
  render
6
- expect(rendered).to have_selector "div[data-blacklight-modal=container]"
6
+ expect(rendered).to have_selector 'turbo-stream[action="append"][target="main-flashes"]'
7
7
  end
8
8
  end
@@ -20,25 +20,23 @@ def system_with_error_handling(*args)
20
20
  end
21
21
  end
22
22
 
23
- def with_solr
24
- # We're being invoked by the app entrypoint script and solr is already up via docker compose
23
+ def with_solr(&block)
24
+ # We're being invoked by the app entrypoint script and solr is already up via docker-compose
25
25
  if ENV['SOLR_ENV'] == 'docker-compose'
26
26
  yield
27
- elsif system('docker compose -v')
28
- # We're not running `docker compose up' but still want to use a docker instance of solr.
27
+ elsif system('docker-compose -v')
28
+ # We're not running docker-compose up but still want to use a docker instance of solr.
29
29
  begin
30
30
  puts "Starting Solr"
31
- system_with_error_handling "docker compose up -d solr"
31
+ system_with_error_handling "docker-compose up -d solr"
32
32
  yield
33
33
  ensure
34
34
  puts "Stopping Solr"
35
- system_with_error_handling "docker compose stop solr"
35
+ system_with_error_handling "docker-compose stop solr"
36
36
  end
37
37
  else
38
38
  SolrWrapper.wrap do |solr|
39
- solr.with_collection do
40
- yield
41
- end
39
+ solr.with_collection(&block)
42
40
  end
43
41
  end
44
42
  end
@@ -48,6 +46,10 @@ desc "Run test suite"
48
46
  task :ci do
49
47
  with_solr do
50
48
  Rake::Task['blacklight:internal:seed'].invoke
49
+ within_test_app do
50
+ # Precompiles the javascript
51
+ system "bin/rake spec:prepare"
52
+ end
51
53
  Rake::Task['blacklight:coverage'].invoke
52
54
  end
53
55
  end
data/template.demo.rb CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  gem 'blacklight', '>= 7.0'
4
4
 
5
- after_bundle do
6
- # run the blacklight install generator
7
- options = ENV.fetch("BLACKLIGHT_INSTALL_OPTIONS", '--devise --marc')
5
+ run "bundle install"
8
6
 
9
- generate 'blacklight:install', options
7
+ # run the blacklight install generator
8
+ options = ENV.fetch("BLACKLIGHT_INSTALL_OPTIONS", '--devise --marc')
10
9
 
11
- # run the database migrations
12
- rake "db:migrate"
13
- end
10
+ generate 'blacklight:install', options
11
+
12
+ # run the database migrations
13
+ rake "db:migrate"