blacklight 6.24.0 → 7.0.0.rc1

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 (393) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +15 -3
  5. data/.rubocop_todo.yml +242 -379
  6. data/.solr_wrapper.yml +1 -1
  7. data/.travis.yml +20 -24
  8. data/Gemfile +1 -4
  9. data/README.md +21 -4
  10. data/Rakefile +1 -2
  11. data/VERSION +1 -1
  12. data/app/assets/images/blacklight/list.svg +1 -0
  13. data/app/assets/images/blacklight/search.svg +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +496 -56
  15. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  16. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
  17. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  18. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  19. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  20. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  21. data/app/assets/stylesheets/blacklight/_facets.scss +74 -92
  22. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  23. data/app/assets/stylesheets/blacklight/_icons.scss +29 -0
  24. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  25. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  26. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  27. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  28. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  29. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  30. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  31. data/app/builders/blacklight/action_builder.rb +56 -0
  32. data/app/controllers/bookmarks_controller.rb +2 -2
  33. data/app/controllers/catalog_controller.rb +2 -2
  34. data/app/controllers/concerns/blacklight/base.rb +0 -33
  35. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -37
  36. data/app/controllers/concerns/blacklight/catalog.rb +254 -213
  37. data/app/controllers/concerns/blacklight/controller.rb +117 -133
  38. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  39. data/app/controllers/concerns/blacklight/search_context.rb +10 -14
  40. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  41. data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
  42. data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
  43. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  44. data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
  45. data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
  46. data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
  47. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
  49. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
  50. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  52. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
  53. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  54. data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
  55. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  56. data/app/javascript/blacklight/autofocus.js +20 -0
  57. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  58. data/app/javascript/blacklight/checkbox_submit.js +133 -0
  59. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  60. data/app/javascript/blacklight/core.js +39 -0
  61. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  62. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
  63. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
  64. data/app/models/blacklight/facet_paginator.rb +3 -3
  65. data/app/models/blacklight/icon.rb +53 -0
  66. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  67. data/app/models/blacklight/suggest_search.rb +15 -4
  68. data/app/models/bookmark.rb +4 -9
  69. data/app/models/concerns/blacklight/configurable.rb +13 -13
  70. data/app/models/concerns/blacklight/document.rb +8 -42
  71. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  72. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  73. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  74. data/app/models/concerns/blacklight/document/email.rb +1 -1
  75. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  76. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  77. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  78. data/app/models/concerns/blacklight/solr/document.rb +7 -8
  79. data/app/models/concerns/blacklight/suggest/response.rb +3 -5
  80. data/app/models/concerns/blacklight/user.rb +6 -6
  81. data/app/models/record_mailer.rb +5 -6
  82. data/app/models/search.rb +4 -7
  83. data/app/presenters/blacklight/field_presenter.rb +5 -5
  84. data/app/presenters/blacklight/index_presenter.rb +34 -71
  85. data/app/presenters/blacklight/json_presenter.rb +7 -4
  86. data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
  87. data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
  88. data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
  89. data/app/presenters/blacklight/rendering/join.rb +3 -3
  90. data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
  91. data/app/presenters/blacklight/rendering/microdata.rb +3 -3
  92. data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
  93. data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
  94. data/app/presenters/blacklight/show_presenter.rb +20 -69
  95. data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
  96. data/app/services/blacklight/document_factory.rb +11 -0
  97. data/app/services/blacklight/field_retriever.rb +24 -24
  98. data/app/services/blacklight/search_service.rb +154 -0
  99. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  100. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  101. data/app/views/bookmarks/_tools.html.erb +2 -2
  102. data/app/views/bookmarks/index.html.erb +2 -2
  103. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  104. data/app/views/catalog/_citation.html.erb +18 -23
  105. data/app/views/catalog/_constraints.html.erb +5 -8
  106. data/app/views/catalog/_constraints_element.html.erb +6 -6
  107. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
  108. data/app/views/catalog/_document.html.erb +5 -3
  109. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -0
  110. data/app/views/catalog/_document_action.html.erb +2 -1
  111. data/app/views/catalog/_email_form.html.erb +8 -4
  112. data/app/views/catalog/_facet_index_navigation.html.erb +3 -3
  113. data/app/views/catalog/_facet_layout.html.erb +5 -7
  114. data/app/views/catalog/_facet_limit.html.erb +3 -2
  115. data/app/views/catalog/_facet_pagination.html.erb +10 -10
  116. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  117. data/app/views/catalog/_facets.html.erb +8 -12
  118. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
  119. data/app/views/catalog/_home_text.html.erb +32 -36
  120. data/app/views/catalog/_index.html.erb +12 -0
  121. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
  122. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  123. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  124. data/app/views/catalog/_search_form.html.erb +12 -8
  125. data/app/views/catalog/_search_header.html.erb +0 -3
  126. data/app/views/catalog/_search_results.html.erb +4 -0
  127. data/app/views/catalog/_show.html.erb +10 -0
  128. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  129. data/app/views/catalog/_show_main_content.html.erb +4 -4
  130. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  131. data/app/views/catalog/_show_tools.html.erb +9 -11
  132. data/app/views/catalog/_sms_form.html.erb +8 -4
  133. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  134. data/app/views/catalog/_sort_widget.html.erb +7 -7
  135. data/app/views/catalog/_thumbnail.html.erb +5 -0
  136. data/app/views/catalog/_view_type_group.html.erb +2 -2
  137. data/app/views/catalog/citation.html.erb +1 -1
  138. data/app/views/catalog/citation.js.erb +9 -1
  139. data/app/views/catalog/email.html.erb +5 -5
  140. data/app/views/catalog/email_success.html.erb +11 -9
  141. data/app/views/catalog/facet.html.erb +5 -6
  142. data/app/views/catalog/index.atom.builder +10 -15
  143. data/app/views/catalog/index.html.erb +9 -11
  144. data/app/views/catalog/index.json.jbuilder +65 -3
  145. data/app/views/catalog/index.rss.builder +5 -5
  146. data/app/views/catalog/opensearch.xml.builder +10 -10
  147. data/app/views/catalog/show.html.erb +11 -6
  148. data/app/views/catalog/sms.html.erb +2 -3
  149. data/app/views/catalog/sms_success.html.erb +11 -10
  150. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  151. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  152. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  153. data/app/views/kaminari/blacklight/_next_page.html.erb +4 -4
  154. data/app/views/kaminari/blacklight/_page.html.erb +3 -3
  155. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  156. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  157. data/app/views/layouts/blacklight.html.erb +14 -41
  158. data/app/views/layouts/blacklight/base.html.erb +43 -0
  159. data/app/views/layouts/catalog_result.html.erb +11 -0
  160. data/app/views/search_history/index.html.erb +16 -21
  161. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  162. data/app/views/shared/_header_navbar.html.erb +8 -13
  163. data/app/views/shared/_modal.html.erb +6 -0
  164. data/app/views/shared/_user_util_links.html.erb +22 -0
  165. data/blacklight.gemspec +10 -11
  166. data/config/locales/blacklight.de.yml +0 -30
  167. data/config/locales/blacklight.en.yml +1 -27
  168. data/config/locales/blacklight.es.yml +0 -30
  169. data/config/locales/blacklight.fr.yml +0 -30
  170. data/config/locales/blacklight.hu.yml +210 -0
  171. data/config/locales/blacklight.it.yml +0 -30
  172. data/config/locales/blacklight.nl.yml +210 -0
  173. data/config/locales/blacklight.pt-BR.yml +6 -32
  174. data/config/locales/blacklight.sq.yml +1 -28
  175. data/config/locales/blacklight.zh.yml +0 -25
  176. data/config/routes.rb +3 -10
  177. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  178. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  179. data/lib/blacklight.rb +4 -5
  180. data/lib/blacklight/abstract_repository.rb +9 -21
  181. data/lib/blacklight/configuration.rb +82 -89
  182. data/lib/blacklight/configuration/context.rb +1 -1
  183. data/lib/blacklight/configuration/facet_field.rb +16 -9
  184. data/lib/blacklight/configuration/field.rb +32 -3
  185. data/lib/blacklight/configuration/fields.rb +41 -48
  186. data/lib/blacklight/configuration/search_field.rb +2 -2
  187. data/lib/blacklight/configuration/sort_field.rb +2 -2
  188. data/lib/blacklight/configuration/view_config.rb +4 -0
  189. data/lib/blacklight/engine.rb +6 -10
  190. data/lib/blacklight/exceptions.rb +4 -7
  191. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  192. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  193. data/lib/blacklight/parameters.rb +1 -1
  194. data/lib/blacklight/routes/searchable.rb +1 -0
  195. data/lib/blacklight/search_builder.rb +26 -35
  196. data/lib/blacklight/search_state.rb +8 -8
  197. data/lib/blacklight/solr/repository.rb +3 -36
  198. data/lib/blacklight/solr/request.rb +1 -1
  199. data/lib/blacklight/solr/response.rb +29 -30
  200. data/lib/blacklight/solr/response/facets.rb +29 -31
  201. data/lib/blacklight/solr/response/group.rb +3 -3
  202. data/lib/blacklight/solr/response/group_response.rb +1 -1
  203. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  204. data/lib/blacklight/solr/response/response.rb +2 -2
  205. data/lib/blacklight/solr/response/spelling.rb +3 -3
  206. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  207. data/lib/blacklight/version.rb +1 -1
  208. data/lib/generators/blacklight/assets_generator.rb +8 -8
  209. data/lib/generators/blacklight/controller_generator.rb +4 -5
  210. data/lib/generators/blacklight/document_generator.rb +1 -1
  211. data/lib/generators/blacklight/install_generator.rb +18 -21
  212. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  213. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
  214. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  215. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  216. data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
  217. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  218. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  219. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  220. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  221. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  222. data/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
  223. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  224. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  225. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  226. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  227. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  228. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  229. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  230. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  231. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  232. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  233. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  234. data/lib/generators/blacklight/user_generator.rb +3 -6
  235. data/lib/railties/blacklight.rake +19 -14
  236. data/package-lock.json +2057 -0
  237. data/package.json +28 -0
  238. data/spec/controllers/alternate_controller_spec.rb +1 -1
  239. data/spec/controllers/application_controller_spec.rb +1 -1
  240. data/spec/controllers/blacklight/base_spec.rb +1 -1
  241. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  242. data/spec/controllers/blacklight/facet_spec.rb +1 -1
  243. data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
  244. data/spec/controllers/bookmarks_controller_spec.rb +1 -36
  245. data/spec/controllers/catalog_controller_spec.rb +153 -53
  246. data/spec/controllers/search_history_controller_spec.rb +2 -2
  247. data/spec/features/alternate_controller_spec.rb +1 -1
  248. data/spec/features/autocomplete_spec.rb +2 -2
  249. data/spec/features/bookmarks_spec.rb +10 -10
  250. data/spec/features/did_you_mean_spec.rb +3 -9
  251. data/spec/features/facets_spec.rb +11 -11
  252. data/spec/features/record_view_spec.rb +1 -6
  253. data/spec/features/search_context_spec.rb +2 -2
  254. data/spec/features/search_filters_spec.rb +41 -41
  255. data/spec/features/search_formats_spec.rb +1 -1
  256. data/spec/features/search_history_spec.rb +1 -26
  257. data/spec/features/search_pagination_spec.rb +1 -1
  258. data/spec/features/search_results_spec.rb +3 -4
  259. data/spec/features/search_sort_spec.rb +2 -2
  260. data/spec/features/search_spec.rb +5 -10
  261. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  262. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
  263. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
  264. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
  265. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  266. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
  267. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
  268. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
  269. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
  270. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
  271. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
  272. data/spec/helpers/blacklight_helper_spec.rb +36 -141
  273. data/spec/helpers/catalog_helper_spec.rb +37 -56
  274. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
  275. data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
  276. data/spec/lib/blacklight/configuration/field_spec.rb +12 -0
  277. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  278. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +153 -0
  279. data/spec/lib/blacklight/parameters_spec.rb +1 -1
  280. data/spec/lib/blacklight/search_state_spec.rb +2 -2
  281. data/spec/lib/blacklight_spec.rb +1 -1
  282. data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
  283. data/spec/models/blacklight/configurable_spec.rb +15 -16
  284. data/spec/models/blacklight/configuration/context_spec.rb +1 -1
  285. data/spec/models/blacklight/configuration_spec.rb +146 -135
  286. data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
  287. data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
  288. data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
  289. data/spec/models/blacklight/document/email_spec.rb +3 -3
  290. data/spec/models/blacklight/document/sms_spec.rb +3 -3
  291. data/spec/models/blacklight/document_spec.rb +3 -16
  292. data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
  293. data/spec/models/blacklight/icon_spec.rb +34 -0
  294. data/spec/models/blacklight/search_builder_spec.rb +33 -27
  295. data/spec/models/blacklight/solr/document_spec.rb +18 -7
  296. data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
  297. data/spec/models/blacklight/solr/repository_spec.rb +32 -27
  298. data/spec/models/blacklight/solr/request_spec.rb +1 -1
  299. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  300. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
  301. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  302. data/spec/models/blacklight/solr/response_spec.rb +9 -6
  303. data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
  304. data/spec/models/blacklight/suggest/response_spec.rb +4 -5
  305. data/spec/models/blacklight/suggest_search_spec.rb +14 -7
  306. data/spec/models/blacklight/user_spec.rb +1 -1
  307. data/spec/models/bookmark_spec.rb +1 -1
  308. data/spec/models/record_mailer_spec.rb +2 -2
  309. data/spec/models/search_spec.rb +1 -1
  310. data/spec/models/solr_document_spec.rb +3 -3
  311. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
  312. data/spec/presenters/index_presenter_spec.rb +70 -143
  313. data/spec/presenters/pipeline_spec.rb +4 -4
  314. data/spec/presenters/show_presenter_spec.rb +83 -145
  315. data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
  316. data/spec/routing/catalog_routing_spec.rb +1 -17
  317. data/spec/services/blacklight/search_service_spec.rb +446 -0
  318. data/spec/spec_helper.rb +22 -9
  319. data/spec/test_app_templates/Gemfile.extra +2 -5
  320. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  321. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
  322. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
  323. data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
  324. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  325. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  326. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  327. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  328. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
  329. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
  330. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
  331. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  332. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +1 -1
  333. data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
  334. data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
  335. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
  336. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
  337. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
  338. data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
  339. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  340. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  341. data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
  342. data/spec/views/catalog/index.html.erb_spec.rb +4 -7
  343. data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
  344. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  345. data/spec/views/catalog/show.html.erb_spec.rb +2 -2
  346. data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
  347. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
  348. data/tasks/blacklight.rake +10 -8
  349. data/template.demo.rb +1 -11
  350. metadata +171 -189
  351. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  352. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  353. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  354. data/app/assets/javascripts/blacklight/core.js +0 -30
  355. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  356. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  357. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  358. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  359. data/app/controllers/saved_searches_controller.rb +0 -4
  360. data/app/controllers/suggest_controller.rb +0 -4
  361. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  362. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  363. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  364. data/app/helpers/blacklight_url_helper.rb +0 -4
  365. data/app/helpers/component_helper.rb +0 -4
  366. data/app/helpers/facets_helper.rb +0 -4
  367. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  368. data/app/helpers/layout_helper.rb +0 -4
  369. data/app/helpers/render_constraints_helper.rb +0 -4
  370. data/app/helpers/search_history_constraints_helper.rb +0 -4
  371. data/app/helpers/suggest_helper.rb +0 -4
  372. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  373. data/app/presenters/blacklight/document_presenter.rb +0 -153
  374. data/app/views/_user_util_links.html.erb +0 -26
  375. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  376. data/app/views/catalog/_index_default.html.erb +0 -12
  377. data/app/views/catalog/_show_default.html.erb +0 -10
  378. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  379. data/app/views/saved_searches/index.html.erb +0 -32
  380. data/app/views/shared/_ajax_modal.html.erb +0 -6
  381. data/lib/blacklight/utils.rb +0 -183
  382. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  383. data/solr/conf/schema.xml +0 -627
  384. data/solr/conf/solrconfig.xml +0 -411
  385. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  386. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  387. data/spec/controllers/suggest_controller_spec.rb +0 -17
  388. data/spec/features/saved_searches_spec.rb +0 -47
  389. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  390. data/spec/lib/blacklight/utils_spec.rb +0 -167
  391. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  392. data/spec/presenters/document_presenter_spec.rb +0 -438
  393. data/spec/support/backport_test.rb +0 -14
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Rendering::Pipeline do
3
+ RSpec.describe Blacklight::Rendering::Pipeline do
4
4
  include Capybara::RSpecMatchers
