blacklight 7.33.0 → 8.0.0

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 (427) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -2
  3. data/.github/workflows/ruby.yml +38 -107
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +243 -2
  6. data/.rubocop_todo.yml +216 -270
  7. data/Gemfile +7 -6
  8. data/README.md +12 -4
  9. data/Rakefile +18 -0
  10. data/VERSION +1 -1
  11. data/app/assets/config/blacklight/manifest.js +3 -0
  12. data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
  13. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +332 -485
  15. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  16. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  20. data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
  21. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  22. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  23. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  24. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  25. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  26. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  27. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  28. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  29. data/app/builders/blacklight/action_builder.rb +18 -9
  30. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  31. data/app/components/blacklight/advanced_search_form_component.rb +7 -9
  32. data/app/components/blacklight/constraints_component.rb +27 -37
  33. data/app/components/blacklight/document/action_component.html.erb +2 -9
  34. data/app/components/blacklight/document/action_component.rb +26 -8
  35. data/app/components/blacklight/document/actions_component.rb +2 -2
  36. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  37. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  38. data/app/components/blacklight/document/citation_component.rb +5 -3
  39. data/app/components/blacklight/document/group_component.rb +7 -3
  40. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  41. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  42. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  43. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  44. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  45. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  46. data/app/components/blacklight/document_component.html.erb +4 -0
  47. data/app/components/blacklight/document_component.rb +54 -42
  48. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  49. data/app/components/blacklight/document_metadata_component.rb +11 -6
  50. data/app/components/blacklight/document_title_component.rb +4 -1
  51. data/app/components/blacklight/facet_component.rb +1 -1
  52. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
  53. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  54. data/app/components/blacklight/facet_field_component.html.erb +5 -5
  55. data/app/components/blacklight/facet_field_component.rb +9 -2
  56. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  57. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  58. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  59. data/app/components/blacklight/facet_item_component.rb +1 -43
  60. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  61. data/app/components/blacklight/header_component.html.erb +2 -0
  62. data/app/components/blacklight/header_component.rb +26 -0
  63. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  64. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  65. data/app/components/blacklight/icons/list_component.rb +16 -0
  66. data/app/components/blacklight/icons/search_component.rb +16 -0
  67. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  68. data/app/components/blacklight/metadata_field_component.rb +24 -8
  69. data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
  70. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  71. data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
  72. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  73. data/app/components/blacklight/response/sort_component.rb +2 -2
  74. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  75. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  76. data/app/components/blacklight/response/view_type_component.rb +4 -6
  77. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  78. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  79. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  80. data/app/components/blacklight/search_bar_component.rb +2 -16
  81. data/app/components/blacklight/search_button_component.rb +3 -3
  82. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  83. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  84. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  85. data/app/components/blacklight/search_header_component.html.erb +2 -0
  86. data/app/components/blacklight/search_header_component.rb +6 -0
  87. data/app/components/blacklight/search_navbar_component.html.erb +5 -0
  88. data/app/components/blacklight/search_navbar_component.rb +34 -0
  89. data/app/components/blacklight/start_over_button_component.rb +5 -3
  90. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  91. data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
  92. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  93. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  94. data/app/components/blacklight/system/modal_component.rb +1 -3
  95. data/app/components/blacklight/top_navbar_component.html.erb +12 -0
  96. data/app/components/blacklight/top_navbar_component.rb +17 -0
  97. data/app/controllers/bookmarks_controller.rb +1 -0
  98. data/app/controllers/catalog_controller.rb +1 -0
  99. data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
  100. data/app/controllers/concerns/blacklight/catalog.rb +21 -72
  101. data/app/controllers/concerns/blacklight/controller.rb +6 -43
  102. data/app/controllers/concerns/blacklight/search_context.rb +71 -13
  103. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  104. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  105. data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
  106. data/app/controllers/search_history_controller.rb +1 -0
  107. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
  108. data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
  109. data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
  110. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
  111. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  112. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  113. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
  114. data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
  115. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
  116. data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
  117. data/app/helpers/blacklight_helper.rb +1 -0
  118. data/app/helpers/catalog_helper.rb +1 -0
  119. data/app/javascript/blacklight/bookmark_toggle.js +9 -22
  120. data/app/javascript/blacklight/button_focus.js +9 -7
  121. data/app/javascript/blacklight/checkbox_submit.js +68 -122
  122. data/app/javascript/blacklight/core.js +6 -5
  123. data/app/javascript/blacklight/index.js +14 -0
  124. data/app/javascript/blacklight/modal.js +100 -165
  125. data/app/javascript/blacklight/modalForm.js +60 -0
  126. data/app/javascript/blacklight/search_context.js +13 -29
  127. data/app/models/blacklight/facet_paginator.rb +3 -2
  128. data/app/models/blacklight/icon.rb +4 -2
  129. data/app/models/bookmark.rb +0 -2
  130. data/app/models/concerns/blacklight/configurable.rb +5 -4
  131. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
  132. data/app/models/concerns/blacklight/document/attributes.rb +50 -0
  133. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  134. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  135. data/app/models/concerns/blacklight/document/export.rb +2 -1
  136. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  137. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  138. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
  139. data/app/models/concerns/blacklight/document.rb +23 -20
  140. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  141. data/app/models/concerns/blacklight/user.rb +17 -8
  142. data/app/models/record_mailer.rb +23 -18
  143. data/app/models/search.rb +0 -1
  144. data/app/models/solr_document.rb +1 -0
  145. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  146. data/app/presenters/blacklight/document_presenter.rb +24 -30
  147. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  148. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  149. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  150. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  151. data/app/presenters/blacklight/field_presenter.rb +1 -0
  152. data/app/presenters/blacklight/index_presenter.rb +2 -40
  153. data/app/presenters/blacklight/json_presenter.rb +7 -5
  154. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  155. data/app/presenters/blacklight/rendering/join.rb +7 -1
  156. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
  157. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  158. data/app/presenters/blacklight/show_presenter.rb +1 -9
  159. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  160. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  161. data/app/services/blacklight/field_retriever.rb +1 -8
  162. data/app/services/blacklight/search_service.rb +9 -7
  163. data/app/values/blacklight/types.rb +95 -11
  164. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  165. data/app/views/bookmarks/_tools.html.erb +7 -12
  166. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  167. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  168. data/app/views/catalog/_constraints.html.erb +1 -14
  169. data/app/views/catalog/_document.atom.builder +12 -14
  170. data/app/views/catalog/_document.html.erb +3 -6
  171. data/app/views/catalog/_document.rss.builder +2 -4
  172. data/app/views/catalog/_document_list.html.erb +2 -1
  173. data/app/views/catalog/_facet_layout.html.erb +2 -2
  174. data/app/views/catalog/_facets.html.erb +5 -4
  175. data/app/views/catalog/_home_text.html.erb +2 -14
  176. data/app/views/catalog/_search_form.html.erb +3 -3
  177. data/app/views/catalog/_search_header.html.erb +1 -2
  178. data/app/views/catalog/_search_results.html.erb +2 -2
  179. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  180. data/app/views/catalog/_show_main_content.html.erb +8 -19
  181. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  182. data/app/views/catalog/_show_tools.html.erb +1 -19
  183. data/app/views/catalog/_view_type_group.html.erb +1 -1
  184. data/app/views/catalog/email_success.html.erb +5 -6
  185. data/app/views/catalog/facet.html.erb +7 -5
  186. data/app/views/catalog/index.atom.builder +12 -14
  187. data/app/views/catalog/index.html.erb +7 -1
  188. data/app/views/catalog/index.json.jbuilder +19 -19
  189. data/app/views/catalog/index.rss.builder +1 -1
  190. data/app/views/catalog/opensearch.xml.builder +1 -1
  191. data/app/views/catalog/show.html.erb +1 -6
  192. data/app/views/catalog/sms_success.html.erb +5 -6
  193. data/app/views/catalog/suggest.html.erb +3 -0
  194. data/app/views/layouts/blacklight/base.html.erb +19 -9
  195. data/app/views/record_mailer/email_record.text.erb +4 -3
  196. data/app/views/record_mailer/sms_record.text.erb +4 -4
  197. data/app/views/search_history/index.html.erb +6 -2
  198. data/app/views/shared/_header_navbar.html.erb +1 -22
  199. data/app/views/shared/_modal.html.erb +3 -3
  200. data/blacklight.gemspec +8 -10
  201. data/config/importmap.rb +3 -0
  202. data/config/locales/blacklight.ar.yml +209 -233
  203. data/config/locales/blacklight.ca.yml +0 -7
  204. data/config/locales/blacklight.de.yml +197 -216
  205. data/config/locales/blacklight.en.yml +2 -7
  206. data/config/locales/blacklight.es.yml +196 -216
  207. data/config/locales/blacklight.fr.yml +196 -220
  208. data/config/locales/blacklight.hu.yml +193 -213
  209. data/config/locales/blacklight.it.yml +197 -216
  210. data/config/locales/blacklight.nl.yml +193 -213
  211. data/config/locales/blacklight.pt-BR.yml +195 -216
  212. data/config/locales/blacklight.sq.yml +193 -213
  213. data/config/locales/blacklight.zh.yml +194 -214
  214. data/config/routes.rb +3 -2
  215. data/db/migrate/20140202020201_create_searches.rb +1 -0
  216. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  217. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  218. data/docker-compose.yml +1 -0
  219. data/lib/blacklight/abstract_repository.rb +1 -0
  220. data/lib/blacklight/configuration/context.rb +4 -4
  221. data/lib/blacklight/configuration/display_field.rb +7 -9
  222. data/lib/blacklight/configuration/facet_field.rb +17 -11
  223. data/lib/blacklight/configuration/field.rb +1 -0
  224. data/lib/blacklight/configuration/fields.rb +12 -15
  225. data/lib/blacklight/configuration/index_field.rb +1 -0
  226. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  227. data/lib/blacklight/configuration/search_field.rb +1 -0
  228. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  229. data/lib/blacklight/configuration/show_field.rb +1 -0
  230. data/lib/blacklight/configuration/sort_field.rb +1 -0
  231. data/lib/blacklight/configuration/tool_config.rb +1 -0
  232. data/lib/blacklight/configuration/view_config.rb +16 -10
  233. data/lib/blacklight/configuration.rb +322 -341
  234. data/lib/blacklight/engine.rb +13 -15
  235. data/lib/blacklight/exceptions.rb +2 -2
  236. data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
  237. data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
  238. data/lib/blacklight/parameters.rb +7 -21
  239. data/lib/blacklight/routes/exportable.rb +1 -0
  240. data/lib/blacklight/routes/searchable.rb +3 -1
  241. data/lib/blacklight/routes.rb +1 -0
  242. data/lib/blacklight/search_builder.rb +10 -10
  243. data/lib/blacklight/search_state/filter_field.rb +8 -25
  244. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  245. data/lib/blacklight/search_state.rb +23 -79
  246. data/lib/blacklight/solr/document.rb +1 -0
  247. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  248. data/lib/blacklight/solr/repository.rb +1 -0
  249. data/lib/blacklight/solr/request.rb +3 -0
  250. data/lib/blacklight/solr/response/facets.rb +21 -5
  251. data/lib/blacklight/solr/response/group.rb +1 -0
  252. data/lib/blacklight/solr/response/group_response.rb +1 -0
  253. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  254. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  255. data/lib/blacklight/solr/response/params.rb +5 -4
  256. data/lib/blacklight/solr/response/response.rb +1 -0
  257. data/lib/blacklight/solr/response/spelling.rb +1 -0
  258. data/lib/blacklight/solr/response.rb +4 -3
  259. data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
  260. data/lib/blacklight/solr.rb +1 -0
  261. data/lib/blacklight/version.rb +1 -0
  262. data/lib/blacklight.rb +8 -11
  263. data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
  264. data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
  265. data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
  266. data/lib/generators/blacklight/assets_generator.rb +14 -88
  267. data/lib/generators/blacklight/controller_generator.rb +3 -2
  268. data/lib/generators/blacklight/document_generator.rb +1 -0
  269. data/lib/generators/blacklight/install_generator.rb +7 -4
  270. data/lib/generators/blacklight/models_generator.rb +1 -0
  271. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  272. data/lib/generators/blacklight/solr_generator.rb +1 -1
  273. data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
  274. data/lib/generators/blacklight/templates/solr_document.rb +1 -7
  275. data/lib/generators/blacklight/test_support_generator.rb +4 -2
  276. data/lib/generators/blacklight/user_generator.rb +7 -9
  277. data/lib/railties/blacklight.rake +2 -3
  278. data/package.json +10 -10
  279. data/rollup.config.js +37 -0
  280. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  281. data/spec/components/blacklight/document_component_spec.rb +74 -33
  282. data/spec/components/blacklight/facet_component_spec.rb +2 -7
  283. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  284. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  285. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
  286. data/spec/components/blacklight/header_component_spec.rb +20 -0
  287. data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
  288. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  289. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  290. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
  291. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  292. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  293. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  294. data/spec/controllers/catalog_controller_spec.rb +24 -126
  295. data/spec/features/autocomplete_spec.rb +1 -1
  296. data/spec/features/axe_spec.rb +1 -1
  297. data/spec/features/bookmarks_spec.rb +1 -1
  298. data/spec/features/component_template_override_spec.rb +8 -0
  299. data/spec/features/facets_spec.rb +1 -1
  300. data/spec/features/modal_spec.rb +12 -0
  301. data/spec/features/search_context_spec.rb +4 -10
  302. data/spec/features/search_results_spec.rb +0 -33
  303. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  304. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  305. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  306. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  307. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  308. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
  309. data/spec/helpers/blacklight_helper_spec.rb +3 -298
  310. data/spec/helpers/catalog_helper_spec.rb +60 -115
  311. data/spec/i18n_spec.rb +1 -0
  312. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  313. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  314. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  315. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  316. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  317. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
  318. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  319. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  320. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  321. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  322. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  323. data/spec/models/blacklight/configuration_spec.rb +41 -53
  324. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  325. data/spec/models/blacklight/icon_spec.rb +29 -15
  326. data/spec/models/blacklight/search_builder_spec.rb +12 -12
  327. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  328. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  329. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  330. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  331. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  332. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  333. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
  334. data/spec/models/blacklight/user_spec.rb +22 -0
  335. data/spec/models/record_mailer_spec.rb +36 -23
  336. data/spec/models/solr_document_spec.rb +21 -3
  337. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  338. data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
  339. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  340. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  341. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  342. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
  343. data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
  344. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  345. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  346. data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
  347. data/spec/presenters/pipeline_spec.rb +13 -2
  348. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  349. data/spec/requests/load_suggestions_spec.rb +16 -0
  350. data/spec/routing/catalog_routing_spec.rb +6 -1
  351. data/spec/services/blacklight/search_service_spec.rb +31 -68
  352. data/spec/spec_helper.rb +4 -3
  353. data/spec/support/controller_level_helpers.rb +1 -2
  354. data/spec/support/features/search_helpers.rb +39 -0
  355. data/spec/support/features/session_helpers.rb +1 -0
  356. data/spec/support/features.rb +3 -0
  357. data/spec/support/view_component_test_helpers.rb +21 -0
  358. data/spec/test_app_templates/Gemfile.extra +4 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
  360. data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
  361. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  362. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  363. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
  366. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  367. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  368. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  369. data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
  370. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  371. data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
  372. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  373. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  374. data/tasks/blacklight.rake +7 -5
  375. metadata +95 -123
  376. data/.babelrc +0 -11
  377. data/app/assets/images/blacklight/list.svg +0 -1
  378. data/app/assets/images/blacklight/search.svg +0 -1
  379. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  380. data/app/components/blacklight/content_areas_shim.rb +0 -13
  381. data/app/components/blacklight/search_context_component.rb +0 -34
  382. data/app/controllers/concerns/blacklight/base.rb +0 -7
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/models/concerns/blacklight/document/email.rb +0 -26
  393. data/app/models/concerns/blacklight/document/sms.rb +0 -24
  394. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  395. data/app/views/catalog/_constraints_element.html.erb +0 -14
  396. data/app/views/catalog/_document_action.html.erb +0 -5
  397. data/app/views/catalog/_facet_group.html.erb +0 -5
  398. data/app/views/catalog/_facet_limit.html.erb +0 -3
  399. data/app/views/catalog/_index.html.erb +0 -1
  400. data/app/views/catalog/_index_header.html.erb +0 -22
  401. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  402. data/app/views/catalog/_show.html.erb +0 -6
  403. data/app/views/catalog/_show_header.html.erb +0 -2
  404. data/app/views/catalog/_thumbnail.html.erb +0 -1
  405. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  406. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  407. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  408. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  409. data/spec/features/sitelinks_search_box.rb +0 -13
  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 -108
  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/models/blacklight/document/email_spec.rb +0 -57
  416. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  417. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  418. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  419. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  420. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  421. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  422. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  423. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  424. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  425. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  426. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
  427. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  RSpec.describe BlacklightHelper do
