blacklight 7.33.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -2
  3. data/.github/workflows/ruby.yml +38 -107
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +243 -2
  6. data/.rubocop_todo.yml +216 -270
  7. data/Gemfile +7 -6
  8. data/README.md +12 -4
  9. data/Rakefile +18 -0
  10. data/VERSION +1 -1
  11. data/app/assets/config/blacklight/manifest.js +3 -0
  12. data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
  13. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +332 -485
  15. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  16. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  20. data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
  21. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  22. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  23. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  24. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  25. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  26. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  27. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  28. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  29. data/app/builders/blacklight/action_builder.rb +18 -9
  30. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  31. data/app/components/blacklight/advanced_search_form_component.rb +7 -9
  32. data/app/components/blacklight/constraints_component.rb +27 -37
  33. data/app/components/blacklight/document/action_component.html.erb +2 -9
  34. data/app/components/blacklight/document/action_component.rb +26 -8
  35. data/app/components/blacklight/document/actions_component.rb +2 -2
  36. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  37. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  38. data/app/components/blacklight/document/citation_component.rb +5 -3
  39. data/app/components/blacklight/document/group_component.rb +7 -3
  40. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  41. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  42. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  43. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  44. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  45. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  46. data/app/components/blacklight/document_component.html.erb +4 -0
  47. data/app/components/blacklight/document_component.rb +54 -42
  48. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  49. data/app/components/blacklight/document_metadata_component.rb +11 -6
  50. data/app/components/blacklight/document_title_component.rb +4 -1
  51. data/app/components/blacklight/facet_component.rb +1 -1
  52. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
  53. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  54. data/app/components/blacklight/facet_field_component.html.erb +5 -5
  55. data/app/components/blacklight/facet_field_component.rb +9 -2
  56. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  57. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  58. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  59. data/app/components/blacklight/facet_item_component.rb +1 -43
  60. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  61. data/app/components/blacklight/header_component.html.erb +2 -0
  62. data/app/components/blacklight/header_component.rb +26 -0
  63. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  64. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  65. data/app/components/blacklight/icons/list_component.rb +16 -0
  66. data/app/components/blacklight/icons/search_component.rb +16 -0
  67. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  68. data/app/components/blacklight/metadata_field_component.rb +24 -8
  69. data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
  70. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  71. data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
  72. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  73. data/app/components/blacklight/response/sort_component.rb +2 -2
  74. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  75. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  76. data/app/components/blacklight/response/view_type_component.rb +4 -6
  77. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  78. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  79. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  80. data/app/components/blacklight/search_bar_component.rb +2 -16
  81. data/app/components/blacklight/search_button_component.rb +3 -3
  82. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  83. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  84. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  85. data/app/components/blacklight/search_header_component.html.erb +2 -0
  86. data/app/components/blacklight/search_header_component.rb +6 -0
  87. data/app/components/blacklight/search_navbar_component.html.erb +5 -0
  88. data/app/components/blacklight/search_navbar_component.rb +34 -0
  89. data/app/components/blacklight/start_over_button_component.rb +5 -3
  90. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  91. data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
  92. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  93. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  94. data/app/components/blacklight/system/modal_component.rb +1 -3
  95. data/app/components/blacklight/top_navbar_component.html.erb +12 -0
  96. data/app/components/blacklight/top_navbar_component.rb +17 -0
  97. data/app/controllers/bookmarks_controller.rb +1 -0
  98. data/app/controllers/catalog_controller.rb +1 -0
  99. data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
  100. data/app/controllers/concerns/blacklight/catalog.rb +21 -72
  101. data/app/controllers/concerns/blacklight/controller.rb +6 -43
  102. data/app/controllers/concerns/blacklight/search_context.rb +71 -13
  103. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  104. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  105. data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
  106. data/app/controllers/search_history_controller.rb +1 -0
  107. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
  108. data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
  109. data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
  110. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
  111. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  112. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  113. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
  114. data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
  115. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
  116. data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
  117. data/app/helpers/blacklight_helper.rb +1 -0
  118. data/app/helpers/catalog_helper.rb +1 -0
  119. data/app/javascript/blacklight/bookmark_toggle.js +9 -22
  120. data/app/javascript/blacklight/button_focus.js +9 -7
  121. data/app/javascript/blacklight/checkbox_submit.js +68 -122
  122. data/app/javascript/blacklight/core.js +6 -5
  123. data/app/javascript/blacklight/index.js +14 -0
  124. data/app/javascript/blacklight/modal.js +100 -165
  125. data/app/javascript/blacklight/modalForm.js +60 -0
  126. data/app/javascript/blacklight/search_context.js +13 -29
  127. data/app/models/blacklight/facet_paginator.rb +3 -2
  128. data/app/models/blacklight/icon.rb +4 -2
  129. data/app/models/bookmark.rb +0 -2
  130. data/app/models/concerns/blacklight/configurable.rb +5 -4
  131. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
  132. data/app/models/concerns/blacklight/document/attributes.rb +50 -0
  133. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  134. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  135. data/app/models/concerns/blacklight/document/export.rb +2 -1
  136. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  137. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  138. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
  139. data/app/models/concerns/blacklight/document.rb +23 -20
  140. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  141. data/app/models/concerns/blacklight/user.rb +17 -8
  142. data/app/models/record_mailer.rb +23 -18
  143. data/app/models/search.rb +0 -1
  144. data/app/models/solr_document.rb +1 -0
  145. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  146. data/app/presenters/blacklight/document_presenter.rb +24 -30
  147. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  148. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  149. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  150. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  151. data/app/presenters/blacklight/field_presenter.rb +1 -0
  152. data/app/presenters/blacklight/index_presenter.rb +2 -40
  153. data/app/presenters/blacklight/json_presenter.rb +7 -5
  154. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  155. data/app/presenters/blacklight/rendering/join.rb +7 -1
  156. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
  157. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  158. data/app/presenters/blacklight/show_presenter.rb +1 -9
  159. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  160. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  161. data/app/services/blacklight/field_retriever.rb +1 -8
  162. data/app/services/blacklight/search_service.rb +9 -7
  163. data/app/values/blacklight/types.rb +95 -11
  164. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  165. data/app/views/bookmarks/_tools.html.erb +7 -12
  166. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  167. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  168. data/app/views/catalog/_constraints.html.erb +1 -14
  169. data/app/views/catalog/_document.atom.builder +12 -14
  170. data/app/views/catalog/_document.html.erb +3 -6
  171. data/app/views/catalog/_document.rss.builder +2 -4
  172. data/app/views/catalog/_document_list.html.erb +2 -1
  173. data/app/views/catalog/_facet_layout.html.erb +2 -2
  174. data/app/views/catalog/_facets.html.erb +5 -4
  175. data/app/views/catalog/_home_text.html.erb +2 -14
  176. data/app/views/catalog/_search_form.html.erb +3 -3
  177. data/app/views/catalog/_search_header.html.erb +1 -2
  178. data/app/views/catalog/_search_results.html.erb +2 -2
  179. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  180. data/app/views/catalog/_show_main_content.html.erb +8 -19
  181. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  182. data/app/views/catalog/_show_tools.html.erb +1 -19
  183. data/app/views/catalog/_view_type_group.html.erb +1 -1
  184. data/app/views/catalog/email_success.html.erb +5 -6
  185. data/app/views/catalog/facet.html.erb +7 -5
  186. data/app/views/catalog/index.atom.builder +12 -14
  187. data/app/views/catalog/index.html.erb +7 -1
  188. data/app/views/catalog/index.json.jbuilder +19 -19
  189. data/app/views/catalog/index.rss.builder +1 -1
  190. data/app/views/catalog/opensearch.xml.builder +1 -1
  191. data/app/views/catalog/show.html.erb +1 -6
  192. data/app/views/catalog/sms_success.html.erb +5 -6
  193. data/app/views/catalog/suggest.html.erb +3 -0
  194. data/app/views/layouts/blacklight/base.html.erb +19 -9
  195. data/app/views/record_mailer/email_record.text.erb +4 -3
  196. data/app/views/record_mailer/sms_record.text.erb +4 -4
  197. data/app/views/search_history/index.html.erb +6 -2
  198. data/app/views/shared/_header_navbar.html.erb +1 -22
  199. data/app/views/shared/_modal.html.erb +3 -3
  200. data/blacklight.gemspec +8 -10
  201. data/config/importmap.rb +3 -0
  202. data/config/locales/blacklight.ar.yml +209 -233
  203. data/config/locales/blacklight.ca.yml +0 -7
  204. data/config/locales/blacklight.de.yml +197 -216
  205. data/config/locales/blacklight.en.yml +2 -7
  206. data/config/locales/blacklight.es.yml +196 -216
  207. data/config/locales/blacklight.fr.yml +196 -220
  208. data/config/locales/blacklight.hu.yml +193 -213
  209. data/config/locales/blacklight.it.yml +197 -216
  210. data/config/locales/blacklight.nl.yml +193 -213
  211. data/config/locales/blacklight.pt-BR.yml +195 -216
  212. data/config/locales/blacklight.sq.yml +193 -213
  213. data/config/locales/blacklight.zh.yml +194 -214
  214. data/config/routes.rb +3 -2
  215. data/db/migrate/20140202020201_create_searches.rb +1 -0
  216. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  217. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  218. data/docker-compose.yml +1 -0
  219. data/lib/blacklight/abstract_repository.rb +1 -0
  220. data/lib/blacklight/configuration/context.rb +4 -4
  221. data/lib/blacklight/configuration/display_field.rb +7 -9
  222. data/lib/blacklight/configuration/facet_field.rb +17 -11
  223. data/lib/blacklight/configuration/field.rb +1 -0
  224. data/lib/blacklight/configuration/fields.rb +12 -15
  225. data/lib/blacklight/configuration/index_field.rb +1 -0
  226. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  227. data/lib/blacklight/configuration/search_field.rb +1 -0
  228. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  229. data/lib/blacklight/configuration/show_field.rb +1 -0
  230. data/lib/blacklight/configuration/sort_field.rb +1 -0
  231. data/lib/blacklight/configuration/tool_config.rb +1 -0
  232. data/lib/blacklight/configuration/view_config.rb +16 -10
  233. data/lib/blacklight/configuration.rb +322 -341
  234. data/lib/blacklight/engine.rb +13 -15
  235. data/lib/blacklight/exceptions.rb +2 -2
  236. data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
  237. data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
  238. data/lib/blacklight/parameters.rb +7 -21
  239. data/lib/blacklight/routes/exportable.rb +1 -0
  240. data/lib/blacklight/routes/searchable.rb +3 -1
  241. data/lib/blacklight/routes.rb +1 -0
  242. data/lib/blacklight/search_builder.rb +10 -10
  243. data/lib/blacklight/search_state/filter_field.rb +8 -25
  244. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  245. data/lib/blacklight/search_state.rb +23 -79
  246. data/lib/blacklight/solr/document.rb +1 -0
  247. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  248. data/lib/blacklight/solr/repository.rb +1 -0
  249. data/lib/blacklight/solr/request.rb +3 -0
  250. data/lib/blacklight/solr/response/facets.rb +21 -5
  251. data/lib/blacklight/solr/response/group.rb +1 -0
  252. data/lib/blacklight/solr/response/group_response.rb +1 -0
  253. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  254. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  255. data/lib/blacklight/solr/response/params.rb +5 -4
  256. data/lib/blacklight/solr/response/response.rb +1 -0
  257. data/lib/blacklight/solr/response/spelling.rb +1 -0
  258. data/lib/blacklight/solr/response.rb +4 -3
  259. data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
  260. data/lib/blacklight/solr.rb +1 -0
  261. data/lib/blacklight/version.rb +1 -0
  262. data/lib/blacklight.rb +8 -11
  263. data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
  264. data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
  265. data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
  266. data/lib/generators/blacklight/assets_generator.rb +14 -88
  267. data/lib/generators/blacklight/controller_generator.rb +3 -2
  268. data/lib/generators/blacklight/document_generator.rb +1 -0
  269. data/lib/generators/blacklight/install_generator.rb +7 -4
  270. data/lib/generators/blacklight/models_generator.rb +1 -0
  271. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  272. data/lib/generators/blacklight/solr_generator.rb +1 -1
  273. data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
  274. data/lib/generators/blacklight/templates/solr_document.rb +1 -7
  275. data/lib/generators/blacklight/test_support_generator.rb +4 -2
  276. data/lib/generators/blacklight/user_generator.rb +7 -9
  277. data/lib/railties/blacklight.rake +2 -3
  278. data/package.json +10 -10
  279. data/rollup.config.js +37 -0
  280. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  281. data/spec/components/blacklight/document_component_spec.rb +74 -33
  282. data/spec/components/blacklight/facet_component_spec.rb +2 -7
  283. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  284. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  285. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
  286. data/spec/components/blacklight/header_component_spec.rb +20 -0
  287. data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
  288. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  289. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  290. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
  291. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  292. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  293. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  294. data/spec/controllers/catalog_controller_spec.rb +24 -126
  295. data/spec/features/autocomplete_spec.rb +1 -1
  296. data/spec/features/axe_spec.rb +1 -1
  297. data/spec/features/bookmarks_spec.rb +1 -1
  298. data/spec/features/component_template_override_spec.rb +8 -0
  299. data/spec/features/facets_spec.rb +1 -1
  300. data/spec/features/modal_spec.rb +12 -0
  301. data/spec/features/search_context_spec.rb +4 -10
  302. data/spec/features/search_results_spec.rb +0 -33
  303. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  304. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  305. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  306. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  307. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  308. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
  309. data/spec/helpers/blacklight_helper_spec.rb +3 -298
  310. data/spec/helpers/catalog_helper_spec.rb +60 -115
  311. data/spec/i18n_spec.rb +1 -0
  312. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  313. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  314. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  315. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  316. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  317. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
  318. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  319. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  320. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  321. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  322. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  323. data/spec/models/blacklight/configuration_spec.rb +41 -53
  324. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  325. data/spec/models/blacklight/icon_spec.rb +29 -15
  326. data/spec/models/blacklight/search_builder_spec.rb +12 -12
  327. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  328. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  329. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  330. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  331. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  332. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  333. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
  334. data/spec/models/blacklight/user_spec.rb +22 -0
  335. data/spec/models/record_mailer_spec.rb +36 -23
  336. data/spec/models/solr_document_spec.rb +21 -3
  337. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  338. data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
  339. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  340. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  341. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  342. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
  343. data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
  344. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  345. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  346. data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
  347. data/spec/presenters/pipeline_spec.rb +13 -2
  348. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  349. data/spec/requests/load_suggestions_spec.rb +16 -0
  350. data/spec/routing/catalog_routing_spec.rb +6 -1
  351. data/spec/services/blacklight/search_service_spec.rb +31 -68
  352. data/spec/spec_helper.rb +4 -3
  353. data/spec/support/controller_level_helpers.rb +1 -2
  354. data/spec/support/features/search_helpers.rb +39 -0
  355. data/spec/support/features/session_helpers.rb +1 -0
  356. data/spec/support/features.rb +3 -0
  357. data/spec/support/view_component_test_helpers.rb +21 -0
  358. data/spec/test_app_templates/Gemfile.extra +4 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
  360. data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
  361. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  362. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  363. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
  366. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  367. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  368. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  369. data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
  370. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  371. data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
  372. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  373. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  374. data/tasks/blacklight.rake +7 -5
  375. metadata +95 -123
  376. data/.babelrc +0 -11
  377. data/app/assets/images/blacklight/list.svg +0 -1
  378. data/app/assets/images/blacklight/search.svg +0 -1
  379. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  380. data/app/components/blacklight/content_areas_shim.rb +0 -13
  381. data/app/components/blacklight/search_context_component.rb +0 -34
  382. data/app/controllers/concerns/blacklight/base.rb +0 -7
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/models/concerns/blacklight/document/email.rb +0 -26
  393. data/app/models/concerns/blacklight/document/sms.rb +0 -24
  394. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  395. data/app/views/catalog/_constraints_element.html.erb +0 -14
  396. data/app/views/catalog/_document_action.html.erb +0 -5
  397. data/app/views/catalog/_facet_group.html.erb +0 -5
  398. data/app/views/catalog/_facet_limit.html.erb +0 -3
  399. data/app/views/catalog/_index.html.erb +0 -1
  400. data/app/views/catalog/_index_header.html.erb +0 -22
  401. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  402. data/app/views/catalog/_show.html.erb +0 -6
  403. data/app/views/catalog/_show_header.html.erb +0 -2
  404. data/app/views/catalog/_thumbnail.html.erb +0 -1
  405. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  406. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  407. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  408. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  409. data/spec/features/sitelinks_search_box.rb +0 -13
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -108
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/models/blacklight/document/email_spec.rb +0 -57
  416. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  417. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  418. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  419. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  420. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  421. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  422. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  423. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  424. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  425. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  426. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
  427. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe Blacklight::DocumentComponent, type: :component do