5
5
  let(:document) { instance_double(SolrDocument) }
6
6
  let(:context) { double }
@@ -10,18 +10,18 @@ describe Blacklight::Rendering::Pipeline do
10
10
  describe "render" do
11
11
  subject { presenter.render }
12
12
  let(:values) { ['a', 'b'] }
13
- let(:field_config) { Blacklight::Configuration::NullField.new }
13
+ let(:field_config) { Blacklight::Configuration::NullField.new }
14
14
  it { is_expected.to eq "a and b" }
15
15
 
16
16
  context "when separator_options are in the config" do
17
17
  let(:values) { ['c', 'd'] }
18
- let(:field_config) { Blacklight::Configuration::NullField.new(separator: nil, itemprop: nil, separator_options: { two_words_connector: '; '}) }
18
+ let(:field_config) { Blacklight::Configuration::NullField.new(itemprop: nil, separator_options: { two_words_connector: '; '}) }
19
19
  it { is_expected.to eq "c; d" }
20
20
  end
21
21
 
22
22
  context "when itemprop is in the config" do
23
23
  let(:values) { ['a'] }
24
- let(:field_config) { Blacklight::Configuration::NullField.new(separator: nil, itemprop: 'some-prop', separator_options: nil) }
24
+ let(:field_config) { Blacklight::Configuration::NullField.new(itemprop: 'some-prop', separator_options: nil) }
25
25
  it { is_expected.to have_selector("span[@itemprop='some-prop']", :text => "a") }
