blacklight 6.19.1 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +40 -16
  5. data/.rubocop_todo.yml +478 -382
  6. data/.solr_wrapper.yml +9 -2
  7. data/.travis.yml +23 -25
  8. data/CONTRIBUTING.md +48 -0
  9. data/Gemfile +3 -2
  10. data/README.md +22 -5
  11. data/Rakefile +3 -2
  12. data/VERSION +1 -1
  13. data/Vagrantfile +2 -0
  14. data/app/assets/images/blacklight/list.svg +1 -0
  15. data/app/assets/images/blacklight/search.svg +1 -0
  16. data/app/assets/javascripts/blacklight/blacklight.js +483 -57
  17. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  18. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
  19. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  20. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  21. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  22. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  23. data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
  24. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  25. data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
  26. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  27. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  28. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  29. data/app/assets/stylesheets/blacklight/_pagination.scss +4 -13
  30. data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
  31. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  32. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  33. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  34. data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
  35. data/app/builders/blacklight/action_builder.rb +57 -0
  36. data/app/controllers/bookmarks_controller.rb +2 -2
  37. data/app/controllers/catalog_controller.rb +2 -2
  38. data/app/controllers/concerns/blacklight/base.rb +0 -33
  39. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -30
  40. data/app/controllers/concerns/blacklight/catalog.rb +256 -210
  41. data/app/controllers/concerns/blacklight/controller.rb +102 -124
  42. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  43. data/app/controllers/concerns/blacklight/facet.rb +10 -2
  44. data/app/controllers/concerns/blacklight/search_context.rb +11 -11
  45. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  46. data/app/controllers/concerns/blacklight/search_history.rb +1 -6
  47. data/app/controllers/concerns/blacklight/searchable.rb +17 -0
  48. data/app/controllers/concerns/blacklight/token_based_user.rb +5 -7
  49. data/app/helpers/blacklight/blacklight_helper_behavior.rb +36 -118
  50. data/app/helpers/blacklight/catalog_helper_behavior.rb +100 -89
  51. data/app/helpers/blacklight/component_helper_behavior.rb +21 -21
  52. data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -58
  53. data/app/helpers/blacklight/facets_helper_behavior.rb +56 -52
  54. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  55. data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
  56. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
  57. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
  58. data/app/helpers/blacklight/render_partials_helper_behavior.rb +207 -0
  59. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
  60. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  61. data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
  62. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  63. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  64. data/app/javascript/blacklight/checkbox_submit.js +134 -0
  65. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  66. data/app/javascript/blacklight/core.js +41 -0
  67. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  68. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
  69. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
  70. data/app/models/blacklight/facet_paginator.rb +3 -3
  71. data/app/models/blacklight/icon.rb +58 -0
  72. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  73. data/app/models/blacklight/suggest_search.rb +1 -1
  74. data/app/models/bookmark.rb +5 -10
  75. data/app/models/concerns/blacklight/configurable.rb +13 -13
  76. data/app/models/concerns/blacklight/document.rb +23 -39
  77. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  78. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  79. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  80. data/app/models/concerns/blacklight/document/email.rb +5 -5
  81. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  82. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  83. data/app/models/concerns/blacklight/document/sms.rb +3 -3
  84. data/app/models/concerns/blacklight/solr/document.rb +8 -8
  85. data/app/models/concerns/blacklight/user.rb +7 -6
  86. data/app/models/record_mailer.rb +8 -6
  87. data/app/models/search.rb +5 -7
  88. data/app/presenters/blacklight/document_presenter.rb +25 -140
  89. data/app/presenters/blacklight/field_presenter.rb +7 -5
  90. data/app/presenters/blacklight/index_presenter.rb +41 -70
  91. data/app/presenters/blacklight/json_presenter.rb +10 -14
  92. data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
  93. data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
  94. data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
  95. data/app/presenters/blacklight/rendering/join.rb +5 -3
  96. data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
  97. data/app/presenters/blacklight/rendering/microdata.rb +6 -3
  98. data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
  99. data/app/presenters/blacklight/rendering/terminator.rb +2 -0
  100. data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
  101. data/app/presenters/blacklight/show_presenter.rb +26 -72
  102. data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
  103. data/app/services/blacklight/document_factory.rb +13 -0
  104. data/app/services/blacklight/field_retriever.rb +26 -24
  105. data/app/services/blacklight/search_service.rb +153 -0
  106. data/app/values/blacklight/types.rb +31 -0
  107. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  108. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  109. data/app/views/bookmarks/_tools.html.erb +2 -2
  110. data/app/views/bookmarks/index.html.erb +12 -13
  111. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  112. data/app/views/catalog/_citation.html.erb +23 -18
  113. data/app/views/catalog/_constraints.html.erb +6 -7
  114. data/app/views/catalog/_constraints_element.html.erb +6 -6
  115. data/app/views/catalog/_did_you_mean.html.erb +1 -1
  116. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
  117. data/app/views/catalog/_document.html.erb +5 -3
  118. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
  119. data/app/views/catalog/_document_action.html.erb +2 -1
  120. data/app/views/catalog/_email_form.html.erb +8 -4
  121. data/app/views/catalog/_facet_group.html.erb +19 -0
  122. data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
  123. data/app/views/catalog/_facet_layout.html.erb +6 -8
  124. data/app/views/catalog/_facet_limit.html.erb +3 -2
  125. data/app/views/catalog/_facet_pagination.html.erb +8 -8
  126. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  127. data/app/views/catalog/_facets.html.erb +3 -21
  128. data/app/views/catalog/_field.json.jbuilder +10 -0
  129. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
  130. data/app/views/catalog/_home_text.html.erb +32 -36
  131. data/app/views/catalog/_index.html.erb +10 -0
  132. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
  133. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  134. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  135. data/app/views/catalog/_results_pagination.html.erb +2 -2
  136. data/app/views/catalog/_search_form.html.erb +12 -8
  137. data/app/views/catalog/_search_header.html.erb +0 -3
  138. data/app/views/catalog/_search_results.html.erb +6 -2
  139. data/app/views/catalog/_show.html.erb +8 -0
  140. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  141. data/app/views/catalog/_show_main_content.html.erb +4 -4
  142. data/app/views/catalog/_show_more_like_this.html.erb +1 -1
  143. data/app/views/catalog/_show_sidebar.html.erb +10 -8
  144. data/app/views/catalog/_show_tools.html.erb +10 -21
  145. data/app/views/catalog/_sms_form.html.erb +8 -4
  146. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  147. data/app/views/catalog/_sort_widget.html.erb +7 -7
  148. data/app/views/catalog/_thumbnail.html.erb +5 -0
  149. data/app/views/catalog/_view_type_group.html.erb +2 -2
  150. data/app/views/catalog/_zero_results.html.erb +1 -1
  151. data/app/views/catalog/citation.html.erb +1 -1
  152. data/app/views/catalog/citation.js.erb +1 -7
  153. data/app/views/catalog/email.html.erb +5 -3
  154. data/app/views/catalog/email_success.html.erb +12 -8
  155. data/app/views/catalog/facet.html.erb +10 -8
  156. data/app/views/catalog/facet.json.jbuilder +2 -0
  157. data/app/views/catalog/index.atom.builder +27 -29
  158. data/app/views/catalog/index.html.erb +9 -11
  159. data/app/views/catalog/index.json.jbuilder +84 -3
  160. data/app/views/catalog/index.rss.builder +8 -6
  161. data/app/views/catalog/opensearch.xml.builder +12 -10
  162. data/app/views/catalog/show.html.erb +11 -6
  163. data/app/views/catalog/show.json.jbuilder +21 -0
  164. data/app/views/catalog/sms.html.erb +3 -1
  165. data/app/views/catalog/sms_success.html.erb +12 -8
  166. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  167. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  168. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  169. data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
  170. data/app/views/kaminari/blacklight/_page.html.erb +5 -3
  171. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  172. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  173. data/app/views/layouts/blacklight.html.erb +14 -41
  174. data/app/views/layouts/blacklight/base.html.erb +35 -0
  175. data/app/views/layouts/catalog_result.html.erb +11 -0
  176. data/app/views/record_mailer/email_record.text.erb +6 -5
  177. data/app/views/search_history/index.html.erb +16 -21
  178. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +5 -3
  179. data/app/views/shared/_header_navbar.html.erb +8 -13
  180. data/app/views/shared/_modal.html.erb +6 -0
  181. data/app/views/shared/_user_util_links.html.erb +22 -0
  182. data/blacklight.gemspec +8 -11
  183. data/config/i18n-tasks.yml +17 -0
  184. data/config/locales/blacklight.de.yml +71 -82
  185. data/config/locales/blacklight.en.yml +15 -27
  186. data/config/locales/blacklight.es.yml +14 -26
  187. data/config/locales/blacklight.fr.yml +16 -33
  188. data/config/locales/blacklight.hu.yml +212 -0
  189. data/config/locales/blacklight.it.yml +15 -26
  190. data/config/locales/blacklight.nl.yml +212 -0
  191. data/config/locales/blacklight.pt-BR.yml +24 -29
  192. data/config/locales/blacklight.sq.yml +4 -28
  193. data/config/locales/blacklight.zh.yml +3 -25
  194. data/config/routes.rb +2 -10
  195. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  196. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  197. data/lib/blacklight.rb +6 -4
  198. data/lib/blacklight/abstract_repository.rb +9 -9
  199. data/lib/blacklight/configuration.rb +100 -88
  200. data/lib/blacklight/configuration/context.rb +12 -1
  201. data/lib/blacklight/configuration/facet_field.rb +16 -9
  202. data/lib/blacklight/configuration/field.rb +32 -3
  203. data/lib/blacklight/configuration/fields.rb +15 -17
  204. data/lib/blacklight/configuration/null_field.rb +2 -0
  205. data/lib/blacklight/configuration/search_field.rb +2 -2
  206. data/lib/blacklight/configuration/sort_field.rb +2 -2
  207. data/lib/blacklight/configuration/view_config.rb +4 -0
  208. data/lib/blacklight/engine.rb +10 -7
  209. data/lib/blacklight/exceptions.rb +4 -7
  210. data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
  211. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  212. data/lib/blacklight/parameters.rb +1 -1
  213. data/lib/blacklight/routes/exportable.rb +1 -3
  214. data/lib/blacklight/routes/searchable.rb +3 -3
  215. data/lib/blacklight/runtime_registry.rb +2 -0
  216. data/lib/blacklight/search_builder.rb +28 -35
  217. data/lib/blacklight/search_state.rb +10 -8
  218. data/lib/blacklight/solr/repository.rb +4 -3
  219. data/lib/blacklight/solr/request.rb +1 -1
  220. data/lib/blacklight/solr/response.rb +29 -30
  221. data/lib/blacklight/solr/response/facets.rb +29 -31
  222. data/lib/blacklight/solr/response/group.rb +3 -3
  223. data/lib/blacklight/solr/response/group_response.rb +1 -1
  224. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  225. data/lib/blacklight/solr/response/response.rb +2 -2
  226. data/lib/blacklight/solr/response/spelling.rb +4 -3
  227. data/lib/blacklight/solr/search_builder_behavior.rb +27 -31
  228. data/lib/blacklight/version.rb +1 -1
  229. data/lib/generators/blacklight/assets_generator.rb +12 -12
  230. data/lib/generators/blacklight/controller_generator.rb +4 -5
  231. data/lib/generators/blacklight/document_generator.rb +1 -1
  232. data/lib/generators/blacklight/install_generator.rb +15 -34
  233. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  234. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
  235. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  236. data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
  237. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  238. data/lib/generators/blacklight/templates/catalog_controller.rb +57 -50
  239. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
  240. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  241. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  242. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  243. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  244. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  245. data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
  246. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  247. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  248. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  249. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  250. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  251. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  252. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  253. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  254. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  255. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  256. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  257. data/lib/generators/blacklight/user_generator.rb +5 -6
  258. data/lib/railties/blacklight.rake +7 -6
  259. data/package-lock.json +2793 -0
  260. data/package.json +30 -0
  261. data/spec/controllers/alternate_controller_spec.rb +5 -4
  262. data/spec/controllers/application_controller_spec.rb +1 -5
  263. data/spec/controllers/blacklight/base_spec.rb +6 -3
  264. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  265. data/spec/controllers/blacklight/facet_spec.rb +1 -2
  266. data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
  267. data/spec/controllers/bookmarks_controller_spec.rb +17 -13
  268. data/spec/controllers/catalog_controller_spec.rb +332 -164
  269. data/spec/controllers/search_history_controller_spec.rb +6 -6
  270. data/spec/features/alternate_controller_spec.rb +4 -4
  271. data/spec/features/autocomplete_spec.rb +4 -2
  272. data/spec/features/bookmarks_spec.rb +10 -10
  273. data/spec/features/did_you_mean_spec.rb +7 -12
  274. data/spec/features/facets_spec.rb +16 -16
  275. data/spec/features/record_view_spec.rb +12 -18
  276. data/spec/features/search_context_spec.rb +6 -7
  277. data/spec/features/search_crawler_spec.rb +3 -5
  278. data/spec/features/search_filters_spec.rb +80 -80
  279. data/spec/features/search_formats_spec.rb +4 -5
  280. data/spec/features/search_history_spec.rb +6 -29
  281. data/spec/features/search_pagination_spec.rb +4 -2
  282. data/spec/features/search_results_spec.rb +14 -12
  283. data/spec/features/search_sort_spec.rb +2 -2
  284. data/spec/features/search_spec.rb +8 -9
  285. data/spec/features/sitelinks_search_box.rb +4 -4
  286. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  287. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -98
  288. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
  289. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
  290. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
  291. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
  292. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
  293. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
  294. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
  295. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
  296. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +61 -54
  297. data/spec/helpers/blacklight_helper_spec.rb +62 -151
  298. data/spec/helpers/catalog_helper_spec.rb +91 -98
  299. data/spec/i18n_spec.rb +18 -0
  300. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
  301. data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
  302. data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
  303. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  304. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
  305. data/spec/lib/blacklight/parameters_spec.rb +4 -2
  306. data/spec/lib/blacklight/search_state_spec.rb +53 -36
  307. data/spec/lib/blacklight_spec.rb +14 -15
  308. data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
  309. data/spec/models/blacklight/configurable_spec.rb +24 -27
  310. data/spec/models/blacklight/configuration/context_spec.rb +9 -10
  311. data/spec/models/blacklight/configuration_spec.rb +188 -165
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
  313. data/spec/models/blacklight/document/cache_key_spec.rb +10 -3
  314. data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
  315. data/spec/models/blacklight/document/email_spec.rb +10 -10
  316. data/spec/models/blacklight/document/sms_spec.rb +10 -10
  317. data/spec/models/blacklight/document_spec.rb +10 -22
  318. data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
  319. data/spec/models/blacklight/icon_spec.rb +58 -0
  320. data/spec/models/blacklight/search_builder_spec.rb +41 -26
  321. data/spec/models/blacklight/solr/document_spec.rb +224 -216
  322. data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
  323. data/spec/models/blacklight/solr/repository_spec.rb +50 -42
  324. data/spec/models/blacklight/solr/request_spec.rb +17 -18
  325. data/spec/models/blacklight/solr/response/facets_spec.rb +60 -60
  326. data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
  327. data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
  328. data/spec/models/blacklight/solr/response_spec.rb +69 -68
  329. data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
  330. data/spec/models/blacklight/suggest/response_spec.rb +2 -1
  331. data/spec/models/blacklight/suggest_search_spec.rb +4 -4
  332. data/spec/models/blacklight/user_spec.rb +9 -11
  333. data/spec/models/bookmark_spec.rb +7 -6
  334. data/spec/models/record_mailer_spec.rb +23 -21
  335. data/spec/models/search_spec.rb +19 -18
  336. data/spec/models/solr_document_spec.rb +33 -5
  337. data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
  338. data/spec/presenters/{index_presenter_spec.rb → blacklight/index_presenter_spec.rb} +25 -62
  339. data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
  340. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
  341. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
  342. data/spec/presenters/{show_presenter_spec.rb → blacklight/show_presenter_spec.rb} +47 -62
  343. data/spec/presenters/pipeline_spec.rb +18 -11
  344. data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
  345. data/spec/routing/catalog_routing_spec.rb +13 -15
  346. data/spec/services/blacklight/search_service_spec.rb +495 -0
  347. data/spec/spec_helper.rb +12 -24
  348. data/spec/support/features.rb +1 -1
  349. data/spec/support/features/session_helpers.rb +4 -4
  350. data/spec/test_app_templates/Gemfile.extra +2 -5
  351. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
  352. data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
  353. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
  354. data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
  355. data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
  356. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
  357. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  358. data/spec/views/catalog/_facets.html.erb_spec.rb +37 -16
  359. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
  360. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
  361. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
  362. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  363. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +7 -10
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
  366. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
  367. data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
  368. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
  369. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
  370. data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
  371. data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
  372. data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
  373. data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
  374. data/spec/views/catalog/index.html.erb_spec.rb +6 -8
  375. data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
  376. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  377. data/spec/views/catalog/show.html.erb_spec.rb +8 -8
  378. data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
  379. data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
  380. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
  381. data/tasks/blacklight.rake +6 -6
  382. data/template.demo.rb +4 -12
  383. metadata +174 -207
  384. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  385. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  386. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  387. data/app/assets/javascripts/blacklight/core.js +0 -30
  388. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  389. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  390. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  391. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  392. data/app/controllers/saved_searches_controller.rb +0 -4
  393. data/app/controllers/suggest_controller.rb +0 -4
  394. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  395. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  396. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  397. data/app/helpers/blacklight_url_helper.rb +0 -4
  398. data/app/helpers/component_helper.rb +0 -4
  399. data/app/helpers/facets_helper.rb +0 -4
  400. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  401. data/app/helpers/layout_helper.rb +0 -4
  402. data/app/helpers/render_constraints_helper.rb +0 -4
  403. data/app/helpers/search_history_constraints_helper.rb +0 -4
  404. data/app/helpers/suggest_helper.rb +0 -4
  405. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  406. data/app/views/_user_util_links.html.erb +0 -26
  407. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  408. data/app/views/catalog/_index_default.html.erb +0 -12
  409. data/app/views/catalog/_show_default.html.erb +0 -10
  410. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  411. data/app/views/saved_searches/index.html.erb +0 -32
  412. data/app/views/shared/_ajax_modal.html.erb +0 -6
  413. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  414. data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
  415. data/solr/conf/schema.xml +0 -629
  416. data/solr/conf/solrconfig.xml +0 -411
  417. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  418. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  419. data/spec/controllers/suggest_controller_spec.rb +0 -17
  420. data/spec/features/saved_searches_spec.rb +0 -47
  421. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  422. data/spec/lib/blacklight/utils_spec.rb +0 -167
  423. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  424. data/spec/presenters/document_presenter_spec.rb +0 -438
  425. data/spec/support/backport_test.rb +0 -14
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::HashAsHiddenFieldsHelperBehavior do
3
+ RSpec.describe Blacklight::HashAsHiddenFieldsHelperBehavior do
4
4
  let(:params) do
