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
@@ -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
@@ -224,7 +224,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
224
224
  expect(subject["spellcheck.q"]).to be_blank
225
225
 
226
226
  single_facet.each_value do |value|
227
- Array(value).each do |v|
227
+ value.each do |v|
228
228
  expect(subject[:fq]).to include("{!term f=#{single_facet.keys[0]}}#{v}")
229
229
  end
230
230
  end
@@ -335,7 +335,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
335
335
  qf: '$subject_qf',
336
336
  pf: '$subject_pf'
337
337
  }
338
- blacklight_config.search_fields['subject'].clause_params = nil
339
338
  end
340
339
 
341
340
  it "looks up qt from field definition" do
@@ -364,29 +363,17 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
364
363
  end
365
364
 
366
365
  it "includes spellcheck.dictionary from field def solr_parameters" do
367
- expect(subject[:"spellcheck.dictionary"]).to eq "subject"
366
+ expect(subject[:'spellcheck.dictionary']).to eq "subject"
368
367
  end
369
368
 
370
369
  it "adds on :solr_local_parameters using Solr LocalParams style" do
371
370
  # q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
372
371
  # the LocalParams are really there
373
372
  subject[:q] =~ /^\{!([^}]+)\}/
374
- key_value_pairs = Regexp.last_match(1).split(" ")
373
+ key_value_pairs = Regexp.last_match(1).split
375
374
  expect(key_value_pairs).to include("pf=$subject_pf")
376
375
  expect(key_value_pairs).to include("qf=$subject_qf")
377
376
  end
378
-
379
- context 'when subject field uses JSON query DSL' do
380
- before do
381
- blacklight_config.search_fields['subject'].clause_params = {
382
- edismax: {}
383
- }
384
- end
385
-
386
- it "includes spellcheck.q, without LocalParams" do
387
- expect(subject["spellcheck.q"]).to eq "wome"
388
- end
389
- end
390
377
  end
391
378
 
392
379
  describe "solr json query parameters from the fielded search" do
@@ -419,24 +406,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
419
406
  it 'includes addtional clause parameters for the field' do
420
407
  expect(subject.dig(:json, :query, :bool, :must, 0, :edismax)).to include another: :parameter
421
408
  end
422
-
423
- context 'with an empty search' do
424
- let(:subject_search_params) { { commit: "search", search_field: "subject", action: "index", controller: "catalog", rows: "10", q: nil } }
425
-
426
- it 'does not add nil query value clauses to json query' do
427
- expect(subject).not_to have_key :json
428
- end
429
- end
430
- end
431
-
432
- describe "overriding of qt parameter" do
433
- let(:user_params) do
434
- { qt: 'overridden' }
435
- end
436
-
437
- it "returns the correct overriden parameter" do
438
- expect(subject[:qt]).to eq "overridden"
439
- end
440
409
  end
441
410
 
442
411
  describe "sorting" do
@@ -521,7 +490,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
521
490
  describe 'the search field query_builder config' do
522
491
  let(:blacklight_config) do
523
492
  Blacklight::Configuration.new do |config|
524
- 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' }] })
525
494
  end
526
495
  end
527
496
 
@@ -613,6 +582,17 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
613
582
 
614
583
  expect(solr_parameters[:fq]).to be_a_kind_of Array
615
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
616
596
  end
617
597
 
618
598
  describe "#add_solr_fields_to_query" do
@@ -764,7 +744,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
764
744
  end
765
745
 
766
746
  it 'sets facets requested to facet_field argument' do
767
- expect(solr_parameters["facet.field".to_sym]).to eq facet_field
747
+ expect(solr_parameters[:'facet.field']).to eq facet_field
768
748
  end
769
749
 
770
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
@@ -37,9 +37,7 @@ RSpec.describe SolrDocument, api: true do
37
37
  title_tesim: ['Good Omens'])
38
38
  end
39
39
 
40
- it 'ends with the expected information' do
41
- expect(inspect).to match(/_source: {"id" ?=> ?"123", "title_tesim" ?=> ?\["Good Omens"\]\}>$/)
42
- end
40
+ it { is_expected.to end_with "_source: {\"id\"=>\"123\", \"title_tesim\"=>[\"Good Omens\"]}>" }
43
41
  end
44
42
 
45
43
  describe '.attribute' do
@@ -51,7 +49,6 @@ RSpec.describe SolrDocument, api: true do
51
49
  attribute :author, :array, 'author_tesim', of: :string
52
50
  attribute :first_author, :select, 'author_tesim', by: :min
53
51
  attribute :date, :date, field: 'date_dtsi'
54
- attribute :time, :time, field: 'date_dtsi'
55
52
  attribute :whatever, :string, default: ->(*) { 'default_value' }
56
53
  end
57
54
  end