3
4
  before do
4
5
  allow(helper).to receive(:current_or_guest_user).and_return(User.new)
@@ -16,7 +17,7 @@ RSpec.describe BlacklightHelper do
16
17
  expect(application_name).to eq "Blacklight"
17
18
  end
18
19
 
19
- context "when the language is not english " do
20
+ context "when the language is not english" do
20
21
  around do |example|
21
22
  I18n.locale = :de
22
23
  example.run
@@ -72,7 +73,7 @@ RSpec.describe BlacklightHelper do
72
73
  end
73
74
 
74
75
  before do
75
- allow(helper).to receive(:presenter).and_return(presenter)
76
+ allow(helper).to receive(:document_presenter).and_return(presenter)
76
77
  allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
77
78
  end
78
79
 
@@ -131,153 +132,6 @@ RSpec.describe BlacklightHelper do
131
132
  expect(helper.render_index_doc_actions(document)).to be_blank
132
133
  end
133
134
  end
134
-
135
- describe "render_show_doc_actions" do
136
- it "renders partials" do
137
- response = helper.render_show_doc_actions(document)
138
- expect(response).to have_selector(".bookmark-toggle")
139
- end
140
- end
141
- end
142
-
143
- describe "#should_render_index_field?" do
144
- before do
145
- allow(helper).to receive_messages(should_render_field?: true, document_has_value?: true)
146
- end
147
-
148
- it "is true" do
149
- expect(Deprecation).to receive(:warn)
150
- expect(helper.should_render_index_field?(double, double)).to be true
151
- end
152
-
153
- it "is false if the document doesn't have a value for the field" do
154
- expect(Deprecation).to receive(:warn)
155
- allow(helper).to receive_messages(document_has_value?: false)
156
- expect(helper.should_render_index_field?(double, double)).to be false
157
- end
158
-
159
- it "is false if the configuration has the field disabled" do
160
- expect(Deprecation).to receive(:warn)
161
- allow(helper).to receive_messages(should_render_field?: false)
162
- expect(helper.should_render_index_field?(double, double)).to be false
163
- end
164
- end
165
-
166
- describe "#should_render_show_field?" do
167
- before do
168
- allow(helper).to receive_messages(should_render_field?: true, document_has_value?: true)
169
- end
170
-
171
- it "is true" do
172
- expect(Deprecation).to receive(:warn)
173
- expect(helper.should_render_show_field?(double, double)).to be true
174
- end
175
-
176
- it "is false if the document doesn't have a value for the field" do
177
- expect(Deprecation).to receive(:warn)
178
- allow(helper).to receive_messages(document_has_value?: false)
179
- expect(helper.should_render_show_field?(double, double)).to be false
180
- end
181
-
182
- it "is false if the configuration has the field disabled" do
183
- expect(Deprecation).to receive(:warn)
184
- allow(helper).to receive_messages(should_render_field?: false)
185
- expect(helper.should_render_show_field?(double, double)).to be false
186
- end
187
- end
188
-
189
- describe "#document_has_value?" do
190
- let(:doc) { double(SolrDocument) }
191
-
192
- before { allow(Deprecation).to receive(:warn) }
193
-
194
- it "ifs the document has the field value" do
195
- allow(doc).to receive(:has?).with('asdf').and_return(true)
196
- field_config = double(field: 'asdf')
197
- expect(helper.document_has_value?(doc, field_config)).to eq true
198
- end
199
-
200
- it "ifs the document has a highlight field value" do
201
- allow(doc).to receive(:has?).with('asdf').and_return(false)
202
- allow(doc).to receive(:has_highlight_field?).with('asdf').and_return(true)
203
- field_config = double(field: 'asdf', highlight: true)
204
- expect(helper.document_has_value?(doc, field_config)).to eq true
205
- end
206
-
207
- it "ifs the field has a model accessor" do
208
- allow(doc).to receive(:has?).with('asdf').and_return(false)
209
- allow(doc).to receive(:has_highlight_field?).with('asdf').and_return(false)
210
- field_config = double(field: 'asdf', highlight: true, accessor: true)
211
- expect(helper.document_has_value?(doc, field_config)).to eq true
212
- end
213
- end
214
-
215
- describe '#render_index_field_label' do
216
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
217
-
218
- let(:doc) { SolrDocument.new({}) }
219
-
220
- before do
221
- allow(helper).to receive_messages(document_index_view_type: :current_view)
222
- end
223
-
224
- it 'accepts an explicit field label' do
225
- expect(helper.render_index_field_label(doc, field: 'xyz', label: 'some label')).to eq 'some label:'
226
- end
227
-
228
- it 'calculates the appropriate field label for a field' do
229
- allow(helper).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
230
- expect(helper.render_index_field_label(doc, field: 'xyz')).to eq 'Xyz:'
231
- end
232
- end
233
-
234
- describe "render_grouped_response?" do
235
- it "checks if the response ivar contains grouped data" do
236
- assign(:response, instance_double(Blacklight::Solr::Response, grouped?: true))
237
- expect(helper.render_grouped_response?).to be true
238
- end
239
-
240
- it "checks if the response param contains grouped data" do
241
- response = instance_double(Blacklight::Solr::Response, grouped?: true)
242
- expect(helper.render_grouped_response?(response)).to be true
243
- end
244
- end
245
-
246
- describe "render_grouped_document_index" do
247
- pending 'not implemented'
248
- end
249
-
250
- describe "should_show_spellcheck_suggestions?" do
251
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
252
-
253
- before do
254
- allow(helper).to receive_messages spell_check_max: 5
255
- end
256
-
257
- it "does not show suggestions if there are enough results" do
258
- response = double(total: 10)
259
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
260
- end
261
-
262
- it "only shows suggestions if there are very few results" do
263
- response = double(total: 4, spelling: double(words: [1]))
264
- expect(helper.should_show_spellcheck_suggestions?(response)).to be true
265
- end
266
-
267
- it "only shows suggestions from collations" do
268
- response = double(total: 4, spelling: double(words: [], collation: { blah: 1 }))
269
- expect(helper.should_show_spellcheck_suggestions?(response)).to be true
270
- end
271
-
272
- it "shows suggestions only if there are spelling suggestions available" do
273
- response = double(total: 4, spelling: double(words: [], collation: nil))
274
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
275
- end
276
-
277
- it "does not show suggestions if spelling is not available" do
278
- response = double(total: 4, spelling: nil)
279
- expect(helper.should_show_spellcheck_suggestions?(response)).to be false
280
- end
281
135
  end
