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
@@ -32,11 +32,11 @@ RSpec.describe 'Blacklight::Document::ActiveModelShim', api: true do
32
32
 
33
33
  describe "#==" do
34
34
  it 'is equal for the same id' do
35
- expect(MockDocument.new(id: 1) == MockDocument.new(id: 1)).to eq true
35
+ expect(MockDocument.new(id: 1) == MockDocument.new(id: 1)).to be true
36
36
  end
37
37
 
38
38
  it 'is not equal if the ids differ' do
39
- expect(MockDocument.new(id: 1) == MockDocument.new(id: 2)).to eq false
39
+ expect(MockDocument.new(id: 1) == MockDocument.new(id: 2)).to be false
40
40
  end
41
41
  end
42
42
  end
@@ -1,7 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Blacklight::Icon do
4
- subject { described_class.new(:search, classes: 'awesome', aria_hidden: true) }
4
+ subject(:instance) { described_class.new(:test, classes: 'awesome', aria_hidden: true) }
5
+
6
+ let(:svg) { String.new(Blacklight::Icons::SearchComponent.new.svg) }
7
+ let(:asset) { double(source: svg) }
8
+
9
+ before do
10
+ if defined?(Sprockets)
11
+ allow(Rails.application.assets).to receive(:find_asset).and_return(asset)
12
+ elsif defined?(Propshaft)
13
+ allow(Rails.application.assets.load_path).to receive(:find).and_return(asset)
14
+ end
15
+ end
5
16
 
6
17
  describe '#svg' do
7
18
  it 'returns a string' do
@@ -20,31 +31,31 @@ RSpec.describe Blacklight::Icon do
20
31
 
21
32
  it 'adds title' do
22
33
  expect(Capybara.string(subject.svg))
23
- .to have_css 'title', text: 'Search'
34
+ .to have_css 'title', text: 'Test'
24
35
  end
25
36
 
26
37
  context 'when label is false' do
27
- subject { described_class.new(:search, classes: 'awesome', aria_hidden: true, label: false) }
38
+ subject { described_class.new(:test, classes: 'awesome', aria_hidden: true, label: false) }
28
39
 
29
40
  it 'does not add title' do
30
41
  expect(Capybara.string(subject.svg))
31
- .not_to have_css 'title', text: 'Search'
42
+ .not_to have_css 'title', text: 'Test'
32
43
  end
33
44
  end
34
45
 
35
- context ' with a label context' do
36
- subject { described_class.new(:search, classes: 'awesome', aria_hidden: true, additional_options: { label_context: 'foo' }) }
46
+ context 'with a label context' do
47
+ subject { described_class.new(:test, classes: 'awesome', aria_hidden: true, additional_options: { label_context: 'foo' }) }
37
48
 
38
49
  it 'adds title' do
39
50
  expect(Capybara.string(subject.svg))
40
- .to have_css 'title', text: 'Search'
51
+ .to have_css 'title', text: 'Test'
41
52
  end
42
53
  end
43
54
  end
44
55
 
45
56
  describe '#options' do
46
57
  it 'applies options classes and default class' do
47
- expect(subject.options[:class]).to eq 'blacklight-icons blacklight-icon-search awesome'
58
+ expect(subject.options[:class]).to eq 'blacklight-icons blacklight-icon-test awesome'
48
59
  end
49
60
 
50
61
  it 'applies options aria-hidden=true' do
@@ -59,30 +70,33 @@ RSpec.describe Blacklight::Icon do
59
70
  end
60
71
 
61
72
  it 'has no aria-hidden attribute with no options' do
62
- expect(subject.options[:'aria-hidden']).to be nil
73
+ expect(subject.options[:'aria-hidden']).to be_nil
63
74
  end
64
75
  end
65
76
  end
66
77
 
67
78
  describe '#path' do
68
79
  it 'prepends blacklight and sufixes .svg' do
69
- expect(subject.path).to eq 'blacklight/search.svg'
80
+ expect(subject.path).to eq 'blacklight/test.svg'
70
81
  end