6
- subject(:component) { described_class.new(document: document, presenter: view_context.document_presenter(document), **attr) }
6
+ subject(:component) { described_class.new(document: document, **attr) }
7
7
 
8
8
  let(:attr) { {} }
9
9
  let(:view_context) { controller.view_context }
@@ -15,7 +15,9 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
15
15
  Capybara::Node::Simple.new(render)
16
16
  end
17
17
 
18
- let(:document) do
18
+ let(:document) { view_context.document_presenter(presented_document) }
19
+
20
+ let(:presented_document) do
19
21
  SolrDocument.new(
20
22
  id: 'x',
21
23
  thumbnail_path_ss: 'http://example.com/image.jpg',
@@ -26,7 +28,7 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
26
28
 
27
29
  let(:blacklight_config) do
28
30
  CatalogController.blacklight_config.deep_copy.tap do |config|
29
- config.track_search_session = false
31
+ config.track_search_session.storage = false
30
32
  config.index.thumbnail_field = 'thumbnail_path_ss'
31
33
  config.index.document_actions[:bookmark].partial = '/catalog/bookmark_control'
32
34
  end
@@ -43,11 +45,11 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
43
45
  end
44
46
 
45
47
  it 'has some defined content areas' do
46
- component.with(:title, 'Title')
47
- component.with(:embed, 'Embed')
48
- component.with(:metadata, 'Metadata')
49
- component.with(:thumbnail, 'Thumbnail')
50
- component.with(:actions) { 'Actions' }
48
+ component.set_slot(:title) { 'Title' }
49
+ component.set_slot(:embed, nil, 'Embed')
50
+ component.set_slot(:metadata, nil, 'Metadata')
51
+ component.set_slot(:thumbnail, nil, 'Thumbnail')
52
+ component.set_slot(:actions) { 'Actions' }
51
53
 
52
54
  expect(rendered).to have_content 'Title'
53
55
  expect(rendered).to have_content 'Embed'
@@ -57,7 +59,7 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
57
59
  end
58
60
 
59
61
  it 'has schema.org properties' do
60
- component.with(:body, '-')
62
+ component.set_slot(:body) { '-' }
61
63
 
62
64
  expect(rendered).to have_selector 'article[@itemtype="http://schema.org/Thing"]'
63
65
  expect(rendered).to have_selector 'article[@itemscope]'
@@ -65,7 +67,7 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
65
67
 
66
68
  context 'with a provided body' do
67
69
  it 'opts-out of normal component content' do
68
- component.with(:body) { 'Body content' }
70
+ component.set_slot(:body) { 'Body content' }
69
71
 
70
72
  expect(rendered).to have_content 'Body content'
71
73
  expect(rendered).not_to have_selector 'header'
@@ -74,10 +76,14 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
74
76
  end
75
77
 
76
78
  context 'index view' do
79
+ before do
80
+ controller.action_name = "index"
81
+ end
82
+
77
83
  let(:attr) { { counter: 5 } }
78
84
 
79
85
  it 'has data properties' do
80
- component.with(:body, '-')
86
+ component.set_slot(:body) { '-' }
81
87
 
82
88
  expect(rendered).to have_selector 'article[@data-document-id="x"]'
83
89
  expect(rendered).to have_selector 'article[@data-document-counter="5"]'
@@ -92,9 +98,12 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
92
98
  end
93
99
 
94
100
  context 'with a document rendered as part of a collection' do
95
- let(:attr) { { document_counter: 10, counter_offset: 100 } }
101
+ # ViewComponent 3 changes iteration counters to begin at 0 rather than 1
102
+ let(:document_counter) { ViewComponent::VERSION::MAJOR < 3 ? 11 : 10 }
103
+ let(:attr) { { document_counter: document_counter, counter_offset: 100 } }
96
104
 
97
105
  it 'renders a counter with the title' do
106
+ # after ViewComponent 2.5, collection counter params are 1-indexed
98
107
  expect(rendered).to have_selector 'header', text: '111. Title'
99
108
  end
100
109
  end
@@ -106,17 +115,26 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
106
115
  it 'renders a thumbnail' do
107
116
  expect(rendered).to have_selector 'a[href="/catalog/x"] img[src="http://example.com/image.jpg"]'
108
117
  end
118
+
119
+ context 'with default metadata component' do
120
+ it 'renders metadata' do
121
+ expect(rendered).to have_selector 'dl.document-metadata'
122
+ expect(rendered).to have_selector 'dt', text: 'Title:'
123
+ expect(rendered).to have_selector 'dd', text: 'Title'
124
+ expect(rendered).not_to have_selector 'dt', text: 'ISBN:'
125
+ end
126
+ end
109
127
  end
110
128
 
111
129
  context 'show view' do
112
130
  let(:attr) { { title_component: :h1, show: true } }
113
131
 
114
132
  before do
115
- allow(view_context).to receive(:action_name).and_return('show')
133
+ controller.action_name = "show"
116
134
  end
117
135
 
118
136
  it 'renders with an id' do
119
- component.with(:body, '-')
137
+ component.set_slot(:body) { '-' }
120
138
 
121
139
  expect(rendered).to have_selector 'article#document'
122
140
  end
@@ -143,35 +161,58 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
143
161
  blacklight_config.show.embed_component = StubComponent
144
162
  expect(rendered).to have_content 'embed'
145
163
  end
146
- end
147
164
 
148
- it 'renders metadata' do
149
- expect(rendered).to have_selector 'dl.document-metadata'
150
- expect(rendered).to have_selector 'dt', text: 'Title:'
151
- expect(rendered).to have_selector 'dd', text: 'Title'
152
- expect(rendered).not_to have_selector 'dt', text: 'ISBN:'
153
- end
154
-
155
- context 'with a thumbnail component' do
156
- let(:attr) { { thumbnail_component: thumbnail_component_class } }
157
- let(:thumbnail_component_class) do
158
- Class.new(ViewComponent::Base) do
159
- def render_in(view_context)
160
- view_context.capture { 'Thumb!' }
165
+ context 'with configured metadata component' do
166
+ let(:custom_component_class) do
167
+ Class.new(Blacklight::DocumentMetadataComponent) do
168
+ # Override component rendering with our own value
169
+ def call
170
+ 'blah'
171
+ end
161
172
  end
162
173
  end
174
+
175
+ before do
176
+ stub_const('MyMetadataComponent', custom_component_class)
177
+ blacklight_config.show.metadata_component = MyMetadataComponent
178
+ end
179
+
180
+ it 'renders custom component' do
181
+ expect(rendered).to have_text 'blah'
182
+ end
163
183
  end
164
184
 
165
- it 'uses the provided thumbnail component' do
166
- expect(rendered).to have_content 'Thumb!'
185
+ context 'with configured title component' do
186
+ let(:custom_component_class) do
187
+ Class.new(Blacklight::DocumentTitleComponent) do
188
+ # Override component rendering with our own value
189
+ def call
190
+ 'Titleriffic'
191
+ end
192
+ end
193
+ end
194
+
195
+ before do
196
+ stub_const('MyTitleComponent', custom_component_class)
197
+ blacklight_config.show.title_component = MyTitleComponent
198
+ end
199
+
200
+ it 'renders custom component' do
201
+ expect(rendered).to have_text 'Titleriffic'
202
+ end
167
203
  end
168
204
  end
169
205
 
170
- context 'with before_title' do
206
+ it 'renders partials' do
207
+ component.with_partial { 'Partials' }
208
+ expect(rendered).to have_content 'Partials'
209
+ end
210
+
211
+ context 'with before_titles' do
171
212
  let(:render) do
172
213
  component.render_in(view_context) do
173
- component.title do |c|
174
- c.before_title { 'Prefix!' }
214
+ component.with_title do |c|
215
+ c.with_before_title { 'Prefix!' }
175
216
  end
176
217
  end
177
218
  end
@@ -15,12 +15,7 @@ RSpec.describe Blacklight::FacetComponent, type: :component do
15
15
  instance_double(Blacklight::Solr::Response::Facets::FacetField, name: 'field', items: items, limit: nil, sort: :index, offset: 0, prefix: nil)
16
16
  end
17
17
 
18
- let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'field', component: Blacklight::FacetFieldListComponent).normalize! }
19
-
20
- before do
21
- allow(controller).to receive(:view_context).and_return(controller.view_context)
22
- allow(controller.view_context).to receive(:facet_limit_for).and_return(20)
23
- end
18
+ let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'field').normalize! }
24
19
 