@@ -59,17 +56,14 @@ RSpec.describe SolrDocument, api: true do
59
56
  doc_class.new(id: '123',
60
57
  title_tesim: ['Good Omens'],
61
58
  author_tesim: ['Neil Gaiman', 'Terry Pratchett'],
62
- date_dtsi: '1990-01-01T17:23:13Z')
59
+ date_dtsi: '1990-01-01T00:00:00Z')
63
60
  end
64
61
 
65
62
  it "casts the attributes" do
66
63
  expect(document.title).to eq 'Good Omens'
67
64
  expect(document.author).to eq ['Neil Gaiman', 'Terry Pratchett']
68
65
  expect(document.first_author).to eq 'Neil Gaiman'
69
- expect(document.date).to be_a Date
70
- expect(document.date.to_s).to eq '1990-01-01'
71
- expect(document.time).to be_a Time
72
- expect(document.time.to_s).to eq '1990-01-01 17:23:13 UTC'
66
+ expect(document.date).to eq Date.new(1990)
73
67
  expect(document.whatever).to eq 'default_value'
74
68
  end
75
69
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe Blacklight::ClausePresenter, type: :presenter do
@@ -12,13 +12,12 @@ RSpec.describe Blacklight::DocumentPresenter do
12
12
 
13
13
  before do
14
14
  allow(request_context).to receive(:search_state).and_return(search_state)
15
- allow(request_context).to receive(:action_name).and_return(:show)
16
15
  end
17
16
 
18
17
  describe '#fields_to_render' do
19
18
  subject { presenter.fields_to_render.to_a }
20
19
 
21
- let(:field_config) { Blacklight::Configuration::Field.new(field: 'asdf') }
20
+ let(:field_config) { Blacklight::Configuration::DisplayField.new(field: 'asdf') }
22
21
 
23
22
  context 'when all of the fields have values' do
24
23
  before do
@@ -31,7 +30,7 @@ RSpec.describe Blacklight::DocumentPresenter do
31
30
 
32
31
  describe '#field_value' do
33
32
  let(:field_presenter) { instance_double(Blacklight::FieldPresenter, render: 'xyz') }
34
- let(:field_config) { Blacklight::Configuration::Field.new }
33
+ let(:field_config) { Blacklight::Configuration::DisplayField.new }
35
34
  let(:options) { { a: 1 } }
36
35
 
37
36
  it 'calls the field presenter' do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
@@ -44,11 +45,11 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
44
45
  describe '#active?' do
45
46
  it "checks if any value is selected for a given facet" do
46
47
  search_state.params[:f] = ActiveSupport::HashWithIndifferentAccess.new(key: [1])
47
- expect(presenter.active?).to eq true
48
+ expect(presenter.active?).to be true
48
49
  end
49
50
 
50
51
  it "is false if no value for facet is selected" do
51
- expect(presenter.active?).to eq false
52
+ expect(presenter.active?).to be false
52
53
  end
53
54
  end
54
55
 
@@ -59,12 +60,12 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
59
60
  end
60
61
 
61
62
  it 'is true' do
62
- expect(presenter.in_modal?).to eq true
63
+ expect(presenter.in_modal?).to be true
63
64
  end
64
65
  end
65
66
 
66
67
  it 'is false' do
67
- expect(presenter.in_modal?).to eq false
68
+ expect(presenter.in_modal?).to be false
68
69
  end
69
70
  end
70
71
 
@@ -72,7 +73,9 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
72
73
  let(:paginator) { Blacklight::FacetPaginator.new([{}, {}], limit: 1) }
73
74
 
74
75
  before do
75
- allow(view_context).to receive(:facet_paginator).and_return(paginator)
76
+ # rubocop:disable RSpec/SubjectStub
77
+ allow(presenter).to receive(:paginator).and_return(paginator)
78
+ # rubocop:enable RSpec/SubjectStub
76
79
  end
77
80
 
78
81
  context 'with no additional data' do
@@ -97,13 +100,6 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
97
100
  end
98
101
  end
99
102
 
100
- describe '#html_id' do
101
- it 'gets the id from a helper' do
102
- allow(view_context).to receive(:html_id).with('key').and_return('facet-key')
103
- expect(presenter.html_id).to eq 'facet-key'
104
- end
105
- end
106
-
107
103
  describe '#paginator' do
108
104
  subject(:paginator) { presenter.paginator }
109
105
 
@@ -112,4 +108,81 @@ RSpec.describe Blacklight::FacetFieldPresenter, type: :presenter do
112
108
  expect(paginator.total_count).to eq 0
113
109
  end
114
110
  end