26
26
  end
27
27
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::ShowPresenter do
3
+ RSpec.describe Blacklight::ShowPresenter do
4
4
  include Capybara::RSpecMatchers
5
5
  let(:request_context) { double }
6
6
  let(:config) { Blacklight::Configuration.new }
@@ -14,9 +14,10 @@ describe Blacklight::ShowPresenter do
14
14
 
15
15
  let(:document) do
16
16
  SolrDocument.new(id: 1,
17
- 'link_to_search_true' => 'x',
18
- 'link_to_search_named' => 'x',
19
- 'qwer' => 'document qwer value')
17
+ 'link_to_facet_true' => 'x',
18
+ 'link_to_facet_named' => 'x',
19
+ 'qwer' => 'document qwer value',
20
+ 'mnbv' => 'document mnbv value')
20
21
  end
21
22
 
22
23
  before do
@@ -96,155 +97,118 @@ describe Blacklight::ShowPresenter do
96
97
  end
97
98
  end
98
99
 
99
- describe '#field_value' do
100
- subject { presenter.field_value field }
101
-
102
- let(:field) { config.show_fields[field_name] }
103
- let(:field_name) { 'asdf' }
100
+ describe "field_value" do
104
101
  let(:config) do
105
102
  Blacklight::Configuration.new.configure do |config|
