blacklight 7.41.0 → 8.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +243 -14
  5. data/.rubocop_todo.yml +137 -429
  6. data/Gemfile +11 -6
  7. data/README.md +11 -3
  8. data/VERSION +1 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  11. data/app/assets/javascripts/blacklight/blacklight.js +374 -493
  12. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  13. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  16. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  17. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  18. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  19. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  20. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  22. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  23. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  24. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  25. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  26. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  27. data/app/builders/blacklight/action_builder.rb +18 -9
  28. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  29. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  30. data/app/components/blacklight/constraints_component.rb +27 -37
  31. data/app/components/blacklight/document/action_component.rb +12 -10
  32. data/app/components/blacklight/document/actions_component.rb +2 -2
  33. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  34. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  35. data/app/components/blacklight/document/citation_component.rb +5 -3
  36. data/app/components/blacklight/document/group_component.rb +7 -3
  37. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  38. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  39. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  40. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  41. data/app/components/blacklight/document_component.html.erb +1 -1
  42. data/app/components/blacklight/document_component.rb +16 -78
  43. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  44. data/app/components/blacklight/document_metadata_component.rb +5 -10
  45. data/app/components/blacklight/facet_component.rb +3 -3
  46. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  47. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  48. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  49. data/app/components/blacklight/facet_field_component.rb +9 -2
  50. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  51. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  52. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  53. data/app/components/blacklight/facet_item_component.rb +1 -43
  54. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  55. data/app/components/blacklight/header_component.rb +1 -1
  56. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  57. data/app/components/blacklight/icons/icon_component.rb +4 -9
  58. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  59. data/app/components/blacklight/icons/list_component.rb +16 -0
  60. data/app/components/blacklight/icons/search_component.rb +16 -0
  61. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  62. data/app/components/blacklight/metadata_field_component.rb +24 -8
  63. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  64. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  65. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  66. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  67. data/app/components/blacklight/response/pagination_component.rb +2 -11
  68. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  69. data/app/components/blacklight/response/sort_component.rb +1 -16
  70. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  71. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  72. data/app/components/blacklight/response/view_type_component.rb +4 -6
  73. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  74. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  75. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  76. data/app/components/blacklight/search_bar_component.rb +2 -16
  77. data/app/components/blacklight/search_button_component.rb +3 -3
  78. data/app/components/blacklight/search_context_component.rb +43 -10
  79. data/app/components/blacklight/search_header_component.html.erb +2 -0
  80. data/app/components/blacklight/search_header_component.rb +6 -0
  81. data/app/components/blacklight/start_over_button_component.rb +5 -3
  82. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  83. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  84. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  85. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  86. data/app/components/blacklight/system/modal_component.rb +1 -3
  87. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  88. data/app/components/blacklight/top_navbar_component.rb +0 -4
  89. data/app/controllers/bookmarks_controller.rb +1 -0
  90. data/app/controllers/catalog_controller.rb +1 -0
  91. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  92. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  93. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  94. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  95. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  96. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  97. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  98. data/app/controllers/search_history_controller.rb +1 -0
  99. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  100. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  101. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  102. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  103. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  104. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  105. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  106. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  107. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  108. data/app/helpers/blacklight_helper.rb +1 -0
  109. data/app/helpers/catalog_helper.rb +1 -0
  110. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  111. data/app/javascript/blacklight/button_focus.js +12 -10
  112. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  113. data/app/javascript/blacklight/core.js +5 -7
  114. data/app/javascript/blacklight/index.js +13 -0
  115. data/app/javascript/blacklight/modal.js +99 -164
  116. data/app/javascript/blacklight/modalForm.js +60 -0
  117. data/app/javascript/blacklight/search_context.js +46 -54
  118. data/app/models/blacklight/facet_paginator.rb +3 -2
  119. data/app/models/blacklight/icon.rb +4 -2
  120. data/app/models/bookmark.rb +0 -2
  121. data/app/models/concerns/blacklight/configurable.rb +5 -4
  122. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  123. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  124. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  125. data/app/models/concerns/blacklight/document/email.rb +1 -0
  126. data/app/models/concerns/blacklight/document/export.rb +2 -1
  127. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  128. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  129. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  130. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  131. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  132. data/app/models/concerns/blacklight/user.rb +17 -8
  133. data/app/models/record_mailer.rb +13 -12
  134. data/app/models/search.rb +1 -7
  135. data/app/models/solr_document.rb +1 -0
  136. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  137. data/app/presenters/blacklight/document_presenter.rb +23 -50
  138. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  139. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  140. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  141. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  142. data/app/presenters/blacklight/field_presenter.rb +1 -0
  143. data/app/presenters/blacklight/index_presenter.rb +2 -40
  144. data/app/presenters/blacklight/json_presenter.rb +10 -6
  145. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  146. data/app/presenters/blacklight/show_presenter.rb +1 -9
  147. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  148. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  149. data/app/services/blacklight/field_retriever.rb +12 -21
  150. data/app/services/blacklight/search_service.rb +10 -17
  151. data/app/values/blacklight/types.rb +0 -18
  152. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  153. data/app/views/bookmarks/_tools.html.erb +7 -12
  154. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  155. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  156. data/app/views/catalog/_citation.html.erb +1 -1
  157. data/app/views/catalog/_constraints.html.erb +1 -14
  158. data/app/views/catalog/_document.atom.builder +12 -14
  159. data/app/views/catalog/_document.html.erb +5 -3
  160. data/app/views/catalog/_document.rss.builder +2 -4
  161. data/app/views/catalog/_facet_layout.html.erb +2 -2
  162. data/app/views/catalog/_facets.html.erb +5 -4
  163. data/app/views/catalog/_home_text.html.erb +2 -14
  164. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  165. data/app/views/catalog/_search_form.html.erb +2 -2
  166. data/app/views/catalog/_search_header.html.erb +1 -2
  167. data/app/views/catalog/_search_results.html.erb +2 -2
  168. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  169. data/app/views/catalog/_show_main_content.html.erb +11 -16
  170. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  171. data/app/views/catalog/_show_tools.html.erb +8 -14
  172. data/app/views/catalog/_view_type_group.html.erb +1 -1
  173. data/app/views/catalog/email.html.erb +2 -2
  174. data/app/views/catalog/email_success.html.erb +5 -6
  175. data/app/views/catalog/facet.html.erb +7 -5
  176. data/app/views/catalog/index.atom.builder +12 -14
  177. data/app/views/catalog/index.html.erb +4 -1
  178. data/app/views/catalog/index.json.jbuilder +19 -19
  179. data/app/views/catalog/index.rss.builder +1 -1
  180. data/app/views/catalog/opensearch.xml.builder +1 -1
  181. data/app/views/catalog/sms.html.erb +2 -2
  182. data/app/views/catalog/sms_success.html.erb +5 -6
  183. data/app/views/catalog/suggest.html.erb +3 -0
  184. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  185. data/app/views/layouts/blacklight/base.html.erb +13 -2
  186. data/app/views/search_history/index.html.erb +6 -2
  187. data/app/views/shared/_flash_messages.html.erb +1 -1
  188. data/app/views/shared/_modal.html.erb +3 -3
  189. data/blacklight.gemspec +7 -11
  190. data/config/importmap.rb +3 -0
  191. data/config/locales/blacklight.ar.yml +0 -1
  192. data/config/locales/blacklight.ca.yml +0 -1
  193. data/config/locales/blacklight.de.yml +0 -1
  194. data/config/locales/blacklight.en.yml +0 -2
  195. data/config/locales/blacklight.es.yml +0 -1
  196. data/config/locales/blacklight.fr.yml +0 -1
  197. data/config/locales/blacklight.hu.yml +0 -1
  198. data/config/locales/blacklight.it.yml +0 -1
  199. data/config/locales/blacklight.nl.yml +0 -1
  200. data/config/locales/blacklight.pt-BR.yml +0 -1
  201. data/config/locales/blacklight.sq.yml +0 -1
  202. data/config/locales/blacklight.zh.yml +0 -1
  203. data/config/routes.rb +3 -2
  204. data/db/migrate/20140202020201_create_searches.rb +1 -0
  205. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  206. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  207. data/docker-compose.yml +3 -3
  208. data/lib/blacklight/abstract_repository.rb +1 -6
  209. data/lib/blacklight/component.rb +47 -10
  210. data/lib/blacklight/configuration/context.rb +4 -4
  211. data/lib/blacklight/configuration/display_field.rb +7 -9
  212. data/lib/blacklight/configuration/facet_field.rb +17 -11
  213. data/lib/blacklight/configuration/field.rb +1 -0
  214. data/lib/blacklight/configuration/fields.rb +12 -15
  215. data/lib/blacklight/configuration/index_field.rb +1 -0
  216. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  217. data/lib/blacklight/configuration/search_field.rb +1 -0
  218. data/lib/blacklight/configuration/show_field.rb +1 -0
  219. data/lib/blacklight/configuration/sort_field.rb +1 -0
  220. data/lib/blacklight/configuration/tool_config.rb +1 -0
  221. data/lib/blacklight/configuration/view_config.rb +14 -10
  222. data/lib/blacklight/configuration.rb +310 -365
  223. data/lib/blacklight/engine.rb +8 -24
  224. data/lib/blacklight/exceptions.rb +2 -2
  225. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  226. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  227. data/lib/blacklight/parameters.rb +7 -21
  228. data/lib/blacklight/routes/exportable.rb +1 -0
  229. data/lib/blacklight/routes/searchable.rb +2 -1
  230. data/lib/blacklight/routes.rb +1 -0
  231. data/lib/blacklight/search_builder.rb +10 -10
  232. data/lib/blacklight/search_state/filter_field.rb +8 -25
  233. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  234. data/lib/blacklight/search_state.rb +23 -79
  235. data/lib/blacklight/solr/document.rb +1 -0
  236. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  237. data/lib/blacklight/solr/repository.rb +4 -24
  238. data/lib/blacklight/solr/request.rb +1 -0
  239. data/lib/blacklight/solr/response/facets.rb +21 -5
  240. data/lib/blacklight/solr/response/group.rb +1 -0
  241. data/lib/blacklight/solr/response/group_response.rb +1 -0
  242. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  243. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  244. data/lib/blacklight/solr/response/params.rb +5 -4
  245. data/lib/blacklight/solr/response/response.rb +1 -0
  246. data/lib/blacklight/solr/response/spelling.rb +1 -0
  247. data/lib/blacklight/solr/response.rb +16 -3
  248. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  249. data/lib/blacklight/solr.rb +7 -0
  250. data/lib/blacklight/version.rb +1 -0
  251. data/lib/blacklight.rb +26 -14
  252. data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
  253. data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
  254. data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
  255. data/lib/generators/blacklight/assets_generator.rb +13 -86
  256. data/lib/generators/blacklight/controller_generator.rb +4 -3
  257. data/lib/generators/blacklight/document_generator.rb +1 -0
  258. data/lib/generators/blacklight/install_generator.rb +4 -3
  259. data/lib/generators/blacklight/models_generator.rb +1 -0
  260. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  261. data/lib/generators/blacklight/solr_generator.rb +1 -1
  262. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  263. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
  264. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  265. data/lib/generators/blacklight/user_generator.rb +7 -9
  266. data/lib/railties/blacklight.rake +6 -7
  267. data/package.json +10 -13
  268. data/rollup.config.js +27 -0
  269. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  270. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  271. data/spec/components/blacklight/document_component_spec.rb +22 -131
  272. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  273. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  274. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  275. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  276. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  277. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  278. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  279. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  280. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  281. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  282. data/spec/controllers/catalog_controller_spec.rb +13 -135
  283. data/spec/features/advanced_search_spec.rb +0 -56
  284. data/spec/features/autocomplete_spec.rb +1 -1
  285. data/spec/features/axe_spec.rb +1 -6
  286. data/spec/features/bookmarks_spec.rb +1 -1
  287. data/spec/features/facets_spec.rb +6 -4
  288. data/spec/features/search_context_spec.rb +5 -11
  289. data/spec/features/search_results_spec.rb +0 -33
  290. data/spec/features/sitelinks_search_box.rb +13 -0
  291. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  292. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  293. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  294. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  295. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  296. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  297. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  298. data/spec/helpers/catalog_helper_spec.rb +7 -118
  299. data/spec/i18n_spec.rb +1 -0
  300. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  301. data/spec/lib/blacklight/component_spec.rb +27 -32
  302. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  303. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  304. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  305. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  306. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  307. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  308. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  309. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  310. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  311. data/spec/models/blacklight/configuration_spec.rb +17 -51
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  313. data/spec/models/blacklight/icon_spec.rb +31 -15
  314. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  315. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  316. data/spec/models/blacklight/solr/repository_spec.rb +0 -45
  317. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  318. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  319. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  320. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  321. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  322. data/spec/models/blacklight/user_spec.rb +22 -0
  323. data/spec/models/solr_document_spec.rb +3 -9
  324. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  325. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  326. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  327. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  328. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  329. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  330. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  331. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  333. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  334. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  335. data/spec/requests/load_suggestions_spec.rb +16 -0
  336. data/spec/routing/catalog_routing_spec.rb +2 -1
  337. data/spec/services/blacklight/search_service_spec.rb +39 -76
  338. data/spec/spec_helper.rb +8 -9
  339. data/spec/support/controller_level_helpers.rb +1 -2
  340. data/spec/support/features/search_helpers.rb +39 -0
  341. data/spec/support/features/session_helpers.rb +1 -0
  342. data/spec/support/features.rb +3 -0
  343. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  344. data/spec/test_app_templates/Gemfile.extra +1 -0
  345. data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
  346. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  347. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  348. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  349. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  350. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  351. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  352. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  353. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  354. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  355. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  356. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  357. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  358. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  360. data/tasks/blacklight.rake +11 -9
  361. data/template.demo.rb +7 -7
  362. metadata +77 -189
  363. data/.babelrc +0 -11
  364. data/.github/matrix.json +0 -62
  365. data/.github/workflows/build.yml +0 -16
  366. data/.github/workflows/lint.yml +0 -23
  367. data/.github/workflows/main.yml +0 -23
  368. data/.github/workflows/test.yml +0 -53
  369. data/app/assets/images/blacklight/list.svg +0 -1
  370. data/app/assets/images/blacklight/search.svg +0 -1
  371. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  372. data/app/components/blacklight/content_areas_shim.rb +0 -13
  373. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  374. data/app/components/blacklight/search/per_page_component.rb +0 -50
  375. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  376. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  377. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  378. data/app/controllers/concerns/blacklight/base.rb +0 -12
  379. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  380. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  381. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  382. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  383. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  384. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  385. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  386. data/app/javascript/blacklight/autocomplete.js +0 -36
  387. data/app/javascript/blacklight/facet_load.js +0 -22
  388. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  389. data/app/views/catalog/_constraints_element.html.erb +0 -14
  390. data/app/views/catalog/_document_action.html.erb +0 -5
  391. data/app/views/catalog/_facet_group.html.erb +0 -5
  392. data/app/views/catalog/_facet_limit.html.erb +0 -3
  393. data/app/views/catalog/_index.html.erb +0 -1
  394. data/app/views/catalog/_index_header.html.erb +0 -22
  395. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  396. data/app/views/catalog/_show.html.erb +0 -6
  397. data/app/views/catalog/_show_header.html.erb +0 -2
  398. data/app/views/catalog/_thumbnail.html.erb +0 -1
  399. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  400. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  401. data/spec/components/blacklight/header_component_spec.rb +0 -20
  402. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  403. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  404. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  405. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  406. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  407. data/spec/features/citation_spec.rb +0 -10
  408. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  409. data/spec/features/sms_spec.rb +0 -12
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  416. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  417. data/spec/support/view_component_test_helpers.rb +0 -35
  418. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  419. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  420. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  421. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  422. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  423. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  424. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  425. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rake'