5
5
  { q: "query",
6
6
  search_field: "search_field",
7
7
  per_page: 10,
8
8
  page: 5,
9
9
  extra_arbitrary_key: "arbitrary_value",
10
- f: { field1: %w(a b), field2: ["z"] } }
10
+ f: { field1: %w[a b], field2: ["z"] } }
11
11
  end
12
12
  let(:generated) { helper.render_hash_as_hidden_fields(params) }
13
13
 
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::IconHelperBehavior do
4
+ describe '#blacklight_icon' do
5
+ it 'wraps the svg in a span with classes' do
6
+ expect(helper.blacklight_icon(:search))
7
+ .to have_css 'span.blacklight-icons svg'
8
+ end
9
+ end
10
+ end
@@ -1,31 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe LayoutHelper do
3
+ RSpec.describe Blacklight::LayoutHelperBehavior do
4
4
  describe '#show_content_classes' do
5
5
  it 'returns a string of classes' do
6
6
  expect(helper.show_content_classes).to be_an String
7
- expect(helper.show_content_classes).to eq 'col-md-9 col-sm-8 show-document'
7
+ expect(helper.show_content_classes).to eq 'col-md-9 show-document'
8
8
  end
9
9
  end
10
10
 
11
11
  describe '#show_sidebar_classes' do