25
20
  it 'delegates to the configured component to render something' do
26
21
  expect(rendered).to have_selector 'ul.facet-values'
@@ -75,7 +70,7 @@ RSpec.describe Blacklight::FacetComponent, type: :component do
75
70
  end
76
71
 
77
72
  context 'when the field is not in the response' do
78
- let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'some_other_field', component: Blacklight::FacetFieldListComponent).normalize! }
73
+ let(:facet_config) { Blacklight::Configuration::FacetField.new(key: 'some_other_field').normalize! }
79
74
 
80
75
  it 'uses a null field to pass through the response information anyway' do
81
76
  allow(facet_config.component).to receive(:new).and_call_original
@@ -10,14 +10,13 @@ RSpec.describe Blacklight::FacetFieldCheckboxesComponent, type: :component do
10
10
  let(:facet_field) do
11
11
  instance_double(
12
12
  Blacklight::FacetFieldPresenter,
13
- facet_field: Blacklight::Configuration::NullField.new(key: 'field'),
13
+ facet_field: Blacklight::Configuration::NullField.new(key: 'field', item_component: Blacklight::FacetItemComponent, item_presenter: Blacklight::FacetItemPresenter),
14
14
  paginator: paginator,
15
15
  key: 'field',
16
16
  label: 'Field',
17
17
  active?: false,
18
18
  collapsed?: false,
19
19
  modal_path: nil,
20
- html_id: 'facet-field',
21
20
  search_state: search_state
22
21
  )