71
82
  end
72
83
 
73
84
  describe 'file_source' do
85
+ subject(:file_source) { instance.file_source }
86
+
74
87
  context 'file is not available' do
75
88
  subject { described_class.new(:yolo) }
76
89
 
77
- it {
78
- expect { subject.file_source }
79
- .to raise_error(Blacklight::Exceptions::IconNotFound)
80
- }
90
+ let(:asset) { nil }
91
+
92
+ it 'raises an error when not found' do
93
+ expect { file_source }.to raise_error(Blacklight::Exceptions::IconNotFound)
94
+ end
81
95
  end
82
96
 
83
97
  context 'file is available' do
84
98
  it 'returns the filesource' do
85
- expect(subject.file_source).to include '<svg'
99
+ expect(file_source).to include '<svg'
86
100
  end
87
101
  end
88
102
  end
@@ -45,7 +45,7 @@ RSpec.describe Blacklight::SearchBuilder, api: true do
45
45
 
46
46
  it "is mutable" do
47
47
  subject.processor_chain.insert(-1, :d)
48
- expect(subject.processor_chain).to match_array [:a, :b, :c, :d]
48
+ expect(subject.processor_chain).to contain_exactly(:a, :b, :c, :d)
49
49
  end
50
50
  end
51
51
 
@@ -56,7 +56,7 @@ RSpec.describe Blacklight::SearchBuilder, api: true do
56
56
  builder = subject.append(:d, :e)
57
57
  expect(subject.processor_chain).to eq processor_chain
58
58
  expect(builder.processor_chain).not_to eq subject.processor_chain
59
- expect(builder.processor_chain).to match_array [:a, :b, :c, :d, :e]
59
+ expect(builder.processor_chain).to contain_exactly(:a, :b, :c, :d, :e)
60
60
  end
61
61
  end
62
62
 
@@ -68,7 +68,7 @@ RSpec.describe Blacklight::SearchBuilder, api: true do
68
68
  expect(builder).not_to equal(subject)
69
69
  expect(subject.processor_chain).to eq processor_chain
70
70
  expect(builder.processor_chain).not_to eq subject.processor_chain
71
- expect(builder.processor_chain).to match_array [:a, :c, :e]
71
+ expect(builder.processor_chain).to contain_exactly(:a, :c, :e)
72
72
  end
73
73
  end
74
74
 
@@ -234,50 +234,50 @@ RSpec.describe Blacklight::SearchBuilder, api: true do
234
234
 
235
235
  describe "#params_changed?" do
236
236
  it "is false" do
237
- expect(subject.send(:params_changed?)).to eq false
237
+ expect(subject.send(:params_changed?)).to be false
238
238
  end
239
239
 
240
240
  it "is marked as changed when with() changes" do
241
241
  subject.with(a: 1)
242
- expect(subject.send(:params_changed?)).to eq true
242
+ expect(subject.send(:params_changed?)).to be true
243
243
  end
244
244
 
245
245
  it "is marked as changed when where() changes" do
246
246
  subject.where(a: 1)
247
- expect(subject.send(:params_changed?)).to eq true
247
+ expect(subject.send(:params_changed?)).to be true
248
248
  end
249
249
 
250
250
  it "is marked as changed when the processor chain changes" do
251
251
  subject.append(:a)
252
- expect(subject.send(:params_changed?)).to eq true
252
+ expect(subject.send(:params_changed?)).to be true
253
253
  end
254
254
 
255
255
  it "is marked as changed when merged parameters are added" do
256
256
  subject.merge(a: 1)
257
- expect(subject.send(:params_changed?)).to eq true
257
+ expect(subject.send(:params_changed?)).to be true
258
258
  end
259
259
 
260
260
  it "is marked as changed when reverse merged parameters are added" do
261
261
  subject.reverse_merge(a: 1)
262
- expect(subject.send(:params_changed?)).to eq true
262
+ expect(subject.send(:params_changed?)).to be true
263
263
  end