12
12
  it 'returns a string of classes' do
13
13
  expect(helper.show_sidebar_classes).to be_an String
14
- expect(helper.show_sidebar_classes).to eq 'col-md-3 col-sm-4'
14
+ expect(helper.show_sidebar_classes).to eq 'page-sidebar col-md-3'
15
15
  end
16
16
  end
17
17
 
18
18
  describe '#main_content_classes' do
19
19
  it 'returns a string of classes' do
20
20
  expect(helper.main_content_classes).to be_an String
21
- expect(helper.main_content_classes).to eq 'col-md-9 col-sm-8'
21
+ expect(helper.main_content_classes).to eq 'col-md-9'
22
22
  end
23
23
  end
24
24
 
25
25
  describe '#sidebar_classes' do
26
26
  it 'returns a string of classes' do
27
27
  expect(helper.sidebar_classes).to be_an String
28
- expect(helper.sidebar_classes).to eq 'col-md-3 col-sm-4'
28
+ expect(helper.sidebar_classes).to eq 'page-sidebar col-md-3'
29
29
  end
30
30
  end
31
31
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe RenderConstraintsHelper do
4
-
3
+ RSpec.describe Blacklight::RenderConstraintsHelperBehavior do
5
4
  let(:config) do
6
5
  Blacklight::Configuration.new do |config|