111
+
112
+ describe "#facet_limit" do
113
+ subject(:facet_limit) { presenter.facet_limit }
114
+
115
+ let(:search_state) { Blacklight::SearchState.new({}, blacklight_config, controller) }
116
+ let(:blacklight_config) { CatalogController.blacklight_config }
117
+ let(:facet_field) { blacklight_config.facet_fields['subject_ssim'] }
118
+ let(:display_facet) do
119
+ instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, limit: nil, sort: :index, offset: 0, prefix: nil)
120
+ end
121
+ # let(:facet_field) { Blacklight::Configuration::FacetField.new(key: 'key') }
122
+ # let(:display_facet) do
123
+ # instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, sort: :index, offset: 0, prefix: nil)
124
+ # end
125
+
126
+ it "returns specified value for facet_field specified" do
127
+ expect(facet_limit).to eq facet_field.limit
128
+ end
129
+
130
+ describe "for 'true' configured values" do
131
+ let(:blacklight_config) do
132
+ Blacklight::Configuration.new do |config|
133
+ config.add_facet_field "language_facet", limit: true
134
+ end
135
+ end
136
+ let(:facet_field) { blacklight_config.facet_fields['language_facet'] }
137
+
138
+ context 'when the limit in the response is nil' do
139
+ let(:display_facet) do
140
+ instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, limit: nil, sort: :index, offset: 0, prefix: nil)
141
+ end
142
+
143
+ it "uses the config setting" do
144
+ blacklight_config.facet_fields['language_facet'].limit = 10
145
+ expect(facet_limit).to eq 10
146
+ end
147
+ end
148
+
149
+ context 'when the limit in the response is provided' do
150
+ let(:display_facet) do
151
+ instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, limit: 16, sort: :index, offset: 0, prefix: nil)
152
+ end
153
+
154
+ it "gets the limit from the facet field in @response" do
155
+ expect(facet_limit).to eq 15
156
+ end
157
+ end
158
+
159
+ context 'when not in the display_facet' do
160
+ let(:display_facet) { nil }
161
+
162
+ it "defaults to 10" do
163
+ expect(facet_limit).to eq 10
164
+ end
165
+ end
166
+ end
167
+
168
+ context 'for facet fields with a key that is different from the field name' do
169
+ before do
170
+ allow(controller).to receive(:blacklight_config).and_return(blacklight_config)
171
+ end
172
+
173
+ let(:blacklight_config) do
174
+ Blacklight::Configuration.new do |config|
175
+ config.add_facet_field 'some_key', field: 'x', limit: true
176
+ end
177
+ end
178
+ let(:facet_field) { blacklight_config.facet_fields['some_key'] }
179
+ let(:display_facet) do
180
+ instance_double(Blacklight::Solr::Response::Facets::FacetField, items: items, limit: 16, sort: :index, offset: 0, prefix: nil)
181
+ end
182
+
183
+ it 'gets the limit from the facet field in the @response' do
184
+ expect(facet_limit).to eq 15
185
+ end
186
+ end
187
+ end
115
188
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe Blacklight::FacetGroupedItemPresenter, type: :presenter do
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe Blacklight::FacetItemPresenter, type: :presenter do
@@ -7,22 +8,22 @@ RSpec.describe Blacklight::FacetItemPresenter, type: :presenter do
7
8
  end
8
9
 
9
10
  let(:facet_item) { instance_double(Blacklight::Solr::Response::Facets::FacetItem) }
11
+ let(:filter_field) { instance_double(Blacklight::SearchState::FilterField, include?: true) }
10
12
  let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'key') }
11
13
  let(:facet_field) { instance_double(Blacklight::Solr::Response::Facets::FacetField) }
12
14
  let(:view_context) { controller.view_context }
13
- let(:search_state) { instance_double(Blacklight::SearchState) }
15
+ let(:search_state) { instance_double(Blacklight::SearchState, filter: filter_field) }
14
16
 
15
17
  describe '#selected?' do
16
- it 'works' do
17
- allow(search_state).to receive(:has_facet?).and_return(true)
18
- expect(presenter.selected?).to be true
19
- end
18
+ subject { presenter.selected? }
19
+
20
+ it { is_expected.to be true }
20
21
  end
21
22
 
22
23
  describe '#label' do
23
- it "is the facet value for an ordinary facet" do
24
+ it "is the stringified facet value for an ordinary facet" do
24
25
  allow(facet_config).to receive_messages(query: nil, date: nil, helper_method: nil, url_method: nil)
25
- expect(presenter.label).to eq facet_item
26
+ expect(presenter.label).to eq facet_item.to_s
26
27
  end
27
28
 
28
29
  it "allows you to pass in a :helper_method argument to the configuration" do
@@ -63,9 +64,7 @@ RSpec.describe Blacklight::FacetItemPresenter, type: :presenter do
63
64
  end
64
65
 
65
66
  describe '#href' do