106
103
  config.add_show_field 'qwer'
107
- config.add_show_field 'asdf', helper_method: :render_asdf_document_show_field
108
- config.add_show_field 'link_to_search_true', link_to_search: true
109
- config.add_show_field 'link_to_search_named', link_to_search: :some_field
110
- config.add_show_field 'highlight', highlight: true
111
- config.add_show_field 'solr_doc_accessor', accessor: true
112
- config.add_show_field 'explicit_accessor', accessor: :solr_doc_accessor
113
- config.add_show_field 'explicit_array_accessor', accessor: [:solr_doc_accessor, :some_method]
104
+ config.add_show_field 'asdf', :helper_method => :render_asdf_document_show_field
105
+ config.add_show_field 'link_to_facet_true', :link_to_facet => true
106
+ config.add_show_field 'link_to_facet_named', :link_to_facet => :some_field
107
+ config.add_show_field 'highlight', :highlight => true
108
+ config.add_show_field 'solr_doc_accessor', :accessor => true
109
+ config.add_show_field 'explicit_accessor', :accessor => :solr_doc_accessor
110
+ config.add_show_field 'explicit_array_accessor', :accessor => [:solr_doc_accessor, :some_method]
111
+ config.add_show_field 'explicit_accessor_with_arg', :accessor => :solr_doc_accessor_with_arg
114
112
  end