3
4
 
4
5
  RSpec.describe "blacklight:delete_old_searches" do
@@ -39,13 +39,13 @@ RSpec.describe "Blacklight::Configuration", api: true do
39
39
  end
40
40
 
41
41
  it "has ordered hashes for field configuration" do
42
- expect(config.facet_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
43
- expect(config.index_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
44
- expect(config.show_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
45
- expect(config.search_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
46
- expect(config.show_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
47
- expect(config.search_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
48
- expect(config.sort_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
42
+ expect(config.facet_fields).to be_a_kind_of Hash
43
+ expect(config.index_fields).to be_a_kind_of Hash
44
+ expect(config.show_fields).to be_a_kind_of Hash
45
+ expect(config.search_fields).to be_a_kind_of Hash
46
+ expect(config.show_fields).to be_a_kind_of Hash
47
+ expect(config.search_fields).to be_a_kind_of Hash
48
+ expect(config.sort_fields).to be_a_kind_of Hash
49
49
  end
50
50
  end
51
51
 
@@ -96,28 +96,6 @@ RSpec.describe "Blacklight::Configuration", api: true do
96
96
  let(:image) { SolrDocument.new(format: 'Image') }
97
97
  let(:sound) { SolrDocument.new(format: 'Sound') }
98
98
 
99
- context 'with deprecated behavior' do
100
- before do
101
- allow(Deprecation).to receive(:warn)
102
- end
103
-
104
- it 'accepts documents as an argument to index_fields_for' do
105
- config.for_display_type "Image" do |c|
106
- c.add_index_field :dimensions
107
- end
108
- config.add_index_field :title
109
- expect(config.index_fields_for(image)).to have_key 'dimensions'
110
- end
111
-
112
- it 'accepts documents as an argument to show_fields_for' do
113
- config.for_display_type "Image" do |c|
114
- c.add_show_field :dimensions
115
- end
116
- config.add_show_field :title
117
- expect(config.show_fields_for(image)).to have_key 'dimensions'
118
- end
119
- end
120
-
121
99
  it "adds index fields just for a certain type" do
122
100
  config.for_display_type "Image" do |c|
123
101
  c.add_index_field :dimensions
@@ -183,18 +161,6 @@ RSpec.describe "Blacklight::Configuration", api: true do
183
161
  end
184
162
  end
185
163
 
186
- context "when model classes are not set" do
187
- it "leaves response_model and document_model empty" do
188
- expect(config_copy.fetch(:response_model, nil)).to be_nil
189
- expect(config_copy.fetch(:document_model, nil)).to be_nil
190
- end
191
-
192
- it "returns default classes" do
193
- expect(config_copy.response_model).to eq Blacklight::Solr::Response
194
- expect(config_copy.document_model).to eq SolrDocument
195
- end
196
- end
197
-
198
164
  it "provides cloned copies of mutable data structures" do
199
165
  config.a = { value: 1 }
200
166
  config.b = [1, 2, 3]
@@ -327,17 +293,17 @@ RSpec.describe "Blacklight::Configuration", api: true do
327
293
 
328
294
  describe "if/unless conditions with legacy show parameter" do
329
295
  it "is hidden if the if condition is false" do
330
- expect(config.add_facet_field("hidden", if: false).if).to eq false
331
- expect(config.add_facet_field("hidden_with_legacy", if: false, show: true).if).to eq false
296
+ expect(config.add_facet_field("hidden", if: false).if).to be false
297
+ expect(config.add_facet_field("hidden_with_legacy", if: false, show: true).if).to be false
332
298
  end
333
299
 
334
300
  it "is true if the if condition is true" do
335
- expect(config.add_facet_field("hidden", if: true).if).to eq true
336
- expect(config.add_facet_field("hidden_with_legacy", if: true, show: false).if).to eq true
301
+ expect(config.add_facet_field("hidden", if: true).if).to be true
302
+ expect(config.add_facet_field("hidden_with_legacy", if: true, show: false).if).to be true
337
303
  end
338
304
 
339
305
  it "is true if the if condition is missing" do
340
- expect(config.add_facet_field("hidden", show: true).if).to eq true
306
+ expect(config.add_facet_field("hidden", show: true).if).to be true
341
307
  end
342
308
  end
343
309
  end
@@ -498,17 +464,17 @@ RSpec.describe "Blacklight::Configuration", api: true do
498
464
 
499
465
  describe "if/unless conditions with legacy include_in_simple_search" do
500
466
  it "is hidden if the if condition is false" do
501
- expect(config.add_search_field("hidden", if: false).if).to eq false
502
- expect(config.add_search_field("hidden_with_legacy", if: false, include_in_simple_search: true).if).to eq false
467
+ expect(config.add_search_field("hidden", if: false).if).to be false
468
+ expect(config.add_search_field("hidden_with_legacy", if: false, include_in_simple_search: true).if).to be false
503
469
  end
504
470
 
505
471
  it "is true if the if condition is true" do
506
- expect(config.add_search_field("hidden", if: true).if).to eq true
507
- expect(config.add_search_field("hidden_with_legacy", if: true, include_in_simple_search: false).if).to eq true
472
+ expect(config.add_search_field("hidden", if: true).if).to be true
473
+ expect(config.add_search_field("hidden_with_legacy", if: true, include_in_simple_search: false).if).to be true
508
474
  end
509
475
 
510
476
  it "is true if the if condition is missing" do
511
- expect(config.add_search_field("hidden", include_in_simple_search: true).if).to eq true
477
+ expect(config.add_search_field("hidden", include_in_simple_search: true).if).to be true
512
478
  end
513
479
  end
514
480
  end
@@ -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,20 @@
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
+ # FileUtils.mkdir_p '.internal_test_app/app/assets/images/blacklight'
16
+ # File.write '.internal_test_app/app/assets/images/blacklight/test.svg', Blacklight::Icons::SearchComponent.new.svg
17
+ end
5
18
 
6
19
  describe '#svg' do
7
20
  it 'returns a string' do
@@ -20,31 +33,31 @@ RSpec.describe Blacklight::Icon do
20
33
 
21
34
  it 'adds title' do
22
35
  expect(Capybara.string(subject.svg))
23
- .to have_css 'title', text: 'Search'
36
+ .to have_css 'title', text: 'Test'
24
37
  end
25
38
 
26
39
  context 'when label is false' do
27
- subject { described_class.new(:search, classes: 'awesome', aria_hidden: true, label: false) }
40
+ subject { described_class.new(:test, classes: 'awesome', aria_hidden: true, label: false) }
28
41
 
29
42
  it 'does not add title' do
30
43
  expect(Capybara.string(subject.svg))
31
- .not_to have_css 'title', text: 'Search'
44
+ .not_to have_css 'title', text: 'Test'
32
45
  end
33
46
  end
34
47
 
35
- context ' with a label context' do
36
- subject { described_class.new(:search, classes: 'awesome', aria_hidden: true, additional_options: { label_context: 'foo' }) }
48
+ context 'with a label context' do
49
+ subject { described_class.new(:test, classes: 'awesome', aria_hidden: true, additional_options: { label_context: 'foo' }) }
37
50
 
38
51
  it 'adds title' do
39
52
  expect(Capybara.string(subject.svg))
40
- .to have_css 'title', text: 'Search'
53
+ .to have_css 'title', text: 'Test'
41
54
  end
42
55
  end
43
56
  end
44
57
 
45
58
  describe '#options' do
46
59
  it 'applies options classes and default class' do
47
- expect(subject.options[:class]).to eq 'blacklight-icons blacklight-icon-search awesome'
60
+ expect(subject.options[:class]).to eq 'blacklight-icons blacklight-icon-test awesome'
48
61
  end
49
62
 
50
63
  it 'applies options aria-hidden=true' do
@@ -59,30 +72,33 @@ RSpec.describe Blacklight::Icon do
59
72
  end
60
73
 
61
74
  it 'has no aria-hidden attribute with no options' do
62
- expect(subject.options[:'aria-hidden']).to be nil
75
+ expect(subject.options[:'aria-hidden']).to be_nil
63
76
  end
64
77
  end
65
78
  end
66
79
 
67
80
  describe '#path' do
68
81
  it 'prepends blacklight and sufixes .svg' do
69
- expect(subject.path).to eq 'blacklight/search.svg'
82
+ expect(subject.path).to eq 'blacklight/test.svg'
70
83
  end
71
84
  end
72
85
 
73
86
  describe 'file_source' do
87
+ subject(:file_source) { instance.file_source }
88
+
74
89
  context 'file is not available' do
75
90
  subject { described_class.new(:yolo) }
76
91
 
77
- it {
78
- expect { subject.file_source }
79
- .to raise_error(Blacklight::Exceptions::IconNotFound)
80
- }
92
+ let(:asset) { nil }
93
+
94
+ it 'raises an error when not found' do
95
+ expect { file_source }.to raise_error(Blacklight::Exceptions::IconNotFound)
96
+ end
81
97
  end
82
98
 
83
99
  context 'file is available' do
84
100
  it 'returns the filesource' do
85
- expect(subject.file_source).to include '<svg'
101
+ expect(file_source).to include '<svg'
86
102
  end
87
103
  end
88
104
  end
@@ -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
@@ -73,24 +73,6 @@ RSpec.describe Blacklight::Solr::Repository, api: true do
73
73
  end
74
74
  end
75
75
 
76
- describe '#find_many' do
77
- context 'with a configured fetch_many_documents_path' do
78
- it 'uses the path' do
79
- blacklight_config.fetch_many_documents_path = 'documents'
80
- allow(subject.connection).to receive(:send_and_receive).with('documents', anything).and_return(mock_response)
81
- expect(subject.find_many({})).to be_a Blacklight::Solr::Response
82
- end
83
- end
84
-
85
- context 'without a configured fetch_many_documents_path' do
86
- it 'falls back to the search path' do
87
- blacklight_config.solr_path = 'xyz'
88
- allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
89
- expect(subject.find_many({})).to be_a Blacklight::Solr::Response
90
- end
91
- end
92
- end
93
-
94
76
  describe "#search" do
95
77
  it "uses the search-specific solr path" do
96
78
  blacklight_config.solr_path = 'xyz'
@@ -171,33 +153,6 @@ RSpec.describe Blacklight::Solr::Repository, api: true do
171
153
  expect(JSON.parse(actual_params[:data]).with_indifferent_access).to include(query: { bool: {} })
172
154
  expect(actual_params[:headers]).to include({ 'Content-Type' => 'application/json' })
173
155
  end
174
-
175
- context "without a json solr path configured" do
176
- before do
177
- blacklight_config.json_solr_path = nil
178
- end
179
-
180
- it "uses the default solr path" do
181
- blacklight_config.solr_path = 'xyz'
182
- allow(subject.connection).to receive(:send_and_receive) do |path|
183
- expect(path).to eq 'xyz'
184
- end
185
- subject.search(input_params)
186
- end
187
- end
188
-
189
- context "with a json solr path configured" do
190
- before do
191
- blacklight_config.json_solr_path = 'my-great-json'
192
- end
193
-
194
- it "uses the configured json_solr_path" do
195
- allow(subject.connection).to receive(:send_and_receive) do |path|
196
- expect(path).to eq 'my-great-json'
197
- end
198
- subject.search(input_params)
199
- end
200
- end
201
156
  end
202
157
  end
203
158
 
@@ -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