66
- before do
67
- allow(search_state).to receive(:has_facet?).and_return(false)
68
- end
67
+ let(:filter_field) { instance_double(Blacklight::SearchState::FilterField, include?: false) }
69
68
 
70
69
  it 'is the url to apply the facet' do
71
70
  allow(search_state).to receive(:add_facet_params_and_redirect).with('key', facet_item).and_return(f: 'x')
@@ -87,11 +86,13 @@ RSpec.describe Blacklight::FacetItemPresenter, type: :presenter do
87
86
  end
88
87
 
89
88
  context 'with a selected facet' do
90
- it 'is the url to remove the facet' do
91
- allow(search_state).to receive(:has_facet?).and_return(true)
92
- allow(search_state).to receive(:remove_facet_params).with('key', facet_item).and_return({})
89
+ let(:filter_field) { instance_double(Blacklight::SearchState::FilterField, include?: true, remove: {}) }
90
+
91
+ before do
93
92
  allow(view_context).to receive(:search_action_path).with({}).and_return('/catalog')
93
+ end
94
94
 
95
+ it 'is the url to remove the facet' do
95
96
  expect(presenter.href).to eq '/catalog'
96
97
  end
97
98
  end
@@ -36,7 +36,6 @@ RSpec.describe Blacklight::FieldPresenter, api: true do
36
36
  config.add_index_field 'solr_doc_accessor', accessor: true
37
37
  config.add_index_field 'explicit_accessor', accessor: :solr_doc_accessor
38
38
  config.add_index_field 'explicit_array_accessor', accessor: [:solr_doc_accessor, :some_method]
39
- config.add_index_field 'explicit_values', values: ->(_config, _doc) { ['some-value'] }
40
39
  config.add_index_field 'explicit_values_with_context', values: ->(_config, _doc, view_context) { [view_context.params[:x]] }
41
40
  config.add_index_field 'alias', field: 'qwer'
42
41
  config.add_index_field 'with_default', default: 'value'
@@ -162,15 +161,6 @@ RSpec.describe Blacklight::FieldPresenter, api: true do
162
161
  end
163
162
  end
164
163
 
165
- context 'when the values lambda is provided' do
166
- let(:field_name) { 'explicit_values' }
167
-
168
- it 'calls the accessors on the return of the preceeding' do
169
- allow(Deprecation).to receive(:warn)
170
- expect(subject).to eq 'some-value'
171
- end
172
- end
173
-
174
164
  context 'when the values lambda is provided and accepts the view contexts' do
175
165
  let(:field_name) { 'explicit_values_with_context' }
176
166
 
@@ -241,10 +231,6 @@ RSpec.describe Blacklight::FieldPresenter, api: true do
241
231
 
242
232
  let(:field_config) { double('field config', if: true, unless: false, except_operations: nil) }
243
233
 
244
- before do
245
- allow(presenter).to receive_messages(document_has_value?: true)
246
- end
247
-
248
234
  it { is_expected.to be true }
249
235
 
250
236
  context 'when the view context says not to render the field' do
@@ -22,18 +22,15 @@ RSpec.describe Blacklight::IndexPresenter, api: true do
22
22
 
23
23
  before do
24
24
  allow(request_context).to receive(:search_state).and_return(search_state)
25
- allow(request_context).to receive(:action_name).and_return(:index)
26
25
  end
27
26
 
28
27
  describe '#fields' do
29
- let(:field) { instance_double(Blacklight::Configuration::Field) }
30
-
31
28
  before do
32
- allow(config).to receive(:index_fields_for).and_return(title: field)
29
+ config.add_index_field 'title'
33
30
  end
34
31
 
35
32
  it 'returns the list from the configs' do
36
- expect(subject.send(:fields)).to eq(title: field)
33
+ expect(subject.send(:fields).keys).to eq ['title']
37
34
  end
38
35
  end
39
36
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe Blacklight::JsonPresenter, 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::LinkAlternatePresenter do
@@ -25,8 +26,8 @@ RSpec.describe Blacklight::LinkAlternatePresenter do
25
26
 
26
27
  let(:expected_html) do
27
28
  '<link rel="alternate" title="xml" type="application/xml" href="http://test.host/catalog/9999.xml" />' \
28
- '<link rel="alternate" title="dc_xml" type="text/xml" href="http://test.host/catalog/9999.dc_xml" />' \
29
- '<link rel="alternate" title="oai_dc_xml" type="text/xml" href="http://test.host/catalog/9999.oai_dc_xml" />'
29
+ '<link rel="alternate" title="dc_xml" type="text/xml" href="http://test.host/catalog/9999.dc_xml" />' \
30
+ '<link rel="alternate" title="oai_dc_xml" type="text/xml" href="http://test.host/catalog/9999.oai_dc_xml" />'
30
31
  end
31
32
 
32
33
  it { is_expected.to be_equivalent_to expected_html }