282
136
 
283
137
  describe "#opensearch_description_tag" do
@@ -344,153 +198,4 @@ RSpec.describe BlacklightHelper do
344
198
  end
345
199
  end
346
200
  end
347
-
348
- describe "#document_index_view_type" do
349
- it "defaults to the default view" do
350
- allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
351
- allow(helper).to receive(:default_document_index_view_type).and_return(:xyz)
352
- expect(helper.document_index_view_type).to eq :xyz
353
- end
354
-
355
- it "uses the query parameter" do
356
- allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
357
- expect(helper.document_index_view_type(view: :a)).to eq :a
358
- end
359
-
360
- it "uses the default view if the requested view is not available" do
361
- allow(helper).to receive(:default_document_index_view_type).and_return(:xyz)
362
- allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
363
- expect(helper.document_index_view_type(view: :c)).to eq :xyz
364
- end
365
-
366
- context "when they have a preferred view" do
367
- before do
368
- session[:preferred_view] = :b
369
- end
370
-
371
- context "and no view is specified" do
372
- it "uses the saved preference" do
373
- allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2, c: 3)
374
- expect(helper.document_index_view_type).to eq :b
375
- end
376
-
377
- it "uses the default view if the preference is not available" do
378
- allow(helper).to receive(:document_index_views).and_return(a: 1)
379
- expect(helper.document_index_view_type).to eq :a
380
- end
381
- end
382
-
383
- context "and a view is specified" do
384
- it "uses the query parameter" do
385
- allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2, c: 3)
386
- expect(helper.document_index_view_type(view: :c)).to eq :c
387
- end
388
- end
389
- end
390
- end
391
-
392
- context "related classes" do
393
- let(:presenter_class) { double }
394
- let(:blacklight_config) { Blacklight::Configuration.new }
395
-
396
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
397
-
398
- before do
399
- allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
400
- end
401
-
402
- describe "#index_presenter_class" do
403
- it "uses the value defined in the blacklight configuration" do
404
- blacklight_config.index.document_presenter_class = presenter_class
405
- expect(helper.index_presenter_class(nil)).to eq presenter_class
406
- end
407
-
408
- it "defaults to Blacklight::IndexPresenter" do
409
- expect(helper.index_presenter_class(nil)).to eq Blacklight::IndexPresenter
410
- end
411
- end
412
-
413
- describe "#show_presenter_class" do
414
- it "uses the value defined in the blacklight configuration" do
415
- blacklight_config.show.document_presenter_class = presenter_class
416
- expect(helper.show_presenter_class(nil)).to eq presenter_class
417
- end
418
-
419
- it "defaults to Blacklight::DocumentPresenter" do
420
- expect(helper.show_presenter_class(nil)).to eq Blacklight::ShowPresenter
421
- end
422
- end
423
- end
424
-
425
- describe "#render_document_heading" do
426
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
427
-
428
- let(:document) { double }
429
-
430
- before do
431
- allow(helper).to receive(:presenter).and_return(double(heading: "Heading"))
432
- end
433
-
434
- it "accepts no arguments and render the document heading" do
435
- expect(helper.render_document_heading).to have_selector "h4", text: "Heading"
436
- end
437
-
438
- it "accepts the tag name as an option" do
439
- expect(helper.render_document_heading(tag: "h1")).to have_selector "h1", text: "Heading"
440
- end
441
-
442
- it "accepts an explicit document argument" do
443
- allow(helper).to receive(:presenter).with(document).and_return(double(heading: "Document Heading"))
444
- expect(helper.render_document_heading(document)).to have_selector "h4", text: "Document Heading"
445
- end
446
-
447
- it "accepts the document with a tag option" do
448
- allow(helper).to receive(:presenter).with(document).and_return(double(heading: "Document Heading"))
449
- expect(helper.render_document_heading(document, tag: "h3")).to have_selector "h3", text: "Document Heading"
450
- end
451
- end
452
-
453
- describe "#presenter" do
454
- around { |test| Deprecation.silence(Blacklight::BlacklightHelperBehavior) { test.call } }
455
-
456
- let(:document) { double }
457
-
458
- before do
459
- allow(helper).to receive(:index_presenter).and_return(:index_presenter)
460
- allow(helper).to receive(:show_presenter).and_return(:show_presenter)
461
- allow(helper).to receive(:action_name).and_return(action_name)
462
- end
463
-
464
- context "action is show" do
465
- let(:action_name) { "show" }
466
-
467
- it "uses the show presenter" do
468
- expect(helper.presenter(document)).to eq(:show_presenter)
469
- end
470
- end
471
-
472
- context "action is citation" do
473
- let(:action_name) { "citation" }
474
-
475
- it "uses the show presenter" do
476
- expect(helper.presenter(document)).to eq(:show_presenter)
477
- end
478
- end
479
-
480
- context "action is index" do
481
- let(:action_name) { "index" }
482
-
483
- it "uses the index presenter" do
484
- expect(helper.presenter(document)).to eq(:index_presenter)
485
- end
486
- end
487
-
488
- context "action is foo" do
489
- let(:action_name) { "foo" }
490
-
491
- it "uses the index presenter (by default)" do
492
- expect(helper.presenter(document)).to eq(:index_presenter)
493
- end
494
- end
495
- end
496
201
  end