115
113
  end
116
114
 
117
- context 'when a name is provided' do
118
- subject { presenter.field_value 'qwer' }
119
-
120
- it 'raises a deprecation' do
121
- expect(Deprecation).to receive(:warn)
122
- expect(subject).to eq 'document qwer value'
123
- end
115
+ it 'html-escapes values' do
116
+ value = subject.field_value 'asdf', value: '<b>val1</b>'
117
+ expect(value).to eq '&lt;b&gt;val1&lt;/b&gt;'
124
118
  end
125
119
 
126
- context 'when an explicit html value is provided' do
127
- subject { presenter.field_value field, value: '<b>val1</b>' }
128
-
129
- it { is_expected.to eq '&lt;b&gt;val1&lt;/b&gt;' }
120
+ it 'joins multivalued valued fields' do
121
+ value = subject.field_value 'asdf', value: ['<a', 'b']
122
+ expect(value).to eq '&lt;a and b'
130
123
  end
131
124
 
132
- context 'when an explicit array value with unsafe characters is provided' do
133
- subject { presenter.field_value field, value: ['<a', 'b'] }
134
-
135
- it { is_expected.to eq '&lt;a and b' }
125
+ it 'joins multivalued valued fields' do
126
+ value = subject.field_value 'asdf', value: ['a', 'b', 'c']
127
+ expect(value).to eq 'a, b, and c'
136
128
  end
137
129
 
138
- context 'when an explicit array value is provided' do
139
- subject { presenter.field_value field, value: %w[a b c] }
140
-
141
- it { is_expected.to eq 'a, b, and c' }
130
+ it "checks for an explicit value" do
131
+ expect(request_context).to_not receive(:render_asdf_document_show_field)
132
+ value = subject.field_value 'asdf', :value => 'val1'
133
+ expect(value).to eq 'val1'
142
134
  end
143
135
 
144
- context 'when an explicit value is provided' do
145
- subject { presenter.field_value field, value: 'val1' }
146
-
147
- it { is_expected.to eq 'val1' }
136
+ it "checks for a helper method to call" do
137
+ allow(request_context).to receive(:render_asdf_document_show_field).and_return('custom asdf value')
138
+ value = subject.field_value 'asdf'
139
+ expect(value).to eq 'custom asdf value'
148
140
  end