264
264
 
265
265
  it "is marked as changed when pagination changes" do
266
266
  expect(subject).to receive(:page=).with(1).and_call_original
267
267
  subject.page(1)
268
- expect(subject.send(:params_changed?)).to eq true
268
+ expect(subject.send(:params_changed?)).to be true
269
269
  end
270
270
 
271
271
  it "is marked as changed when rows changes" do
272
272
  expect(subject).to receive(:rows=).with(1).and_call_original
273
273
  subject.rows(1)
274
- expect(subject.send(:params_changed?)).to eq true
274
+ expect(subject.send(:params_changed?)).to be true
275
275
  end
276
276
 
277
277
  it "is marked as changed when start offset changes" do
278
278
  expect(subject).to receive(:start=).with(1).and_call_original
279
279
  subject.start(1)
280
- expect(subject.send(:params_changed?)).to eq true
280
+ expect(subject.send(:params_changed?)).to be true
281
281
  end
282
282
  end
283
283
  end
@@ -21,9 +21,9 @@ RSpec.describe "Blacklight::Solr::Document", api: true do
21
21
  it 'creates a doc with hashy methods' do
22
22
  doc = SolrDocument.new('id' => 'SP2514N', 'inStock' => true, 'manu' => 'Samsung Electronics Co. Ltd.', 'name' => 'Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133', 'popularity' => 6, 'price' => 92.0, 'sku' => 'SP2514N', 'timestamp' => '2009-03-20T14:42:49.795Z', 'cat' => ['electronics', 'hard drive'], 'spell' => ['Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133'], 'features' => ['7200RPM, 8MB cache, IDE Ultra ATA-133', 'NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor'])
23
23
 
24
- expect(doc.has?(:cat, /^elec/)).to eq true
25
- expect(doc.has?(:cat, 'elec')).not_to eq true
26
- expect(doc.has?(:cat, 'electronics')).to eq true
24
+ expect(doc.has?(:cat, /^elec/)).to be true
25
+ expect(doc.has?(:cat, 'elec')).not_to be true
26
+ expect(doc.has?(:cat, 'electronics')).to be true
27
27
 
28
28
  expect(doc.fetch(:cat)).to eq ['electronics', 'hard drive']
29
29
  expect(doc.fetch(:xyz, nil)).to be_nil
@@ -45,7 +45,7 @@ RSpec.describe Blacklight::Solr::Request, api: true do
45
45
  subject.append_query 'this is my query'
46
46
  subject.append_query 'another:query'
47
47
  expect(subject).not_to have_key 'q'
48
- expect(subject.dig('json', 'query', 'bool', 'must')).to match_array ['this is my query', 'another:query']
48
+ expect(subject.dig('json', 'query', 'bool', 'must')).to contain_exactly('this is my query', 'another:query')
49
49
  end
50
50
  end
51
51
 
@@ -62,7 +62,7 @@ RSpec.describe Blacklight::Solr::Request, api: true do
62
62
  subject['q'] = 'some query'
63
63
  subject.append_boolean_query :must, 'also required'
64
64
 
65
- expect(subject.dig('json', 'query', 'bool', 'must')).to match_array ['some query', 'also required']
65
+ expect(subject.dig('json', 'query', 'bool', 'must')).to contain_exactly('some query', 'also required')
66
66
  end
67
67
  end
68
68
  end
@@ -114,13 +114,13 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
114
114
 
115
115
  it "defaults to count if no value is found and the default limit is used" do
116
116
  expect(subject.aggregations['my_field'].sort).to eq 'count'
117
- expect(subject.aggregations['my_field'].count?).to eq true
117
+ expect(subject.aggregations['my_field'].count?).to be true
118
118
  end
119
119
 
120
120
  it "defaults to index if no value is found and the limit is unlimited" do
121
121
  request_params['facet.limit'] = -1
122
122
  expect(subject.aggregations['my_field'].sort).to eq 'index'