@@ -164,111 +164,6 @@ RSpec.describe CatalogHelper do
164
164
  end
165
165
  end
166
166
 
167
- describe "should_autofocus_on_search_box?" do
168
- before do
169
- allow(Deprecation).to receive(:warn)
170
- end
171
-
172
- it "is focused if we're on a catalog-like index page without query or facet parameters" do
173
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "index", has_search_parameters?: false)
174
- expect(helper.should_autofocus_on_search_box?).to be true
175
- end
176
-
177
- it "does not be focused if we're not on a catalog controller" do
178
- allow(helper).to receive_messages(controller: ApplicationController.new)
179
- expect(helper.should_autofocus_on_search_box?).to be false
180
- end
181
-
182
- it "does not be focused if we're not on a catalog controller index" do
183
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "show")
184
- expect(helper.should_autofocus_on_search_box?).to be false
185
- end
186
-
187
- it "does not be focused if a search parameters are provided" do
188
- allow(helper).to receive_messages(controller: CatalogController.new, action_name: "index", has_search_parameters?: true)
189
- expect(helper.should_autofocus_on_search_box?).to be false
190
- end
191
- end
192
-
193
- describe "has_thumbnail?" do
194
- before do
195
- allow(Deprecation).to receive(:warn)
196
- end
197
-
198
- let(:document) { SolrDocument.new(data) }
199
- let(:data) { {} }
200
-
201
- it "has a thumbnail if a thumbnail_method is configured" do
202
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_method: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
203
- expect(helper.has_thumbnail?(document)).to be true
204
- end
205
-
206
- context "if a thumbnail_field is configured and it exists in the document" do
207
- let(:data) { { xyz: 'abc' } }
208
-
209
- it "has a thumbnail" do
210
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
211
- expect(helper.has_thumbnail?(document)).to be true
212
- end
213
- end
214
-
215
- it "does not have a thumbnail if the thumbnail_field is missing from the document" do
216
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz, document_presenter_class: Blacklight::IndexPresenter)))
217
- allow(document).to receive_messages(has?: false)
218
- expect(helper.has_thumbnail?(document)).to be false
219
- end
220
-
221
- it "does not have a thumbnail if none of the fields are configured" do
222
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(document_presenter_class: Blacklight::IndexPresenter)))
223
- expect(helper).not_to have_thumbnail(document)
224
- end
225
- end
226
-
227
- describe "render_thumbnail_tag" do
228
- let(:index_presenter) do
229
- instance_double(Blacklight::IndexPresenter, thumbnail: thumbnail_presenter)
230
- end
231
- let(:thumbnail_presenter) { instance_double(Blacklight::ThumbnailPresenter) }
232
-
233
- before do
234
- allow(Deprecation).to receive(:warn)
235
- allow(helper).to receive(:index_presenter).with(document).and_return(index_presenter)
236
- end
237
-
238
- let(:document) { instance_double(SolrDocument) }
239
-
240
- it "calls thumbnail presenter with default values" do
241
- expect(thumbnail_presenter).to receive(:thumbnail_tag).with({}, {})
242
- helper.render_thumbnail_tag document
243
- end
244
-
245
- it "calls thumbnail presenter with provided values" do
246
- expect(thumbnail_presenter).to receive(:thumbnail_tag).with({}, { suppress_link: true })
247
- helper.render_thumbnail_tag document, {}, suppress_link: true
248
- end
249
- end
250
-
251
- describe "thumbnail_url" do
252
- before do
253
- allow(Deprecation).to receive(:warn)
254
- end
255
-
256
- it "pulls the configured thumbnail field out of the document" do
257
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)))
258
- document = instance_double(SolrDocument)
259
- allow(document).to receive(:has?).with(:xyz).and_return(true)
260
- allow(document).to receive(:first).with(:xyz).and_return("asdf")
261
- expect(helper.thumbnail_url(document)).to eq("asdf")
262
- end
263
-
264
- it "returns nil if the thumbnail field doesn't exist" do
265
- allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new(index: Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)))
266
- document = instance_double(SolrDocument)
267
- allow(document).to receive(:has?).with(:xyz).and_return(false)
268
- expect(helper.thumbnail_url(document)).to be_nil
269
- end
270
- end
271
-
272
167
  describe "document_counter_with_offset" do