149
141
 
150
- context 'when field has a helper method' do
151
- before do
152
- allow(request_context).to receive(:render_asdf_document_show_field).and_return('custom asdf value')
153
- end
154
-
155
- it { is_expected.to eq 'custom asdf value' }
156
- end
157
-
158
- context 'when field has link_to_search with true' do
159
- before do
160
- allow(request_context).to receive(:search_action_path).with('f' => { 'link_to_search_true' => ['x'] }).and_return('/foo')
161
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
162
- end
163
-
164
- let(:field_name) { 'link_to_search_true' }
165
-
166
- it { is_expected.to eq 'bar' }
142
+ it "checks for a link_to_facet" do
143
+ allow(request_context).to receive(:search_action_path).and_return('/foo')
144
+ allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
145
+ value = subject.field_value 'link_to_facet_true'
146
+ expect(value).to eq 'bar'
167
147
  end
168
148
 
169
- context 'when field has link_to_search with a field name' do
170
- before do
171
- allow(request_context).to receive(:search_action_path).with('f' => { 'some_field' => ['x'] }).and_return('/foo')
172
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
173
- end
174
-
175
- let(:field_name) { 'link_to_search_named' }
176
-
177
- it { is_expected.to eq 'bar' }
149
+ it "checks for a link_to_facet with a field name" do
150
+ allow(request_context).to receive(:search_action_path).and_return('/foo')
151
+ allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
152
+ value = subject.field_value 'link_to_facet_named'
153
+ expect(value).to eq 'bar'
178
154
  end
179
155
 
180
- context 'when no highlight field is available' do
156
+ context "when no highlight field is available" do
181
157
  before do
182
158
  allow(document).to receive(:has_highlight_field?).and_return(false)
183
159
  end
184
-
185
- let(:field_name) { 'highlight' }
186
-
187
- it { is_expected.to be_blank }
188
- end
189
-
190
- context 'when highlight field is available' do
191
- before do
192
- allow(document).to receive(:has_highlight_field?).and_return(true)
193
- allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe])
160
+ let(:value) { subject.field_value 'highlight' }
161
+ it "is blank" do
162
+ expect(value).to be_blank
194
163
  end
195
-
196
- let(:field_name) { 'highlight' }
197
-
198
- it { is_expected.to eq '<em>highlight</em>' }
199
164
  end
200
165
 
201
- context 'when highlight returns multiple values' do
202
- before do
203
- allow(document).to receive(:has_highlight_field?).and_return(true)
204
- allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe, '<em>other highlight</em>'.html_safe])
205
- end
206
-
207
- let(:field_name) { 'highlight' }
208
-
209
- it { is_expected.to eq '<em>highlight</em> and <em>other highlight</em>' }
166
+ it "checks for a highlighted field" do
167
+ allow(document).to receive(:has_highlight_field?).and_return(true)
168
+ allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe])
169
+ value = subject.field_value 'highlight'
170
+ expect(value).to eq '<em>highlight</em>'
210
171
  end
211
172
 
212
- context 'when no options are provided' do
213
- let(:field_name) { 'qwer' }
214
-
215
- it "checks the document field value" do
216
- expect(subject).to eq 'document qwer value'
217
- end
173
+ it 'respects the HTML-safeness of multivalued highlight fields' do
174
+ allow(document).to receive(:has_highlight_field?).and_return(true)
175
+ allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe, '<em>other highlight</em>'.html_safe])
176
+ value = subject.field_value 'highlight'
177
+ expect(value).to eq '<em>highlight</em> and <em>other highlight</em>'
218
178
  end
219
179
 
220
- context 'when accessor is true' do
221
- before do
222
- allow(document).to receive_messages(solr_doc_accessor: "123")
223
- end
224
-
225
- let(:field_name) { 'solr_doc_accessor' }
226
-
227
- it { is_expected.to eq '123' }
180
+ it "checks the document field value" do
181
+ value = subject.field_value 'qwer'
182
+ expect(value).to eq 'document qwer value'
228
183
  end
229
184
 
230
- context 'when accessor is set to a value' do
231
- let(:field_name) { 'explicit_accessor' }
232
-
233
- it 'calls the accessor with the field_name as the argument' do
234
- expect(document).to receive(:solr_doc_accessor).with('explicit_accessor').and_return("123")
185
+ it "works with show fields that aren't explicitly defined" do
186
+ value = subject.field_value 'mnbv'
187
+ expect(value).to eq 'document mnbv value'
188
+ end
235
189
 
236
- expect(subject).to eq '123'
237
- end
190
+ it "calls an accessor on the solr document" do
191
+ allow(document).to receive_messages(solr_doc_accessor: "123")
192
+ value = subject.field_value 'solr_doc_accessor'
193
+ expect(value).to eq "123"
238
194
  end