7
6
  config.add_facet_field 'type'
@@ -17,9 +16,10 @@ describe RenderConstraintsHelper do
17
16
  end
18
17
 
19
18
  describe '#render_constraints_query' do
19
+ subject { helper.render_constraints_query(params) }
20
+
20
21
  let(:my_engine) { double("Engine") }
21
22
  let(:params) { ActionController::Parameters.new(q: 'foobar', f: { type: 'journal' }) }
22
- subject { helper.render_constraints_query(params) }
23
23
 
24
24
  it "has a link relative to the current url" do
25
25
  expect(subject).to have_selector "a[href='/?f%5Btype%5D=journal']"
@@ -35,6 +35,7 @@ describe RenderConstraintsHelper do
35
35
 
36
36
  context "with a route_set" do
37
37
  let(:params) { ActionController::Parameters.new(q: 'foobar', f: { type: 'journal' }, route_set: my_engine) }
38
+
38
39
  it "accepts an optional route set" do
39
40
  expect(my_engine).to receive(:url_for).and_return('/?f%5Btype%5D=journal')
40
41
  expect(subject).to have_selector "a[href='/?f%5Btype%5D=journal']"
@@ -43,18 +44,19 @@ describe RenderConstraintsHelper do
43
44
  end
44
45
 
45
46
  describe '#render_filter_element' do
47
+ subject { helper.render_filter_element('type', ['journal'], path) }
48
+
46
49
  before do
47
50
  allow(helper).to receive(:blacklight_config).and_return(config)
48
51
  expect(helper).to receive(:facet_field_label).with('type').and_return("Item Type")
49
52
  end
50
- subject { helper.render_filter_element('type', ['journal'], path) }
51
53
 
52
54
  let(:params) { ActionController::Parameters.new q: 'biz' }
53
55
  let(:path) { Blacklight::SearchState.new(params, config, controller) }
54
56
 
55
57
  it "has a link relative to the current url" do
56
58
  expect(subject).to have_link "Remove constraint Item Type: journal", href: "/catalog?q=biz"
57
- expect(subject).to have_selector ".filterName", text: 'Item Type'
59
+ expect(subject).to have_selector ".filter-name", text: 'Item Type'
58
60
  end
59
61
 
60
62
  context 'with string values' do
@@ -67,12 +69,14 @@ describe RenderConstraintsHelper do
67
69
  end
68
70
 
69
71
  describe "#render_constraints_filters" do
72
+ subject { helper.render_constraints_filters(params) }
73
+
70
74
  let(:params) { ActionController::Parameters.new f: { 'type' => [''] } }
75
+
71
76
  before do
72
77
  allow(helper).to receive(:blacklight_config).and_return(config)
73
78
  allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
74
79
  end
75
- subject { helper.render_constraints_filters(params) }
76
80
 
77
81
  it "renders nothing for empty facet limit param" do