273
168
  it "renders the document index with the appropriate offset" do
274
169
  assign(:response, instance_double(Blacklight::Solr::Response, start: 0, grouped?: false))
@@ -299,32 +194,32 @@ RSpec.describe CatalogHelper do
299
194
 
300
195
  it "pulls data out of a document's field" do
301
196
  blacklight_config.index.display_type_field = :type
302
- doc = { type: 'book' }
197
+ doc = { type: 'book' }.with_indifferent_access
303
198
  expect(helper.render_document_class(doc)).to eq "blacklight-book"
304
199
  end
305
200
 
306
201
  it "supports multivalued fields" do
307
202
  blacklight_config.index.display_type_field = :type
308
- doc = { type: %w[book mss] }
203
+ doc = { type: %w[book mss] }.with_indifferent_access
309
204
  expect(helper.render_document_class(doc)).to eq "blacklight-book blacklight-mss"
310
205
  end
311
206
 
312
207
  it "supports empty fields" do
313
208
  blacklight_config.index.display_type_field = :type
314
- doc = { type: [] }
209
+ doc = { type: [] }.with_indifferent_access
315
210
  expect(helper.render_document_class(doc)).to be_blank
316
211
  end
317
212
 
318
213
  it "supports missing fields" do
319
214
  blacklight_config.index.display_type_field = :type