239
195
 
240
- context 'when accessor is set to an array' do
241
- let(:field_name) { 'explicit_array_accessor' }
196
+ it "calls an explicit accessor on the solr document" do
197
+ allow(document).to receive_messages(solr_doc_accessor: "123")
198
+ value = subject.field_value 'explicit_accessor'
199
+ expect(value).to eq "123"
200
+ end
242
201
 
243
- it 'calls the accessors on the return of the preceeding' do
244
- allow(document).to receive_message_chain(:solr_doc_accessor, some_method: "123")
202
+ it "calls an explicit array-style accessor on the solr document" do
203
+ allow(document).to receive_message_chain(:solr_doc_accessor, some_method: "123")
204
+ value = subject.field_value 'explicit_array_accessor'
205
+ expect(value).to eq "123"
206
+ end
245
207
 
246
- expect(subject).to eq '123'
247
- end
208
+ it "calls an accessor on the solr document with the field as an argument" do
209
+ allow(document).to receive(:solr_doc_accessor_with_arg).with('explicit_accessor_with_arg').and_return("123")
210
+ value = subject.field_value 'explicit_accessor_with_arg'
211
+ expect(value).to eq "123"
248
212
  end
249
213
  end
250
214
 
@@ -296,9 +260,8 @@ describe Blacklight::ShowPresenter do
296
260
  context 'for a field with the helper_method option' do
297
261
  let(:field_name) { 'field_with_helper' }
298
262
  let(:field_config) { config.add_facet_field 'field_with_helper', helper_method: 'render_field_with_helper' }
299
-
300
- before do
301
- document['field_with_helper'] = 'value'
263
+ let(:document) do
264
+ SolrDocument.new(id: 1, 'field_with_helper' => 'value')
302
265
  end
303
266
 
304
267
  it "checks call the helper method with arguments" do
@@ -319,30 +282,5 @@ describe Blacklight::ShowPresenter do
319
282
  end
320
283
  end
321
284
  end
322
-
323
- describe 'deprecated methods' do
324
- before do
325
- allow(Deprecation).to receive(:warn)
326
- end
327
-
328
- let(:field_config) { config.add_index_field 'qwerty' }
329
-
330
- describe '#get_field_values' do
331
- it 'renders values for the given field' do
332
- expect(subject.get_field_values(field_config, value: ['x', 'y'])).to eq 'x and y'
333
- end
334
- end
335
-
336
- describe '#render_field_values' do
337
- it 'renders values for the given field' do
338
- expect(subject.render_field_values('x')).to eq 'x'
339
- end
340
- end
341
-
342
- describe '#render_values' do
343
- it 'renders values for the given field' do
344
- expect(subject.render_values(['x', 'y', 'z'])).to eq 'x, y, and z'
345
- end
346
- end
347
- end
348
285
  end