23
22
  end
@@ -11,16 +11,18 @@ RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
11
11
  instance_double(
12
12
  Blacklight::FacetFieldPresenter,
13
13
  paginator: paginator,
14
+ facet_field: facet_config,
14
15
  key: 'field',
15
16
  label: 'Field',
16
17
  active?: false,
17
18
  collapsed?: false,
18
19
  modal_path: nil,
19
- html_id: 'facet-field',
20
20
  values: []
21
21
  )
22
22
  end
23
23
 
24
+ let(:facet_config) { Blacklight::Configuration::NullField.new(key: 'field', item_component: Blacklight::FacetItemComponent, item_presenter: Blacklight::FacetItemPresenter) }
25
+
24
26
  let(:paginator) do
25
27
  instance_double(Blacklight::FacetPaginator, items: [
26
28
  double(label: 'x', hits: 10),
@@ -45,12 +47,12 @@ RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
45
47
  instance_double(
46
48
  Blacklight::FacetFieldPresenter,
47
49
  paginator: paginator,
50
+ facet_field: facet_config,
48
51
  key: 'field',
49
52
  label: 'Field',
50
53
  active?: true,
51
54
  collapsed?: false,
52
55
  modal_path: nil,
53
- html_id: 'facet-field',
54
56
  values: []
55
57
  )
56
58
  end
@@ -65,12 +67,12 @@ RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
65
67
  instance_double(
66
68
  Blacklight::FacetFieldPresenter,
67
69
  paginator: paginator,
70
+ facet_field: facet_config,
68
71
  key: 'field',
69
72
  label: 'Field',
70
73
  active?: false,
71
74
  collapsed?: true,
72
75
  modal_path: nil,
73
- html_id: 'facet-field',
74
76
  values: []
75
77
  )
76
78
  end
@@ -91,12 +93,12 @@ RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
91
93
  instance_double(
92
94
  Blacklight::FacetFieldPresenter,
93
95
  paginator: paginator,
96
+ facet_field: facet_config,
94
97
  key: 'field',
95
98
  label: 'Field',
96
99
  active?: false,
97
100
  collapsed?: false,
98
101
  modal_path: '/catalog/facet/modal',
99
- html_id: 'facet-field',
100
102
  values: []
101
103
  )
102
104
  end
@@ -111,13 +113,12 @@ RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
111
113
  instance_double(
112
114
  Blacklight::FacetFieldPresenter,
113
115
  paginator: paginator,
114
- facet_field: Blacklight::Configuration::NullField.new(key: 'field'),
116
+ facet_field: facet_config,
115
117
  key: 'field',
116
118
  label: 'Field',
117
119
  active?: false,
118
120
  collapsed?: false,
119
121
  modal_path: nil,
120
- html_id: 'facet-field',
121
122
  values: [%w[a b c]],
122
123
  search_state: search_state
123
124
  )
@@ -19,18 +19,20 @@ RSpec.describe Blacklight::FacetItemPivotComponent, type: :component do
19
19
 
20
20
  let(:facet_item) do
21
21
  instance_double(
22
- Blacklight::FacetItemPresenter,
23
- facet_config: Blacklight::Configuration::FacetField.new(key: 'z'),
22
+ Blacklight::FacetItemPivotPresenter,
23
+ facet_config: facet_config,
24
24
  facet_field: 'z',
25
25
  label: 'x',
26
26
  hits: 10,
27
27
  href: '/catalog?f[z]=x',
28
28
  selected?: false,
29
29
  search_state: search_state,
30
- items: [OpenStruct.new(value: 'x:1', hits: 5)]
30
+ facet_item_presenters: [OpenStruct.new(label: 'x:1', hits: 5, href: '/catalog?f[z][]=x:1', facet_config: facet_config)]
31
31
  )
32
32
  end
33
33
 
34
+ let(:facet_config) { Blacklight::Configuration::NullField.new(key: 'z', item_component: Blacklight::FacetItemComponent, item_presenter: Blacklight::FacetItemPivotPresenter) }
35
+
34
36
  it 'links to the facet and shows the number of hits' do
35
37
  expect(rendered).to have_selector 'li'
36
38
  expect(rendered).to have_link 'x', href: '/catalog?f%5Bz%5D=x'
@@ -39,21 +41,21 @@ RSpec.describe Blacklight::FacetItemPivotComponent, type: :component do
39
41
 
40
42
  it 'has the facet hierarchy' do
41
43
  expect(rendered).to have_selector 'li ul.pivot-facet'
42
- expect(rendered).to have_link 'x:1', href: /f%5Bz%5D%5B%5D=x%3A1/
44
+ expect(rendered).to have_link 'x:1', href: /f%5Bz%5D%5B%5D=x:1/
43
45
  end
44
46
 
45
47
  context 'with a selected facet' do
46
48
  let(:facet_item) do
47
49
  instance_double(
48
- Blacklight::FacetItemPresenter,
49
- facet_config: Blacklight::Configuration::FacetField.new,
50
+ Blacklight::FacetItemPivotPresenter,
51
+ facet_config: facet_config,
50
52
  facet_field: 'z',
51
53
  label: 'x',
52
54
  hits: 10,
53
55
  href: '/catalog',
54
56
  selected?: true,
55
57
  search_state: search_state,
56
- items: []
58
+ facet_item_presenters: []
57
59
  )
58
60
  end
59
61
 
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::HeaderComponent, type: :component do
4
+ before do
5
+ with_controller_class(CatalogController) do
6
+ allow(controller).to receive(:current_user).and_return(nil)
7
+ allow(controller).to receive(:search_action_url).and_return('/search')
8
+ render
9
+ end
10
+ end
11
+
12
+ context 'with no slots' do
13
+ let(:render) { render_inline(described_class.new(blacklight_config: CatalogController.blacklight_config)) }
14
+
15
+ it 'draws the topbar' do
16
+ expect(page).to have_css 'nav.topbar'
17
+ expect(page).to have_link 'Blacklight', href: '/'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Blacklight::Response::ViewTypeComponent, type: :component do
6
+ subject(:render) do
7
+ render_inline(described_class.new(response: response, views: views, search_state: search_state))
8
+ end
9
+
10
+ let(:response) { instance_double(Blacklight::Solr::Response, empty?: false) }
11
+ let(:search_state) { instance_double(Blacklight::SearchState, to_h: { controller: 'catalog', action: 'index' }) }
12
+ let(:view_config) { Blacklight::Configuration::ViewConfig.new }
13
+
14
+ let(:custom_component_class) do
15
+ Class.new(Blacklight::Icons::IconComponent) do
16
+ # Override component rendering with our own value
17
+ def call
18
+ 'blah'
19
+ end
20
+ end
21
+ end
22
+
23
+ before do
24
+ stub_const('Blacklight::Icons::DefComponent', custom_component_class)
25
+ end
26
+
27
+ describe "when some views exist" do
28
+ before do
29
+ stub_const('Blacklight::Icons::AbcComponent', custom_component_class)
30
+ end
31
+
32
+ let(:views) do
33
+ {
34
+ abc: view_config,
35
+ def: view_config
36
+ }
37
+ end
38
+
39
+ it "draws the group" do
40
+ expect(render.css('.view-type-group')).to be_present
41
+ end
42
+ end
43
+
44
+ context 'with a icon component class' do
45
+ let(:views) do
46
+ { abc: Blacklight::Configuration::ViewConfig.new(icon: Blacklight::Icons::ListComponent), def: view_config }
47
+ end
48
+
49
+ it 'draws the icon' do
50
+ expect(render.css('.view-type-abc svg')).to be_present
51
+ end
52
+ end
53
+
54
+ context 'with a icon component instance' do
55
+ let(:views) do
56
+ { abc: Blacklight::Configuration::ViewConfig.new(icon: Blacklight::Icons::ListComponent.new), def: view_config }
57
+ end
58
+
59
+ it 'draws the icon' do
60
+ expect(render.css('.view-type-abc svg')).to be_present
61
+ end
62
+ end
63
+
64
+ context 'with a icon with the svg given in-line' do
65
+ let(:views) do
66
+ { abc: Blacklight::Configuration::ViewConfig.new(icon: Blacklight::Icons::IconComponent.new(svg: 'blah')), def: view_config }
67
+ end
68
+
69
+ it 'draws the icon' do
70
+ expect(render.css('.view-type-abc').text).to include 'blah'
71
+ end
72
+ end
73
+
74
+ describe "when no views exist" do
75
+ let(:views) do
76
+ {}
77
+ end
78
+
79
+ it "draws nothing" do
80
+ expect(render.to_html).to be_blank
81
+ end
82
+ end
83
+ end
@@ -29,7 +29,7 @@ RSpec.describe Blacklight::SearchBarComponent, type: :component do
29
29
  context 'when a button is passed in' do
30
30
  subject(:render) do
31
31
  render_inline(instance) do |c|
32
- c.search_button do
32
+ c.with_search_button do
33
33
  controller.view_context.tag.button "hello", id: 'custom_search'
34
34
  end
35
35
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Blacklight::SearchContext::ServerAppliedParamsComponent, type: :component do
6
+ subject(:render) { instance.render_in(view_context) }
7
+
8
+ let(:instance) { described_class.new }
9
+ let(:current_search_session) { nil }
10
+ let(:view_context) { controller.view_context }
11
+
12
+ before do
13
+ view_context.view_paths.unshift(RSpec::Rails::ViewExampleGroup::StubResolverCache.resolver_for('application/_start_over.html.erb' => 'start over'))
14
+ allow(view_context).to receive(:current_search_session).and_return current_search_session
15
+ allow(view_context).to receive(:link_back_to_catalog).with(any_args)
16
+ end
17
+
18
+ it 'is blank without current session' do
19
+ expect(render).to be_blank
20
+ end
21
+
22
+ context 'with current session' do
23
+ let(:current_search_session) { double(query_params: { q: 'abc' }) }
24
+
25
+ it 'is not blank' do
26
+ expect(render).not_to be_blank
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Blacklight::SearchContext::ServerItemPaginationComponent, type: :component do
6
+ subject(:render) { render_inline(instance) }
7
+
8
+ let(:current_document_id) { 9 }
9
+ let(:current_document) { SolrDocument.new(id: current_document_id) }
10
+ let(:search_session) { { 'document_id' => current_document_id } }
11
+ let(:instance) { described_class.new(search_context: search_context, search_session: search_session, current_document: current_document) }
12
+
13
+ before do
14
+ allow(controller).to receive(:current_search_session).and_return(double(id: current_document_id))
15
+ controller.class.helper_method :current_search_session
16
+ end
17
+
18
+ context 'when there is no next or previous' do
19
+ let(:search_context) { {} }
20
+
21
+ it "does not render content" do
22
+ expect(render.to_html).to be_blank
23
+ end
24
+ end
25
+
26
+ context 'when there is next and previous' do
27
+ let(:search_context) { { next: next_doc, prev: prev_doc } }
28
+ let(:prev_doc) { SolrDocument.new(id: '777') }
29
+ let(:next_doc) { SolrDocument.new(id: '888') }
30
+
31
+ before do
32
+ # allow(controller).to receive(:controller_tracking_method).and_return('track_catalog_path')
33
+ allow(controller).to receive(:controller_name).and_return('catalog')
34
+
35
+ allow(controller).to receive(:link_to_previous_document).and_return('')
36
+ allow(controller).to receive(:link_to_next_document).and_return('')
37
+ end
38
+
39
+ it "renders content" do
40
+ expect(render.css('.pagination-search-widgets').to_html).not_to be_blank
41
+ end
42
+
43
+ context "session and document are out of sync" do
44
+ let(:current_document) { SolrDocument.new(id: current_document_id + 1) }
45
+
46
+ it "does not render content" do
47
+ expect(render.to_html).to be_blank
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Blacklight::DefaultComponentConfiguration do
3
+ RSpec.describe CatalogController do
4
4
  subject do
5
5
  Class.new do
6
6
  include Blacklight::Configurable
7
- include Blacklight::DefaultComponentConfiguration
8
7
 
9
8
  def some_existing_action
10
9
  1
@@ -12,10 +11,6 @@ RSpec.describe Blacklight::DefaultComponentConfiguration do
12
11
  end
13
12
  end
14
13
 
15
- before do
16
- allow(Deprecation).to receive(:warn)
17
- end
18
-
19
14
  describe ".add_show_tools_partial" do
20
15
  it "defines an action method" do
21
16
  subject.blacklight_config.add_show_tools_partial :xyz
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Blacklight::Base do
3
+ RSpec.describe Blacklight::Catalog do
4
4
  subject { controller }
5
5
 
6
- let(:controller) { (Class.new(ApplicationController) { include Blacklight::Base }).new }
6
+ let(:controller) { (Class.new(ApplicationController) { include Blacklight::Catalog }).new }
7
7
 
8
8
  describe "#search_state" do
9
9
  subject { controller.send(:search_state) }
@@ -7,11 +7,10 @@ RSpec.describe BookmarksController do
7
7
  end
8
8
 
9
9
  it 'opts out of search session tracking' do
10
- expect(@controller.blacklight_config.track_search_session).to eq false
10
+ expect(@controller.blacklight_config.track_search_session.storage).to be false
11
11
  end
12
12
  end
13
13
 
14
- # jquery 1.9 ajax does error callback if 200 returns empty body. so use 204 instead.
15
14
  describe "update" do
16
15
  it "has a 200 status code when creating a new one" do
17
16
  put :update, xhr: true, params: { id: '2007020969', format: :js }
@@ -105,7 +104,7 @@ RSpec.describe BookmarksController do
105
104
  end
106
105
 
107
106
  context 'created over an hour ago' do
108
- let(:current_time) { Time.zone.now - 2.hours }
107
+ let(:current_time) { 2.hours.ago }
109
108
 
110
109
  it 'is expired' do
111
110
  get :index, params: { encrypted_user_id: token }