320
- doc = {}
215
+ doc = {}.with_indifferent_access
321
216
  expect(helper.render_document_class(doc)).to be_blank
322
217
  end
323
218
 
324
219
  it "supports view-specific field configuration" do
325
220
  allow(helper).to receive(:document_index_view_type).and_return(:some_view_type)
326
221
  blacklight_config.view.some_view_type(display_type_field: :other_type)
327
- doc = { other_type: "document" }
222
+ doc = { other_type: "document" }.with_indifferent_access
328
223
  expect(helper.render_document_class(doc)).to eq "blacklight-document"
329
224
  end
330
225
  end
@@ -338,11 +233,11 @@ RSpec.describe CatalogHelper do
338
233
  end
339
234
 
340
235
  it "is bookmarked if the document is in the bookmarks" do
341
- expect(helper.bookmarked?(bookmarked_document)).to eq true
236
+ expect(helper.bookmarked?(bookmarked_document)).to be true
342
237
  end
343
238
 
344
239
  it "does not be bookmarked if the document is not listed in the bookmarks" do
345
- expect(helper.bookmarked?(SolrDocument.new(id: 'b'))).to eq false
240
+ expect(helper.bookmarked?(SolrDocument.new(id: 'b'))).to be false
346
241
  end
347
242
  end