78
82
  expect(subject).to be_blank
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::RenderPartialsHelperBehavior do
4
+ describe "#type_field_to_partial_name" do
5
+ subject { helper.send(:type_field_to_partial_name, document, value) }
6
+
7
+ let(:document) { double }
8
+
9
+ context "with default value" do
10
+ let(:value) { 'default' }
11
+
12
+ it { is_expected.to eq 'default' }
13
+ end
14
+
15
+ context "with spaces" do
16
+ let(:value) { 'one two three' }
17
+
18
+ it { is_expected.to eq 'one_two_three' }
19
+ end
20
+
21
+ context "with hyphens" do
22
+ let(:value) { 'one-two-three' }
23
+
24
+ it { is_expected.to eq 'one_two_three' }
25
+ end
26
+
27
+ context "an array" do
28
+ let(:value) { %w[one two three] }
29
+
30
+ it { is_expected.to eq 'one_two_three' }
31
+ end
32
+ end
33
+
34
+ describe "#render_document_partials" do
35
+ let(:doc) { double }
36
+
37
+ before do
38
+ allow(helper).to receive_messages(document_partial_path_templates: [])
39
+ allow(helper).to receive_messages(document_index_view_type: 'index_header')
40
+ end
41
+
42
+ it "gets the document format from document_partial_name" do
43
+ allow(helper).to receive(:document_partial_name).with(doc, :xyz)
44
+ helper.render_document_partial(doc, :xyz)
45
+ end
46
+ end
47
+
48
+ describe "#document_partial_name" do
49
+ let(:blacklight_config) { Blacklight::Configuration.new }
50
+
51
+ before do
52
+ allow(helper).to receive_messages(blacklight_config: blacklight_config)
53
+ end
54
+
55
+ context "with a solr document with empty fields" do
56
+ let(:document) { SolrDocument.new }
57
+
58
+ it "is the default value" do
59
+ expect(helper.document_partial_name(document)).to eq 'default'
60
+ end
61
+ end
62
+
63
+ context "with a solr document with the display type field set" do
64
+ let(:document) { SolrDocument.new 'my_field' => 'xyz' }
65
+
66
+ before do
67
+ blacklight_config.show.display_type_field = 'my_field'
68
+ end
69
+
70
+ it "uses the value in the configured display type field" do
71
+ expect(helper.document_partial_name(document)).to eq 'xyz'
72
+ end
73
+ it "uses the value in the configured display type field if the action-specific field is empty" do
74
+ expect(helper.document_partial_name(document, :some_action)).to eq 'xyz'
75
+ end
76
+ end
77
+
78
+ context "with a solr doucment with an action-specific field set" do
79
+ let(:document) { SolrDocument.new 'my_field' => 'xyz', 'other_field' => 'abc' }
80
+
81
+ before do
82
+ blacklight_config.show.media_display_type_field = 'my_field'
83
+ blacklight_config.show.metadata_display_type_field = 'other_field'
84
+ end
85
+
86
+ it "uses the value in the action-specific fields" do
87
+ expect(helper.document_partial_name(document, :media)).to eq 'xyz'
88
+ expect(helper.document_partial_name(document, :metadata)).to eq 'abc'
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,21 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe SearchHistoryConstraintsHelper do
4
-
3
+ RSpec.describe Blacklight::SearchHistoryConstraintsHelperBehavior do
5
4
  before(:all) do
6
5
  @config = Blacklight::Configuration.new do |config|
7
- config.add_search_field 'default_search_field', :label => 'Default'
6
+ config.add_search_field 'default_search_field', label: 'Default'
8
7
 
9
- config.add_facet_field 'some_facet', :label => 'Some'
10
- config.add_facet_field 'other_facet', :label => 'Other'
8
+ config.add_facet_field 'some_facet', label: 'Some'
9
+ config.add_facet_field 'other_facet', label: 'Other'
11
10
  config.add_facet_field 'i18n_facet'
12
11
 
13
- I18n.backend.store_translations(:en, blacklight: {search: {fields: {facet: {i18n_facet: 'English facet label'}}}})
14
- I18n.backend.store_translations(:de, blacklight: {search: {fields: {facet: {i18n_facet: 'German facet label'}}}})
12
+ I18n.backend.store_translations(:en, blacklight: { search: { fields: { facet: { i18n_facet: 'English facet label' } } } })
13
+ I18n.backend.store_translations(:de, blacklight: { search: { fields: { facet: { i18n_facet: 'German facet label' } } } })
15
14
  end
16
15
  end
17
16
 
18
- before(:each) do
17
+ before do
19
18
  allow(helper).to receive(:blacklight_config).and_return(@config)
20
19
  end
21
20
 
@@ -23,32 +22,32 @@ describe SearchHistoryConstraintsHelper do
23
22
  describe "render_search_to_s_element" do
24
23
  it "renders basic element" do
25
24
  response = helper.render_search_to_s_element("key", "value")
26
- expect(response).to have_selector("span.constraint") do |span|
27
- expect(span).to have_selector("span.filterName", :content => "key:")
28
- expect(span).to have_selector("span.filterValue", :content => "value")
25
+ expect(response).to have_selector("span.constraint") do |span|
26
+ expect(span).to have_selector("span.filter-name", content: "key:")
27
+ expect(span).to have_selector("span.filter-value", content: "value")
29
28
  end
30
29
  expect(response).to be_html_safe
31
30
  end
32
31
  it "escapes them that need escaping" do
33
32
  response = helper.render_search_to_s_element("key>", "value>")
34
- expect(response).to have_selector("span.constraint") do |span|
35
- expect(span).to have_selector("span.filterName") do |s2|
33
+ expect(response).to have_selector("span.constraint") do |span|
34
+ expect(span).to have_selector("span.filter-name") do |s2|
36
35
  # Note: nokogiri's gettext will unescape the inner html
37
- # which seems to be what rspecs "contains" method calls on
36
+ # which seems to be what rspecs "contains" method calls on
38
37
  # text nodes - thus the to_s inserted below.
39
38
  expect(s2).to match(/key>:/)
40
39
  end
41
- expect(span).to have_selector("span.filterValue") do |s3|
40
+ expect(span).to have_selector("span.filter-value") do |s3|
42
41
  expect(s3).to match(/value>/)
43
42
  end
44
43
  end
45
44
  expect(response).to be_html_safe
46
45
  end
47
46
  it "does not escape with options set thus" do
48
- response = helper.render_search_to_s_element("key>", "value>", :escape_key => false, :escape_value => false)
47
+ response = helper.render_search_to_s_element("key>", "value>", escape_key: false, escape_value: false)
49
48
  expect(response).to have_selector("span.constraint") do |span|
50
- expect(span).to have_selector("span.filterName", :content => "key>:")
51
- expect(span).to have_selector("span.filterValue", :content => "value>")
49
+ expect(span).to have_selector("span.filter-name", content: "key>:")
50
+ expect(span).to have_selector("span.filter-value", content: "value>")
52
51
  end
53
52
  expect(response).to be_html_safe
54
53
  end
@@ -56,30 +55,31 @@ describe SearchHistoryConstraintsHelper do
56
55
 
57
56
  describe "render_search_to_s" do
58
57
  before do
59
- @params = {:q => "history", :f => {"some_facet" => ["value1", "value1"], "other_facet" => ["other1"]}}
58
+ @params = { q: "history", f: { "some_facet" => %w[value1 value1], "other_facet" => ["other1"] } }
60
59
  end
60
+
61
61
  it "calls lesser methods" do
62
62
  allow(helper).to receive(:blacklight_config).and_return(@config)
63
- allow(helper).to receive(:default_search_field).and_return(Blacklight::Configuration::SearchField.new(:key => 'default_search_field', :display_label => 'Default'))
63
+ allow(helper).to receive(:default_search_field).and_return(Blacklight::Configuration::SearchField.new(key: 'default_search_field', display_label: 'Default'))
64
64
  allow(helper).to receive(:label_for_search_field).with(nil).and_return('')
65
65
  # API hooks expect this to be so