123
- expect(subject.aggregations['my_field'].index?).to eq true
123
+ expect(subject.aggregations['my_field'].index?).to be true
124
124
  end
125
125
  end
126
126
 
@@ -335,21 +335,21 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
335
335
  let(:response) do
336
336
  {
337
337
  facets: {
338
- "count": 32,
339
- "categories": {
340
- "buckets": [
338
+ count: 32,
339
+ categories: {
340
+ buckets: [
341
341
  {
342
- "val": "electronics",
343
- "count": 12,
344
- "max_price": 60
342
+ val: "electronics",
343
+ count: 12,
344
+ max_price: 60
345
345
  },
346
346
  {
347
- "val": "currency",
348
- "count": 4
347
+ val: "currency",
348
+ count: 4
349
349
  },
350
350
  {
351
- "val": "memory",
352
- "count": 3
351
+ val: "memory",
352
+ count: 3
353
353
  }
354
354
  ]
355
355
  }
@@ -375,25 +375,25 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
375
375
  let(:response) do
376
376
  {
377
377
  facets: {
378
- "categories": {
379
- "buckets": [
378
+ categories: {
379
+ buckets: [
380
380
  {
381
- "val": "electronics",
382
- "count": 12,
383
- "top_manufacturer": {
384
- "buckets": [{
385
- "val": "corsair",
386
- "count": 3
381
+ val: "electronics",
382
+ count: 12,
383
+ top_manufacturer: {
384
+ buckets: [{
385
+ val: "corsair",
386
+ count: 3
387
387
  }]
388
388
  }
389
389
  },
390
390
  {
391
- "val": "currency",
392
- "count": 4,
393
- "top_manufacturer": {
394
- "buckets": [{
395
- "val": "boa",
396
- "count": 1
391
+ val: "currency",
392
+ count: 4,
393
+ top_manufacturer: {
394
+ buckets: [{
395
+ val: "boa",
396
+ count: 1
397
397
  }]
398
398
  }
399
399
  }
@@ -413,7 +413,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
413
413
  let(:response) do
414
414
  {
415
415
  facets: {
416
- "categories": {
416
+ categories: {
417
417
  "missing" => { "count" => 13 },
418
418
  "buckets" => [{ "val" => "India", "count" => 2 }, { "val" => "Iran", "count" => 2 }]
419
419
  }
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "spec_helper"
3
4
 
4
5
  RSpec.describe Blacklight::Solr::Response::GroupResponse, api: true do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "spec_helper"
3
4
 
4
5
  RSpec.describe Blacklight::Solr::Response::Group, api: true do
@@ -43,7 +43,7 @@ RSpec.describe Blacklight::Solr::Response, api: true do
43
43
 
44
44
  expected = "electronics - 14, memory - 3, card - 2, connector - 2, drive - 2, graphics - 2, hard - 2, monitor - 2, search - 2, software - 2"
45
45
  received = first_facet.items.collect do |item|
46
- item.value + ' - ' + item.hits.to_s
46
+ "#{item.value} - #{item.hits}"
47
47
  end.join(', ')
48
48
 
49
49
  expect(received).to eq expected
@@ -60,12 +60,19 @@ RSpec.describe Blacklight::Solr::Response, api: true do
60
60
  end
61
61
  end
62
62
 
63
+ it 'provides a null-object for facets that are not in the response' do
64
+ expect(r.aggregations).not_to include :some_null_object
65
+
66
+ expect(r.aggregations[:some_null_object]).to be_a Blacklight::Solr::Response::FacetField
67
+ expect(r.aggregations[:some_null_object].items).to be_blank
68
+ end
69
+
63
70
  it "provides kaminari pagination helpers" do
64
71
  expect(r.limit_value).to eq(r.rows)
65
72
  expect(r.offset_value).to eq(r.start)
66
73
  expect(r.total_count).to eq(r.total)
67
74
  expect(r.next_page).to eq(r.current_page + 1)
68
- expect(r.prev_page).to eq(nil)
75
+ expect(r.prev_page).to be_nil
69
76
  expect(r.entry_name(count: 1)).to eq 'entry'
70
77
  expect(r.entry_name(count: 2)).to eq 'entries'
71
78
  expect(r.size).to eq 26
@@ -3,8 +3,8 @@
3
3
  RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
4
4
  subject { search_builder.with(user_params) }
5
5
 
6
- let(:single_facet) { { format: 'Book' } }
7
- let(:multi_facets) { { format: 'Book', language_ssim: 'Tibetan' } }
6
+ let(:single_facet) { { format: ['Book'] } }
7
+ let(:multi_facets) { { format: ['Book'], language_ssim: ['Tibetan'] } }
8
8
  let(:mult_word_query) { 'tibetan history' }
9
9
  let(:subject_search_params) { { commit: "search", search_field: "subject", action: "index", controller: "catalog", rows: "10", q: "wome" } }
10
10
 
@@ -73,7 +73,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
73
73
  expect(subject[:pf]).to eq ""
74
74
  end
75
75
 
76
- describe "should respect proper precedence of settings, " do
76
+ describe "should respect proper precedence of settings," do
77
77
  it "does not put :search_field in produced params" do
78
78
  expect(subject[:search_field]).to be_nil
79
79
  end
@@ -108,7 +108,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
108
108
  end
109
109
 
110
110
  it "generates a facet limit" do
111
- expect(subject[:"f.subject_ssim.facet.limit"]).to eq 21
111
+ expect(subject[:'f.subject_ssim.facet.limit']).to eq 21
112
112
  end
113
113
 
114
114
  context 'with a negative facet limit' do
@@ -117,7 +117,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
117
117
  end
118
118
 
119
119
  it 'is negative' do
120
- expect(subject[:"f.subject_ssim.facet.limit"]).to eq -1
120
+ expect(subject[:'f.subject_ssim.facet.limit']).to eq -1
121
121
  end
122
122
  end
123
123
 
@@ -127,13 +127,13 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
127
127
  end
128
128
 
129
129
  it 'is negative' do
130
- expect(subject[:"f.subject_ssim.facet.limit"]).to eq 0
130
+ expect(subject[:'f.subject_ssim.facet.limit']).to eq 0
131
131
  end
132
132
  end
133
133
 
134
134
  it "handles no facet_limits in config" do
135
135
  blacklight_config.facet_fields = {}
136
- expect(subject).not_to have_key(:"f.subject_ssim.facet.limit")
136
+ expect(subject).not_to have_key(:'f.subject_ssim.facet.limit')
137
137
  end
138
138
 
139
139
  describe "with max per page enforced" do
@@ -178,7 +178,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
178
178
 
179
179
  it 'has default facet fields' do
180
180
  # remove local params from the facet.field
181
- expect(subject[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array %w[format subject_ssim pub_date_ssim language_ssim lc_1letter_ssim subject_geo_ssim subject_era_ssim]
181
+ expect(subject[:'facet.field'].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array %w[format subject_ssim pub_date_ssim language_ssim lc_1letter_ssim subject_geo_ssim subject_era_ssim]
182
182
  end
183
183
 
184
184
  it "does not have a default qt" do
@@ -191,6 +191,14 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
191
191
  end
192
192
  end
193
193
 
194
+ describe "for a missing string search" do
195
+ let(:user_params) { { q: nil } }
196
+
197
+ it "does not populate the q parameter in solr parameters" do
198
+ expect(subject).not_to have_key :q
199
+ end
200
+ end
201
+
194
202
  describe "for an empty string search" do
195
203
  let(:user_params) { { q: "" } }
196
204
 
@@ -216,7 +224,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
216
224
  expect(subject["spellcheck.q"]).to be_blank
217
225
 
218
226
  single_facet.each_value do |value|
219
- Array(value).each do |v|
227
+ value.each do |v|
220
228
  expect(subject[:fq]).to include("{!term f=#{single_facet.keys[0]}}#{v}")
221
229
  end
222
230
  end
@@ -355,14 +363,14 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
355
363
  end
356
364
 
357
365
  it "includes spellcheck.dictionary from field def solr_parameters" do
358
- expect(subject[:"spellcheck.dictionary"]).to eq "subject"
366
+ expect(subject[:'spellcheck.dictionary']).to eq "subject"
359
367
  end
360
368
 
361
369
  it "adds on :solr_local_parameters using Solr LocalParams style" do
362
370
  # q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
363
371
  # the LocalParams are really there
364
372
  subject[:q] =~ /^\{!([^}]+)\}/
365
- key_value_pairs = Regexp.last_match(1).split(" ")
373
+ key_value_pairs = Regexp.last_match(1).split
366
374
  expect(key_value_pairs).to include("pf=$subject_pf")
367
375
  expect(key_value_pairs).to include("qf=$subject_qf")
368
376
  end
@@ -400,16 +408,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
400
408
  end
401
409
  end
402
410
 
403
- describe "overriding of qt parameter" do
404
- let(:user_params) do
405
- { qt: 'overridden' }
406
- end
407
-
408
- it "returns the correct overriden parameter" do
409
- expect(subject[:qt]).to eq "overridden"
410
- end
411
- end
412
-
413
411
  describe "sorting" do
414
412
  context 'when the user has not provided a value' do
415
413
  it 'sends the default sort parameter to solr' do
@@ -492,7 +490,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
492
490
  describe 'the search field query_builder config' do
493
491
  let(:blacklight_config) do
494
492
  Blacklight::Configuration.new do |config|
495
- config.add_search_field('built_query', query_builder: ->(builder, *_args) { [builder.blacklight_params[:q].reverse, qq1: 'xyz'] })
493
+ config.add_search_field('built_query', query_builder: ->(builder, *_args) { [builder.blacklight_params[:q].reverse, { qq1: 'xyz' }] })
496
494
  end
497
495
  end
498
496
 
@@ -584,6 +582,17 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
584
582
 
585
583
  expect(solr_parameters[:fq]).to be_a_kind_of Array
586
584
  end
585
+
586
+ context "facet not defined in config" do
587
+ let(:single_facet) { { unknown_facet_field: "foo" } }
588
+ let(:user_params) { { f: single_facet } }
589
+
590
+ it "does not add facet to solr_parameters" do
591
+ solr_parameters = Blacklight::Solr::Request.new
592
+ subject.add_facet_fq_to_solr(solr_parameters)
593
+ expect(solr_parameters[:fq]).to be_blank
594
+ end
595
+ end
587
596
  end
588
597
 
589
598
  describe "#add_solr_fields_to_query" do
@@ -735,7 +744,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
735
744
  end
736
745
 
737
746
  it 'sets facets requested to facet_field argument' do
738
- expect(solr_parameters["facet.field".to_sym]).to eq facet_field
747
+ expect(solr_parameters[:'facet.field']).to eq facet_field
739
748
  end
740
749
 
741
750
  it 'defaults offset to 0' do
@@ -45,4 +45,26 @@ RSpec.describe "Blacklight::User", api: true do
45
45
  expect(subject.existing_bookmark_for(SolrDocument.new(id: 1))).to eq subject.bookmarks.first
46
46
  end
47
47
  end
48
+
49
+ describe '#to_s' do
50
+ it 'is the email by default' do
51
+ expect(subject.to_s).to eq subject.email
52
+ end
53
+
54
+ context 'when no email method is provided' do
55
+ let(:old_method) { subject.class.instance_method(:email) }
56
+
57
+ before do
58
+ subject.class.send(:undef_method, old_method.name)
59
+ end
60
+
61
+ after do
62
+ subject.class.send(:define_method, old_method.name, old_method)
63
+ end
64
+
65
+ it 'still provides a string' do
66
+ expect(subject.to_s).to be_a String
67
+ end
68
+ end
69
+ end
48
70
  end