348
243
 
@@ -388,11 +283,61 @@ RSpec.describe CatalogHelper do
388
283
 
389
284
  it { is_expected.to eq "foobar / Format: Book" }
390
285
  end
286
+ end
391
287
 
392
- context 'when the f param is not an array' do
393
- let(:params) { ActionController::Parameters.new(q: 'foobar', f: { format: 'Book' }) }
288
+ describe "render_grouped_response?" do
289
+ it "checks if the response ivar contains grouped data" do
290
+ assign(:response, instance_double(Blacklight::Solr::Response, grouped?: true))
291
+ expect(helper.render_grouped_response?).to be true
292
+ end
394
293
 
395
- it { is_expected.to eq "foobar / Format: Book" }
294
+ it "checks if the response param contains grouped data" do
295
+ response = instance_double(Blacklight::Solr::Response, grouped?: true)
296
+ expect(helper.render_grouped_response?(response)).to be true
297
+ end
298
+ end
299
+
300
+ describe "#document_index_view_type" do
301
+ it "defaults to the default view" do
302
+ allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
303
+ allow(helper).to receive(:default_document_index_view_type).and_return(:xyz)
304
+ expect(helper.document_index_view_type).to eq :xyz
305
+ end
306
+
307
+ it "uses the query parameter" do
308
+ allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
309
+ expect(helper.document_index_view_type(view: :a)).to eq :a
310
+ end
311
+
312
+ it "uses the default view if the requested view is not available" do
313
+ allow(helper).to receive(:default_document_index_view_type).and_return(:xyz)
314
+ allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2)
315
+ expect(helper.document_index_view_type(view: :c)).to eq :xyz
316
+ end
317
+
318
+ context "when they have a preferred view" do
319
+ before do
320
+ session[:preferred_view] = :b
321
+ end
322
+
323
+ context "and no view is specified" do
324
+ it "uses the saved preference" do
325
+ allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2, c: 3)
326
+ expect(helper.document_index_view_type).to eq :b
327
+ end
328
+
329
+ it "uses the default view if the preference is not available" do
330
+ allow(helper).to receive(:document_index_views).and_return(a: 1)
331
+ expect(helper.document_index_view_type).to eq :a
332
+ end
333
+ end
334
+
335
+ context "and a view is specified" do
336
+ it "uses the query parameter" do
337
+ allow(helper).to receive(:document_index_views).and_return(a: 1, b: 2, c: 3)
338
+ expect(helper.document_index_view_type(view: :c)).to eq :c
339
+ end
340
+ end
396
341
  end