66
66
  response = helper.render_search_to_s(@params)
67
67
 
68
- expect(response).to include( helper.render_search_to_s_q(@params))
69
- expect(response).to include( helper.render_search_to_s_filters(@params))
68
+ expect(response).to include(helper.render_search_to_s_q(@params))
69
+ expect(response).to include(helper.render_search_to_s_filters(@params))
70
70
  expect(response).to be_html_safe
71
71
  end
72
72
  end
73
-
73
+
74
74
  describe "render_search_to_s_filters" do
75
75
  it "renders a constraint for a selected facet in the config" do
76
- response = helper.render_search_to_s_filters(:f => {"some_facet" => ["value1", "value2"]})
77
- expect(response).to eq("<span class=\"constraint\"><span class=\"filterName\">Some:</span><span class=\"filterValues\"><span class=\"filterValue\">value1</span><span class=\"filterSeparator\"> and </span><span class=\"filterValue\">value2</span></span></span>")
76
+ response = helper.render_search_to_s_filters(f: { "some_facet" => %w[value1 value2] })
77
+ expect(response).to eq("<span class=\"constraint\"><span class=\"filter-name\">Some:</span><span class=\"filter-values\"><span class=\"filter-value\">value1</span><span class=\"filter-separator\"> and </span><span class=\"filter-value\">value2</span></span></span>")
78
78
  end
79
79
 
80
80
  it "renders a constraint for a selected facet not in the config" do
81
- response = helper.render_search_to_s_filters(:f => {"undefined_facet" => ["value1", "value2"]})
82
- expect(response).to eq("<span class=\"constraint\"><span class=\"filterName\">#{'undefined_facet'.humanize}:</span><span class=\"filterValues\"><span class=\"filterValue\">value1</span><span class=\"filterSeparator\"> and </span><span class=\"filterValue\">value2</span></span></span>")
81
+ response = helper.render_search_to_s_filters(f: { "undefined_facet" => %w[value1 value2] })
82
+ expect(response).to eq("<span class=\"constraint\"><span class=\"filter-name\">#{'undefined_facet'.titleize}:</span><span class=\"filter-values\"><span class=\"filter-value\">value1</span><span class=\"filter-separator\"> and </span><span class=\"filter-value\">value2</span></span></span>")
83
83
  end
84
84
 
85
85
  context 'with I18n translations for selected facet' do
@@ -92,14 +92,13 @@ describe SearchHistoryConstraintsHelper do
92
92
  end
93
93
 
94
94
  it 'renders the correct I18n label for a selected facet with I18n translations' do
95
- {en: 'English facet label', de: 'German facet label'}.each do |locale, label|
95
+ { en: 'English facet label', de: 'German facet label' }.each do |locale, label|
96
96
  I18n.locale = locale
97
- response = helper.render_search_to_s_filters(f: {'i18n_facet' => ['value1', 'value2']})
97
+ response = helper.render_search_to_s_filters(f: { 'i18n_facet' => %w[value1 value2] })
98
98
  expect(response).to include(label)
99
99
  end
100
100
  end
101
101
  end
102
102
  end
103
103
  end
104
-
105
104
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe SuggestHelper do
3
+ RSpec.describe Blacklight::SuggestHelperBehavior do
4
4
  before do
5
5
  allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
6
+ expect(Deprecation).to receive(:warn)
6
7
  end
8
+
7
9
  describe '#autocomplete_enabled?' do
8
10
  describe 'with autocomplete config' do
9
11
  let(:blacklight_config) do
@@ -12,10 +14,12 @@ describe SuggestHelper do
12
14
  config.autocomplete_path = 'suggest'
13
15
  end
14
16
  end
17
+
15
18
  it 'is enabled' do
16
19
  expect(helper.autocomplete_enabled?).to be true
17
20
  end
18
21
  end
22
+
19
23
  describe 'without disabled config' do
20
24
  let(:blacklight_config) do
21
25
  Blacklight::Configuration.new.configure do |config|
@@ -23,19 +27,22 @@ describe SuggestHelper do
23
27
  config.autocomplete_path = 'suggest'
24
28
  end
25
29
  end
30
+
26
31
  it 'is disabled' do
27
32
  expect(helper.autocomplete_enabled?).to be false
28
33
  end
29
34
  end
35
+
30
36
  describe 'without path config' do
31
37
  let(:blacklight_config) do
32
38
  Blacklight::Configuration.new.configure do |config|
33
39
  config.autocomplete_enabled = true
34
40
  end
35
41
  end
42
+
36
43
  it 'is disabled' do
37
44
  expect(helper.autocomplete_enabled?).to be false
38
45
  end
39
46
  end
40
47
  end
41
- end
48
+ end
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe BlacklightUrlHelper do
4
-
3
+ RSpec.describe Blacklight::UrlHelperBehavior do
5
4
  let(:blacklight_config) do
6
5
  Blacklight::Configuration.new.configure do |config|
7
- config.index.title_field = 'title_display'
6
+ config.index.title_field = 'title_tsim'
8
7
  config.index.display_type_field = 'format'
9
8
  end
10
9
  end
@@ -37,7 +36,7 @@ describe BlacklightUrlHelper do
37
36
 
38
37
  it "allows for custom show routes" do
39
38
  helper.blacklight_config.show.route = { controller: 'catalog' }
40
- expect(helper.url_for_document(doc)).to eq({controller: 'catalog', action: :show, id: doc})
39
+ expect(helper.url_for_document(doc)).to eq(controller: 'catalog', action: :show, id: doc)
41
40
  end
42
41
 
43
42
  context "within bookmarks" do
@@ -53,7 +52,7 @@ describe BlacklightUrlHelper do
53
52
 
54
53
  before do
55
54
  helper.blacklight_config.show.route = { controller: :current }
56
- allow(helper).to receive(:params).and_return(parameter_class.new controller: 'alternate')
55
+ allow(helper).to receive(:params).and_return(parameter_class.new(controller: 'alternate'))
57
56
  end
58
57
 
59
58
  it "supports the :current controller configuration" do
@@ -70,27 +69,26 @@ describe BlacklightUrlHelper do
70
69
  end
71
70
 
72
71
  describe "link_back_to_catalog" do
73
- let(:query_params) {{:q => "query", :f => "facets", :controller=>'catalog'}}
74
- let(:bookmarks_query_params) {{ :controller=>'bookmarks'}}
72
+ let(:query_params) { { q: "query", f: "facets", controller: 'catalog' } }
73
+ let(:bookmarks_query_params) { { controller: 'bookmarks' } }
75
74
 
76
75
  it "builds a link tag to catalog using session[:search] for query params" do