286
+
@@ -0,0 +1,171 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::ThumbnailPresenter do
4
+ include Capybara::RSpecMatchers
5
+ let(:view_context) { double "View context" }
6
+ let(:config) { Blacklight::Configuration.new.view_config(:index) }
7
+ let(:presenter) { described_class.new(document, view_context, config) }
8
+ let(:document) { SolrDocument.new }
9
+
10
+ describe "#exists?" do
11
+ subject { presenter.exists? }
12
+
13
+ context "when thumbnail_method is configured" do
14
+ let(:config) do
15
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_method: :xyz)
16
+ end
17
+ it { is_expected.to be true }
18
+ end
19
+
20
+ context "when thumbnail_field is configured as a single field" do
21
+ let(:config) do
22
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)
23
+ end
24
+
25
+ context "and the field exists in the document" do
26
+ let(:document) { SolrDocument.new('xyz' => 'image.png') }
27
+
28
+ it { is_expected.to be true }
29
+ end
30
+
31
+ context "and the field is missing from the document" do
32
+ it { is_expected.to be false }
33
+ end
34
+ end
35
+
36
+ context "when thumbnail_field is configured as an array of fields" do
37
+ let(:config) do
38
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_field: [:rst, :uvw, :xyz])
39
+ end
40
+
41
+ context "and the field exists in the document" do
42
+ let(:document) { SolrDocument.new('xyz' => 'image.png') }
43
+
44
+ it { is_expected.to be true }
45
+ end
46
+ end
47
+
48
+ context "when default_thumbnail is configured" do
49
+ let(:config) do
50
+ Blacklight::OpenStructWithHashAccess.new(default_thumbnail: 'image.png')
51
+ end
52
+
53
+ context "and the field exists in the document" do
54
+ it { is_expected.to be true }
55
+ end
56
+ end
57
+
58
+ context "without any configured options" do
59
+ it { is_expected.to be_falsey }
60
+ end
61
+ end
62
+
63
+ describe "#thumbnail_tag" do
64
+ subject { presenter.thumbnail_tag }
65
+ context "when thumbnail_method is configured" do
66
+ let(:config) do
67
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_method: :xyz)
68
+ end
69
+
70
+ context "and the method returns a value" do
71
+ before do
72
+ allow(view_context).to receive_messages(xyz: "some-thumbnail")
73
+ end
74
+
75
+ it "calls the provided thumbnail method" do
76
+ expect(view_context).to receive_messages(xyz: "some-thumbnail")
77
+ allow(view_context).to receive(:link_to_document).with(document, "some-thumbnail", {})
78
+ .and_return("link")
79
+ expect(subject).to eq "link"
80
+ end
81
+
82
+ context "and url options have :suppress_link" do
83
+ subject { presenter.thumbnail_tag({}, suppress_link: true) }
84
+
85
+ it "does not link to the document" do
86
+ expect(subject).to eq "some-thumbnail"
87
+ end
88
+ end
89
+ end
90
+
91
+ context "and no value is returned from the thumbnail method" do
92
+ before do
93
+ allow(view_context).to receive_messages(xyz: nil)
94
+ end
95
+ it { is_expected.to be nil }
96
+ end
97
+ end
98
+
99
+ context "when thumbnail_field is configured" do
100
+ let(:config) do
101
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_field: :xyz)
102
+ end
103
+
104
+ it "creates an image tag from the given field" do
105
+ allow(document).to receive(:first).with(:xyz).and_return("http://example.com/some.jpg")
106
+ allow(view_context).to receive(:image_tag).with("http://example.com/some.jpg", {}).and_return('<img src="image.jpg">')
107
+ expect(view_context).to receive(:link_to_document).with(document, '<img src="image.jpg">', {})
108
+ subject
109
+ end
110
+
111
+ it "returns nil if no thumbnail is in the document" do
112
+ allow(document).to receive(:first).with(:xyz).and_return(nil)
113
+ expect(subject).to be_nil
114
+ end
115
+ end
116
+
117
+ context "when thumbnail_field is configured as an array of fields" do
118
+ let(:config) do
119
+ Blacklight::OpenStructWithHashAccess.new(thumbnail_field: [:rst, :uvw, :xyz])
120
+ end
121
+
122
+ context "and the field exists in the document" do
123
+ let(:document) { SolrDocument.new(xyz: 'http://example.com/some.jpg') }
124
+
125
+ it "creates an image tag from the given field" do
126
+ allow(view_context).to receive(:image_tag).with("http://example.com/some.jpg", {}).and_return('<img src="image.jpg">')
127
+ expect(view_context).to receive(:link_to_document).with(document, '<img src="image.jpg">', {}).and_return('<a><img></a>')
128
+ expect(presenter.thumbnail_tag).to eq '<a><img></a>'
129
+ end
130
+ end
131
+ end
132
+
133
+ context "when default_thumbnail is configured" do
134
+ context "and is a string" do
135
+ let(:config) do
136
+ Blacklight::OpenStructWithHashAccess.new(default_thumbnail: 'image.png')
137
+ end
138
+
139
+ it "creates an image tag for the given asset" do
140
+ allow(view_context).to receive(:image_tag).with('image.png', {}).and_return('<img src="image.jpg">')
141
+ expect(presenter.thumbnail_tag({}, suppress_link: true)).to eq '<img src="image.jpg">'
142
+ end
143
+ end
144
+
145
+ context "and is a symbol" do
146
+ let(:config) do
147
+ Blacklight::OpenStructWithHashAccess.new(default_thumbnail: :get_a_default_thumbnail)
148
+ end
149
+
150
+ it "calls that helper method" do
151
+ allow(view_context).to receive(:get_a_default_thumbnail).with(document, {}).and_return('<img src="image.jpg">')
152
+ expect(presenter.thumbnail_tag({}, suppress_link: true)).to eq '<img src="image.jpg">'
153
+ end
154
+ end
155
+
156
+ context "and is a proc" do
157
+ let(:config) do
158
+ Blacklight::OpenStructWithHashAccess.new(default_thumbnail: lambda { |_, _| '<img src="image.jpg">' })
159
+ end
160
+
161
+ it "calls that lambda" do
162
+ expect(presenter.thumbnail_tag({}, suppress_link: true)).to eq '<img src="image.jpg">'
163
+ end
164
+ end
165
+ end
166
+
167
+ context "when no thumbnail is configured" do
168
+ it { is_expected.to be_nil }
169
+ end
170
+ end
171
+ end