397
342
  end
398
343
  end
data/spec/i18n_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'i18n/tasks'
3
4
 
4
5
  RSpec.describe 'I18n', type: :i18n do
@@ -20,7 +20,7 @@ RSpec.describe Blacklight::SolrGenerator do
20
20
  end
21
21
 
22
22
  after do
23
- files_to_test.each { |file| File.delete(file) if File.exist?(file) }
23
+ files_to_test.each { |file| FileUtils.rm_rf(file) }
24
24
  end
25
25
 
26
26
  it "creates config files" do
@@ -1,30 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Blacklight::Configuration::FacetField do
4
- describe 'link_to_search' do
5
- subject { described_class.new(link_to_search: true) }
6
-
7
- it 'is deprecated' do
8
- expect(Deprecation).to receive(:warn)
9
- expect(subject.normalize!)
10
- expect(subject.link_to_facet).to eq true
11
- end
12
- end
13
-
14
4
  describe '#normalize!' do
15
- it 'preserves existing properties' do
16
- expected = double
17
- subject.presenter = expected
5
+ context 'with existing properties' do
6
+ let(:expected_presenter) { double }
7
+ let(:expected_component) { double }
18
8
 
19
- subject.normalize!
9
+ before do
10
+ subject.presenter = expected_presenter
11
+ subject.component = expected_component
12
+ end
20
13
 
21
- expect(subject.presenter).to eq expected
14
+ it 'preserves existing properties' do
15
+ subject.normalize!
16
+
17
+ expect(subject.presenter).to eq expected_presenter
18
+ expect(subject.component).to eq expected_component
19
+ end
22
20
  end
23
21
 
24
- it 'adds a default presenter' do
22
+ it 'adds a default presenter and component' do
25
23
  subject.normalize!
26
24
 
27
25
  expect(subject.presenter).to eq Blacklight::FacetFieldPresenter
26
+ expect(subject.component).to eq Blacklight::FacetFieldListComponent
27
+ end
28
+
29
+ context 'when component is set to true' do
30
+ before do
31
+ subject.component = true
32
+ end
33
+
34
+ it 'casts to the default component' do
35
+ subject.normalize!
36
+
37
+ expect(subject.component).to eq Blacklight::FacetFieldListComponent
38
+ end
28
39
  end
29
40
  end
30
41
  end
@@ -8,7 +8,7 @@ RSpec.describe Blacklight::Configuration::Field do
8
8
 
9
9
  describe '#display_label' do
10
10
  it "looks up the label to display for the given document and field" do
11
- allow(I18n).to receive(:t).with(:"blacklight.search.fields.my_context.some_key", default: [:"blacklight.search.fields.some_key", label, subject.default_label]).and_return('x')
11
+ allow(I18n).to receive(:t).with(:'blacklight.search.fields.my_context.some_key', default: [:'blacklight.search.fields.some_key', label, subject.default_label]).and_return('x')
12
12
  expect(subject.display_label('my_context')).to eq 'x'
13
13
  end
14
14
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::Configuration::SessionTrackingConfig do
4
+ subject(:config) { described_class.new }
5
+
6
+ it "defaults @storage to 'server'" do
7
+ expect(config.storage).to eq 'server'
8
+ end
9
+
10
+ context "@storage is set to 'server'" do
11
+ before do
12
+ config.storage = 'server'
13
+ end
14
+
15
+ it "defaults components values" do
16
+ expect(config.applied_params_component).to eq Blacklight::SearchContext::ServerAppliedParamsComponent
17
+ expect(config.item_pagination_component).to eq Blacklight::SearchContext::ServerItemPaginationComponent
18
+ end
19
+
20
+ it "defaults tracking url helper" do
21
+ expect(config.url_helper).to be_nil
22
+ end
23
+ end
24
+
25
+ context "@storage is set to false" do
26
+ before do
27
+ config.storage = false
28
+ end
29
+
30
+ it "defaults components values" do
31
+ expect(config.applied_params_component).to be_nil
32
+ end
33
+
34
+ it "defaults tracking url helper" do
35
+ expect(config.url_helper).to be_nil
36
+ end
37
+ end
38
+ end
@@ -8,7 +8,7 @@ RSpec.describe Blacklight::Configuration::ViewConfig do
8
8
 
9
9
  describe '#display_label' do
10
10
  it "looks up the label to display for the given document and field" do
11
- allow(I18n).to receive(:t).with(:"blacklight.search.view_title.my_view", default: [:"blacklight.search.view.my_view", label, nil, "My view"]).and_return('x')
11
+ allow(I18n).to receive(:t).with(:'blacklight.search.view_title.my_view', default: [:'blacklight.search.view.my_view', label, nil, "My view"]).and_return('x')
12
12
  expect(subject.display_label).to eq 'x'
13
13
  end
14
14
  end