77
- allow(helper).to receive(:current_search_session).and_return double(:query_params => query_params)
76
+ allow(helper).to receive(:current_search_session).and_return double(query_params: query_params)
78
77
  tag = helper.link_back_to_catalog
79
78
  expect(tag).to match /q=query/
80
79
  expect(tag).to match /f=facets/
81
- expect(tag).to_not match /page=/
82
- expect(tag).to_not match /per_page=/
80
+ expect(tag).not_to match /page=/
81
+ expect(tag).not_to match /per_page=/
83
82
  end
84
83
 
85
84
  it "builds a link tag to bookmarks using session[:search] for query params" do
86
- allow(helper).to receive(:current_search_session).and_return double(:query_params => bookmarks_query_params)
85
+ allow(helper).to receive(:current_search_session).and_return double(query_params: bookmarks_query_params)
87
86
  tag = helper.link_back_to_catalog
88
87
  expect(tag).to match /Back to Bookmarks/
89
- expect(tag).to match /\/bookmarks/
88
+ expect(tag).to match %r{/bookmarks}
90
89
  end
91
90
 
92
91
  context "with a search context" do
93
-
94
92
  it "uses the current search session counter and per page information to construct the appropriate pagination context" do
95
93
  allow(helper).to receive_messages(current_search_session: double(query_params: query_params))
96
94
  allow(helper).to receive_messages(search_session: { 'per_page' => 15, 'counter' => 31 })
@@ -104,38 +102,35 @@ describe BlacklightUrlHelper do
104
102
  allow(helper).to receive_messages(search_session: { 'per_page' => 10, 'counter' => 31 })
105
103
  tag = helper.link_back_to_catalog
106
104
  expect(tag).to match /page=4/
107
- expect(tag).to_not match /per_page=/
105
+ expect(tag).not_to match /per_page=/
108
106
  end
109
107
  end
110
108
 
111
109
  context "without current search context" do
110
+ subject { helper.link_back_to_catalog }
111
+
112
112
  before do
113
- if Rails.version >= '5.0.0'
114
- controller.request.assign_parameters(Rails.application.routes, 'catalog', 'show', { id: '123' }, '/catalog/123', [:controller, :action, :id])
115
- else
116
- controller.request.assign_parameters(Rails.application.routes, 'catalog', 'show', id: '123')
117
- end
113
+ controller.request.assign_parameters(Rails.application.routes, 'catalog', 'show', { id: '123' }, '/catalog/123', [:controller, :action, :id])
118
114
  allow(helper).to receive_messages(current_search_session: nil)
119
115
  end
120
116
 
121
- subject { helper.link_back_to_catalog }
122
-
123
117
  it "links to the catalog" do
124
118
  expect(subject).to eq '<a href="/catalog">Back to Search</a>'
125
119
  end
126
120
  end
127
121
 
128
122
  context "when an alternate scope is passed in" do
129
- let(:my_engine) { double("Engine") }
130
123
  subject(:tag) { helper.link_back_to_catalog(route_set: my_engine) }
131
124
 
125
+ let(:my_engine) { double("Engine") }
126
+
132
127
  before do
133
- allow(helper).to receive(:current_search_session).and_return double(:query_params => query_params)
128
+ allow(helper).to receive(:current_search_session).and_return double(query_params: query_params)
134
129
  end
135
130
 
136
131
  it "calls url_for on the engine scope" do
137
132
  expect(my_engine).to receive(:url_for)
138
- .with(q:"query", f: "facets", controller: "catalog")
133
+ .with(q: "query", f: "facets", controller: "catalog")
139
134
  .and_return('link-url')
140
135
  expect(tag).to match /Back to Search/
141
136
  expect(tag).to match /link-url/
@@ -146,6 +141,7 @@ describe BlacklightUrlHelper do
146
141
  describe "link_to_previous_document" do
147
142
  context "when the argument is nil" do
148
143
  subject { helper.link_to_previous_document(nil) }
144
+
149
145
  it { is_expected.to eq '<span class="previous">&laquo; Previous</span>' }
150
146
  end
151
147
  end
@@ -156,7 +152,7 @@ describe BlacklightUrlHelper do
156
152
  allow(helper).to receive_messages(params: parameter_class.new)
157
153
  tag = helper.link_to_query(query)
158
154
  expect(tag).to match /q=#{query}/
159
- expect(tag).to match />#{query}<\/a>/
155
+ expect(tag).to match %r{>#{query}</a>}
160
156
  end
161
157
 
162
158
  it "builds a link tag to catalog using query string and other existing params" do
@@ -172,7 +168,7 @@ describe BlacklightUrlHelper do
172
168
  allow(helper).to receive_messages(params: parameter_class.new(page: "2", qt: "author_search"))
173
169
  tag = helper.link_to_query(query)
174
170
  expect(tag).to match /qt=author_search/
175
- expect(tag).to_not match /page/
171
+ expect(tag).not_to match /page/
176
172
  end
177
173
 
178
174
  it "is html_safe" do
@@ -185,47 +181,55 @@ describe BlacklightUrlHelper do
185
181
 
186
182
  describe "start_over_path" do
187
183
  it 'is the catalog path with the current view type' do
188
- allow(blacklight_config).to receive(:view) { { list: nil, abc: nil} }
189
- allow(helper).to receive_messages(:blacklight_config => blacklight_config)
190
- expect(helper.start_over_path(:view => 'abc')).to eq search_catalog_url(:view => 'abc')
184
+ allow(blacklight_config).to receive(:view).and_return(list: nil, abc: nil)
185
+ allow(helper).to receive_messages(blacklight_config: blacklight_config)
186
+ expect(helper.start_over_path(view: 'abc')).to eq search_catalog_url(view: 'abc')
191
187
  end
192
188
 
193
189
  it 'does not include the current view type if it is the default' do
194
- allow(blacklight_config).to receive(:view) { { list: nil, asdf: nil} }
195
- allow(helper).to receive_messages(:blacklight_config => blacklight_config)
196
- expect(helper.start_over_path(:view => 'list')).to eq search_catalog_url
190
+ allow(blacklight_config).to receive(:view).and_return(list: nil, asdf: nil)
191
+ allow(helper).to receive_messages(blacklight_config: blacklight_config)
192
+ expect(helper.start_over_path(view: 'list')).to eq search_catalog_url
197
193
  end
198
194
  end
199
195
 
200
196
  describe "link_to_document" do
201
- let(:title_display) { '654321' }
197
+ let(:title_tsim) { '654321' }
202
198
  let(:id) { '123456' }
203
- let(:data) { { 'id' => id, 'title_display' => [title_display] } }
199
+ let(:data) { { 'id' => id, 'title_tsim' => [title_tsim] } }
204
200
  let(:document) { SolrDocument.new(data) }
201
+
205
202
  before do
206
203
  allow(controller).to receive(:action_name).and_return('index')
204
+ allow(helper.main_app).to receive(:track_test_path).and_return('tracking url')
205
+ allow(helper.main_app).to receive(:respond_to?).with('track_test_path').and_return(true)
207
206
  end
208
207
 
209
208
  it "consists of the document title wrapped in a <a>" do
210
- expect(helper.link_to_document(document, :title_display)).to have_selector("a", :text => '654321', :count => 1)
209
+ expect(Deprecation).to receive(:warn)
210
+ expect(helper.link_to_document(document, :title_tsim)).to have_selector("a", text: '654321', count: 1)
211
211
  end
212
212
 
213
213
  it "accepts and returns a string label" do
214
- expect(helper.link_to_document(document, String.new('title_display'))).to have_selector("a", :text => 'title_display', :count => 1)
214
+ expect(helper.link_to_document(document, 'This is the title')).to have_selector("a", text: 'This is the title', count: 1)
215
215
  end
216
216
 
217
217
  it "accepts and returns a Proc" do
218
- expect(helper.link_to_document(document, Proc.new { |doc, opts| doc[:id] + ": " + doc.first(:title_display) })).to have_selector("a", :text => '123456: 654321', :count => 1)
218
+ expect(Deprecation).to receive(:warn).twice
219
+ expect(helper.link_to_document(document, proc { |doc, _opts| doc[:id] + ": " + doc.first(:title_tsim) })).to have_selector("a", text: '123456: 654321', count: 1)
219
220
  end
220
221
 
221
222
  context 'when label is missing' do
222
223
  let(:data) { { 'id' => id } }
224
+
223
225
  it "returns id" do
224
- expect(helper.link_to_document(document, :title_display)).to have_selector("a", :text => '123456', :count => 1)
226
+ expect(Deprecation).to receive(:warn)
227
+ expect(helper.link_to_document(document, :title_tsim)).to have_selector("a", text: '123456', count: 1)
225
228
  end
226
229
 
227
230
  it "is html safe" do
228
- expect(helper.link_to_document(document, :title_display)).to be_html_safe
231
+ expect(Deprecation).to receive(:warn)
232
+ expect(helper.link_to_document(document, :title_tsim)).to be_html_safe
229
233
  end
230
234
 
231
235
  it "passes on the title attribute to the link_to_with_data method" do
@@ -233,11 +237,12 @@ describe BlacklightUrlHelper do
233
237
  end
234
238
 
235
239
  it "doesn't add an erroneous title attribute if one isn't provided" do
236
- expect(helper.link_to_document(document, "Some crazy long label...")).to_not match(/title=/)
240
+ expect(helper.link_to_document(document, "Some crazy long label...")).not_to match(/title=/)
237
241
  end
238
242
 
239
243
  context "with an integer id" do
240
- let(:id) { 123456 }
244
+ let(:id) { 123_456 }
245
+
241
246
  it "works" do
242
247
  expect(helper.link_to_document(document)).to have_selector("a")
243
248
  end
@@ -245,31 +250,27 @@ describe BlacklightUrlHelper do
245
250
  end
246
251
 
247
252
  it "converts the counter parameter into a data- attribute" do
248
- allow(helper).to receive(:track_test_path).with(hash_including(id: have_attributes(id: '123456'), counter: 5)).and_return('tracking url')
249
-
250
- expect(helper.link_to_document(document, :title_display, counter: 5)).to include 'data-context-href="tracking url"'
253
+ expect(Deprecation).to receive(:warn)
254
+ expect(helper.link_to_document(document, :title_tsim, counter: 5)).to include 'data-context-href="tracking url"'
255
+ expect(helper.main_app).to have_received(:track_test_path).with(hash_including(id: have_attributes(id: '123456'), counter: 5))
251
256
  end
252
257
 
253
258
  it "includes the data- attributes from the options" do
254
- link = helper.link_to_document document, { data: { x: 1 } }
259
+ link = helper.link_to_document document, data: { x: 1 }
255
260
  expect(link).to have_selector '[data-x]'
256
261
  end
257
262
 
258
263
  it 'adds a controller-specific tracking attribute' do
259
- expect(helper).to receive(:track_test_path).and_return('/asdf')
260
- link = helper.link_to_document document, { data: { x: 1 } }
264
+ expect(helper.main_app).to receive(:track_test_path).and_return('/asdf')
265
+ link = helper.link_to_document document, data: { x: 1 }
261
266
 
262
267
  expect(link).to have_selector '[data-context-href="/asdf"]'
263
268
  end
264
-
265
- it 'adds a global tracking attribute' do
266
- link = helper.link_to_document document, { data: { x: 1 } }
267
- expect(link).to have_selector '[data-context-href="/catalog/123456/track"]'
268
- end
269
269
  end
270
270
 
271
271
  describe "link_to_previous_search" do
272
272
  let(:params) { {} }
273
+
273
274
  it "links to the given search parameters" do
274
275
  allow(helper).to receive(:render_search_to_s).with(params).and_return "link text"
275
276
  expect(helper.link_to_previous_search({})).to eq helper.link_to("link text", helper.search_action_path)
@@ -286,14 +287,20 @@ describe BlacklightUrlHelper do
286
287
 
287
288
  describe "#session_tracking_path" do
288
289
  let(:document) { SolrDocument.new(id: 1) }
290
+
289
291
  it "determines the correct route for the document class" do
290
- allow(helper).to receive(:track_test_path).with(id: have_attributes(id: 1)).and_return('x')
292
+ allow(helper.main_app).to receive(:track_test_path).with(id: have_attributes(id: 1)).and_return('x')
291
293
  expect(helper.session_tracking_path(document)).to eq 'x'
292
294
  end
293
295
 
294
296
  it "passes through tracking parameters" do
295
- allow(helper).to receive(:track_test_path).with(id: have_attributes(id: 1), x: 1).and_return('x')
297
+ allow(helper.main_app).to receive(:track_test_path).with(id: have_attributes(id: 1), x: 1).and_return('x')
296
298
  expect(helper.session_tracking_path(document, x: 1)).to eq 'x'
297
299
  end
300
+
301
+ it "uses the track_search_session configuration to determine whether to track the search session" do
302
+ blacklight_config.track_search_session = false
303
+ expect(helper.session_tracking_path(document, x: 1)).to eq nil
304
+ end
298
305
  end
299
306
  end