blacklight-spotlight 2.13.0 → 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/blacklight/add_circle.svg +1 -0
  3. data/app/assets/images/blacklight/arrow_back_ios.svg +1 -0
  4. data/app/assets/images/blacklight/arrow_forward_ios.svg +1 -0
  5. data/app/assets/images/blacklight/check.svg +1 -0
  6. data/app/assets/images/blacklight/check_circle.svg +1 -0
  7. data/app/assets/images/blacklight/chevron_right.svg +1 -0
  8. data/app/assets/images/blacklight/custom_fullscreen.svg +1 -0
  9. data/app/assets/images/blacklight/edit.svg +1 -0
  10. data/app/assets/images/blacklight/error.svg +1 -0
  11. data/app/assets/images/blacklight/info.svg +1 -0
  12. data/app/assets/images/blacklight/remove_circle.svg +1 -0
  13. data/app/assets/images/blacklight/remove_circle_outline.svg +1 -0
  14. data/app/assets/images/blacklight/resize_small.svg +1 -0
  15. data/app/assets/images/blacklight/warning.svg +1 -0
  16. data/app/assets/javascripts/spotlight/admin/block_mixins/autocompleteable.js +1 -1
  17. data/app/assets/javascripts/spotlight/admin/block_mixins/plustextable.js +2 -2
  18. data/app/assets/javascripts/spotlight/admin/blocks/browse_block.js +1 -1
  19. data/app/assets/javascripts/spotlight/admin/blocks/pages_block.js +1 -1
  20. data/app/assets/javascripts/spotlight/admin/blocks/resources_block.js +7 -7
  21. data/app/assets/javascripts/spotlight/admin/blocks/solr_documents_base_block.js +3 -3
  22. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +7 -7
  23. data/app/assets/javascripts/spotlight/admin/catalog_edit.js +2 -2
  24. data/app/assets/javascripts/spotlight/admin/multi_image_selector.js +2 -2
  25. data/app/assets/javascripts/spotlight/admin/reindex_monitor.js +1 -1
  26. data/app/assets/javascripts/spotlight/admin/search_typeahead.js +2 -2
  27. data/app/assets/javascripts/spotlight/admin/sir-trevor/block_controls.js +1 -1
  28. data/app/assets/javascripts/spotlight/admin/users.js +1 -1
  29. data/app/assets/javascripts/spotlight/user/index.js +1 -0
  30. data/app/assets/javascripts/spotlight/user/zpr_links.js.erb +6 -6
  31. data/app/assets/stylesheets/spotlight/_blacklight_configuration.scss +44 -4
  32. data/app/assets/stylesheets/spotlight/_blacklight_overrides.scss +4 -8
  33. data/app/assets/stylesheets/spotlight/_bootstrap_overrides.scss +31 -14
  34. data/app/assets/stylesheets/spotlight/_browse.scss +16 -13
  35. data/app/assets/stylesheets/spotlight/_catalog.scss +13 -7
  36. data/app/assets/stylesheets/spotlight/_collapse_toggle.scss +10 -14
  37. data/app/assets/stylesheets/spotlight/_curation.scss +34 -32
  38. data/app/assets/stylesheets/spotlight/_exhibit_admin.scss +4 -29
  39. data/app/assets/stylesheets/spotlight/_exhibits_index.scss +16 -14
  40. data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +22 -20
  41. data/app/assets/stylesheets/spotlight/_footer.scss +2 -2
  42. data/app/assets/stylesheets/spotlight/_header.scss +18 -39
  43. data/app/assets/stylesheets/spotlight/_item_text_block.scss +1 -24
  44. data/app/assets/stylesheets/spotlight/_mixins.scss +3 -8
  45. data/app/assets/stylesheets/spotlight/_multi_up_item_grid.scss +1 -1
  46. data/app/assets/stylesheets/spotlight/_nestable.scss +1 -2
  47. data/app/assets/stylesheets/spotlight/_pages.scss +33 -54
  48. data/app/assets/stylesheets/spotlight/_report_a_problem.scss +7 -1
  49. data/app/assets/stylesheets/spotlight/_sir-trevor_overrides.scss +9 -9
  50. data/app/assets/stylesheets/spotlight/_slideshow_block.scss +13 -11
  51. data/app/assets/stylesheets/spotlight/_spotlight.scss +0 -1
  52. data/app/assets/stylesheets/spotlight/_translations.scss +12 -12
  53. data/app/assets/stylesheets/spotlight/_variables.scss +14 -15
  54. data/app/assets/stylesheets/spotlight/_variables_bootstrap.scss +7 -7
  55. data/app/assets/stylesheets/spotlight/typeahead.css +1 -1
  56. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +3 -2
  57. data/app/controllers/concerns/spotlight/catalog.rb +1 -1
  58. data/app/controllers/concerns/spotlight/controller.rb +3 -3
  59. data/app/controllers/concerns/spotlight/search_helper.rb +23 -0
  60. data/app/controllers/spotlight/browse_controller.rb +18 -4
  61. data/app/controllers/spotlight/catalog_controller.rb +13 -17
  62. data/app/controllers/spotlight/dashboards_controller.rb +5 -1
  63. data/app/controllers/spotlight/exhibits_controller.rb +1 -1
  64. data/app/controllers/spotlight/home_pages_controller.rb +32 -3
  65. data/app/controllers/spotlight/pages_controller.rb +19 -1
  66. data/app/controllers/spotlight/search_configurations_controller.rb +3 -3
  67. data/app/controllers/spotlight/searches_controller.rb +4 -1
  68. data/app/controllers/spotlight/solr_controller.rb +1 -2
  69. data/app/helpers/spotlight/application_helper.rb +1 -1
  70. data/app/helpers/spotlight/browse_helper.rb +1 -1
  71. data/app/helpers/spotlight/crud_link_helpers.rb +19 -0
  72. data/app/helpers/spotlight/pages_helper.rb +1 -1
  73. data/app/mailers/spotlight/contact_mailer.rb +1 -1
  74. data/app/models/concerns/spotlight/access_controls_enforcement_search_builder.rb +2 -2
  75. data/app/models/concerns/spotlight/exhibit_analytics.rb +1 -3
  76. data/app/models/concerns/spotlight/exhibit_documents.rb +1 -1
  77. data/app/models/sir_trevor_rails/blocks/solr_documents_block.rb +11 -3
  78. data/app/models/spotlight/ability.rb +1 -1
  79. data/app/models/spotlight/analytics/ga.rb +25 -35
  80. data/app/models/spotlight/analytics/ga_model.rb +29 -0
  81. data/app/models/spotlight/blacklight_configuration.rb +5 -3
  82. data/app/models/spotlight/contact_form.rb +11 -4
  83. data/app/models/spotlight/exhibit.rb +0 -4
  84. data/app/models/spotlight/field_metadata.rb +3 -9
  85. data/app/models/spotlight/page.rb +0 -3
  86. data/app/models/spotlight/page_configurations.rb +1 -1
  87. data/app/models/spotlight/role.rb +0 -4
  88. data/app/models/spotlight/search.rb +3 -17
  89. data/app/presenters/spotlight/iiif_manifest_presenter.rb +5 -1
  90. data/app/serializers/spotlight/exhibit_export_serializer.rb +69 -28
  91. data/app/serializers/spotlight/page_representer.rb +1 -1
  92. data/app/views/catalog/_save_search.html.erb +6 -4
  93. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  94. data/app/views/layouts/spotlight/base.html.erb +48 -0
  95. data/app/views/layouts/spotlight/spotlight.html.erb +16 -54
  96. data/app/views/shared/_about_navbar.html.erb +2 -2
  97. data/app/views/shared/_browse_navbar.html.erb +2 -2
  98. data/app/views/shared/_curated_features_navbar.html.erb +4 -4
  99. data/app/views/shared/_exhibit_navbar.html.erb +5 -5
  100. data/app/views/shared/_header_navbar.html.erb +8 -13
  101. data/app/views/shared/_masthead.html.erb +1 -1
  102. data/app/views/shared/_site_sidebar.html.erb +6 -6
  103. data/app/views/shared/_user_util_links.html.erb +47 -0
  104. data/app/views/spotlight/about_pages/_contact.html.erb +3 -4
  105. data/app/views/spotlight/about_pages/_contacts.html.erb +1 -1
  106. data/app/views/spotlight/about_pages/_sidebar.html.erb +3 -5
  107. data/app/views/spotlight/about_pages/index.html.erb +7 -6
  108. data/app/views/spotlight/admin_users/index.html.erb +78 -79
  109. data/app/views/spotlight/appearances/edit.html.erb +26 -23
  110. data/app/views/spotlight/browse/_search.html.erb +2 -2
  111. data/app/views/spotlight/browse/_search_box.html.erb +9 -6
  112. data/app/views/spotlight/browse/_search_title.html.erb +1 -1
  113. data/app/views/spotlight/browse/_sort_and_per_page.html.erb +3 -5
  114. data/app/views/spotlight/browse/index.html.erb +4 -6
  115. data/app/views/spotlight/browse/show.html.erb +1 -1
  116. data/app/views/spotlight/catalog/_admin_header.html.erb +2 -2
  117. data/app/views/spotlight/catalog/_curation_mode_toggle_default.html.erb +1 -1
  118. data/app/views/spotlight/catalog/_document_admin_table.html.erb +4 -4
  119. data/app/views/spotlight/catalog/_edit_sidecar.html.erb +1 -1
  120. data/app/views/spotlight/catalog/_index_compact_default.html.erb +1 -2
  121. data/app/views/spotlight/catalog/_reindex_progress_panel.html.erb +3 -5
  122. data/app/views/spotlight/catalog/admin.html.erb +12 -12
  123. data/app/views/spotlight/contact_forms/new.html.erb +1 -3
  124. data/app/views/spotlight/contacts/edit.html.erb +6 -5
  125. data/app/views/spotlight/contacts/new.html.erb +6 -5
  126. data/app/views/spotlight/custom_fields/edit.html.erb +6 -5
  127. data/app/views/spotlight/custom_fields/new.html.erb +6 -5
  128. data/app/views/spotlight/dashboards/_analytics.html.erb +3 -3
  129. data/app/views/spotlight/dashboards/_page.html.erb +6 -6
  130. data/app/views/spotlight/dashboards/_page_activity.html.erb +5 -5
  131. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +12 -12
  132. data/app/views/spotlight/dashboards/analytics.html.erb +11 -11
  133. data/app/views/spotlight/dashboards/show.html.erb +13 -13
  134. data/app/views/spotlight/exhibits/_confirmation_status.html.erb +3 -4
  135. data/app/views/spotlight/exhibits/_contact.html.erb +3 -3
  136. data/app/views/spotlight/exhibits/_delete.html.erb +7 -5
  137. data/app/views/spotlight/exhibits/_exhibit_card.html.erb +2 -2
  138. data/app/views/spotlight/exhibits/_exhibit_card_front.html.erb +2 -2
  139. data/app/views/spotlight/exhibits/_form.html.erb +5 -5
  140. data/app/views/spotlight/exhibits/_languages.html.erb +2 -2
  141. data/app/views/spotlight/exhibits/_new_exhibit_form.html.erb +0 -2
  142. data/app/views/spotlight/exhibits/edit.html.erb +43 -42
  143. data/app/views/spotlight/exhibits/index.html.erb +40 -41
  144. data/app/views/spotlight/exhibits/new.html.erb +4 -5
  145. data/app/views/spotlight/feature_pages/_header.html.erb +12 -14
  146. data/app/views/spotlight/feature_pages/_sidebar.html.erb +2 -4
  147. data/app/views/spotlight/featured_images/_form.html.erb +4 -4
  148. data/app/views/spotlight/filters/_form.html.erb +1 -1
  149. data/app/views/spotlight/home_pages/_edit_page_link.html.erb +1 -1
  150. data/app/views/spotlight/home_pages/_sidebar.html.erb +1 -3
  151. data/app/views/spotlight/metadata_configurations/_metadata_field.html.erb +4 -4
  152. data/app/views/spotlight/metadata_configurations/edit.html.erb +5 -4
  153. data/app/views/spotlight/pages/_edit_page_link.html.erb +1 -1
  154. data/app/views/spotlight/pages/_form.html.erb +7 -7
  155. data/app/views/spotlight/pages/_order_pages.html.erb +2 -2
  156. data/app/views/spotlight/pages/_page.html.erb +11 -11
  157. data/app/views/spotlight/pages/_view_type_group.html.erb +1 -1
  158. data/app/views/spotlight/pages/edit.html.erb +2 -4
  159. data/app/views/spotlight/pages/index.html.erb +5 -4
  160. data/app/views/spotlight/pages/show.html.erb +5 -4
  161. data/app/views/spotlight/resources/_external_resources_form.html.erb +2 -2
  162. data/app/views/spotlight/resources/_form.html.erb +1 -1
  163. data/app/views/spotlight/resources/csv_upload/_form.html.erb +1 -1
  164. data/app/views/spotlight/resources/iiif/_form.html.erb +1 -1
  165. data/app/views/spotlight/resources/json_upload/_form.html.erb +1 -1
  166. data/app/views/spotlight/resources/new.html.erb +25 -23
  167. data/app/views/spotlight/resources/upload/_form.html.erb +2 -2
  168. data/app/views/spotlight/roles/index.html.erb +60 -57
  169. data/app/views/spotlight/search_configurations/_facet_metadata.html.erb +3 -1
  170. data/app/views/spotlight/search_configurations/_facets.html.erb +19 -18
  171. data/app/views/spotlight/search_configurations/_search_fields.html.erb +6 -6
  172. data/app/views/spotlight/search_configurations/_sort.html.erb +6 -6
  173. data/app/views/spotlight/search_configurations/edit.html.erb +42 -40
  174. data/app/views/spotlight/searches/_form.html.erb +15 -10
  175. data/app/views/spotlight/searches/_search.html.erb +29 -22
  176. data/app/views/spotlight/searches/edit.html.erb +6 -5
  177. data/app/views/spotlight/searches/index.html.erb +32 -31
  178. data/app/views/spotlight/shared/_configuration_sidebar.html.erb +6 -6
  179. data/app/views/spotlight/shared/_curation_sidebar.html.erb +8 -9
  180. data/app/views/spotlight/shared/_exhibit_sidebar.html.erb +6 -8
  181. data/app/views/spotlight/shared/_locale_picker.html.erb +3 -3
  182. data/app/views/spotlight/shared/_report_a_problem.html.erb +2 -2
  183. data/app/views/spotlight/sir_trevor/blocks/_browse_block.html.erb +1 -1
  184. data/app/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb +1 -1
  185. data/app/views/spotlight/sir_trevor/blocks/_oembed_block.html.erb +2 -2
  186. data/app/views/spotlight/sir_trevor/blocks/_search_results_block.html.erb +2 -2
  187. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb +8 -8
  188. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb +8 -8
  189. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb +3 -4
  190. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +32 -31
  191. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb +5 -5
  192. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +8 -10
  193. data/app/views/spotlight/sites/edit.html.erb +31 -34
  194. data/app/views/spotlight/sites/edit_exhibits.html.erb +28 -29
  195. data/app/views/spotlight/tags/index.html.erb +25 -24
  196. data/app/views/spotlight/translations/_browse_categories.html.erb +20 -15
  197. data/app/views/spotlight/translations/_general.html.erb +69 -91
  198. data/app/views/spotlight/translations/_metadata.html.erb +18 -14
  199. data/app/views/spotlight/translations/_page.html.erb +2 -2
  200. data/app/views/spotlight/translations/_search_fields.html.erb +26 -20
  201. data/app/views/spotlight/translations/edit.html.erb +16 -14
  202. data/config/locales/spotlight.en.yml +3 -0
  203. data/config/routes.rb +1 -1
  204. data/lib/generators/spotlight/install_generator.rb +2 -2
  205. data/lib/generators/spotlight/scaffold_resource_generator.rb +1 -1
  206. data/lib/generators/spotlight/templates/spotlight.scss +0 -1
  207. data/lib/spotlight/engine.rb +12 -0
  208. data/lib/spotlight/version.rb +1 -1
  209. data/spec/controllers/application_controller_spec.rb +2 -2
  210. data/spec/controllers/spotlight/browse_controller_spec.rb +1 -1
  211. data/spec/controllers/spotlight/catalog_controller_spec.rb +13 -13
  212. data/spec/controllers/spotlight/dashboards_controller_spec.rb +2 -1
  213. data/spec/controllers/spotlight/search_configurations_controller_spec.rb +1 -1
  214. data/spec/examples.txt +50 -1489
  215. data/spec/features/add_items_spec.rb +2 -2
  216. data/spec/features/browse_category_admin_spec.rb +3 -3
  217. data/spec/features/browse_category_spec.rb +3 -3
  218. data/spec/features/catalog_spec.rb +1 -1
  219. data/spec/features/exhibits/translation_editing_spec.rb +21 -21
  220. data/spec/features/feature_page_spec.rb +1 -1
  221. data/spec/features/home_page_spec.rb +3 -3
  222. data/spec/features/javascript/blocks/featured_browse_categories_block_spec.rb +1 -1
  223. data/spec/features/javascript/blocks/link_to_search_block_spec.rb +1 -1
  224. data/spec/features/javascript/blocks/search_result_block_spec.rb +9 -4
  225. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +23 -15
  226. data/spec/features/javascript/blocks/solr_documents_carousel_block_spec.rb +29 -0
  227. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +2 -2
  228. data/spec/features/javascript/edit_in_place_spec.rb +1 -0
  229. data/spec/features/javascript/feature_page_admin_spec.rb +11 -11
  230. data/spec/features/javascript/locale_selector_spec.rb +0 -1
  231. data/spec/features/javascript/multi_image_select_spec.rb +3 -3
  232. data/spec/features/javascript/reindex_monitor_spec.rb +2 -2
  233. data/spec/features/javascript/roles_admin_spec.rb +2 -2
  234. data/spec/features/javascript/search_context_spec.rb +4 -6
  235. data/spec/features/site_users_management_spec.rb +1 -1
  236. data/spec/helpers/spotlight/application_helper_spec.rb +2 -1
  237. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +19 -0
  238. data/spec/helpers/spotlight/languages_helper_spec.rb +1 -0
  239. data/spec/lib/spotlight/controller_spec.rb +2 -2
  240. data/spec/models/sir_trevor_rails/blocks/solr_documents_block_spec.rb +38 -0
  241. data/spec/models/spotlight/access_controls_enforcement_search_builder_spec.rb +7 -6
  242. data/spec/models/spotlight/analytics/ga_spec.rb +16 -1
  243. data/spec/models/spotlight/contact_form_spec.rb +37 -5
  244. data/spec/models/spotlight/exhibit_spec.rb +8 -4
  245. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +4 -0
  246. data/spec/routing/spotlight/exhibit_catalog_spec.rb +15 -11
  247. data/spec/serializers/spotlight/exhibit_export_serializer_spec.rb +60 -0
  248. data/spec/test_app_templates/Gemfile.extra +3 -0
  249. data/spec/test_app_templates/catalog_controller.rb +4 -0
  250. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -2
  251. data/spec/views/shared/_header_navbar.html.erb_spec.rb +1 -1
  252. data/spec/views/shared/_masthead.html.erb_spec.rb +1 -1
  253. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +1 -1
  254. data/spec/views/spotlight/about_pages/_sidebar.html.erb_spec.rb +2 -2
  255. data/spec/views/spotlight/about_pages/index.html.erb_spec.rb +2 -2
  256. data/spec/views/spotlight/browse/_search.html.erb_spec.rb +1 -1
  257. data/spec/views/spotlight/browse/_sort_and_per_page.html.erb_spec.rb +2 -13
  258. data/spec/views/spotlight/browse/show.html.erb_spec.rb +2 -2
  259. data/spec/views/spotlight/catalog/admin.html.erb_spec.rb +1 -1
  260. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +5 -5
  261. data/spec/views/spotlight/dashboards/analytics.html.erb_spec.rb +1 -1
  262. data/spec/views/spotlight/exhibits/_exhibit_card_front.html.erb_spec.rb +2 -2
  263. data/spec/views/spotlight/exhibits/edit.html.erb_spec.rb +1 -1
  264. data/spec/views/spotlight/exhibits/index.html.erb_spec.rb +1 -1
  265. data/spec/views/spotlight/feature_pages/_sidebar.html.erb_spec.rb +7 -7
  266. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -2
  267. data/spec/views/spotlight/metadata_configurations/edit.html.erb_spec.rb +2 -1
  268. data/spec/views/spotlight/pages/index.html.erb_spec.rb +2 -2
  269. data/spec/views/spotlight/pages/show.html.erb_spec.rb +3 -3
  270. data/spec/views/spotlight/searches/_search.html.erb_spec.rb +1 -1
  271. data/spec/views/spotlight/searches/edit.html.erb_spec.rb +3 -3
  272. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +3 -3
  273. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +1 -1
  274. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +2 -2
  275. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +1 -1
  276. data/spec/views/spotlight/translations/_page.html.erb_spec.rb +2 -2
  277. data/vendor/assets/javascripts/bootstrap-tagsinput.js +1 -1
  278. data/vendor/assets/stylesheets/sir-trevor/_variables.scss +15 -8
  279. metadata +31 -28
  280. data/app/assets/stylesheets/spotlight/_navbar.scss +0 -48
  281. data/app/views/_user_util_links.html.erb +0 -50
  282. data/app/views/shared/_modal.html.erb +0 -6
@@ -31,6 +31,7 @@ describe 'Edit in place', type: :feature, js: true do
31
31
  end
32
32
 
33
33
  it 'rejects blank values' do
34
+ skip('Throws Selenium::WebDriver::Error::ElementNotInteractableError')
34
35
  skip('Passes locally, but soooo flakey on Travis.') if ENV['CI']
35
36
  visit spotlight.exhibit_dashboard_path(exhibit)
36
37
 
@@ -40,10 +40,10 @@ feature 'Feature Pages Adminstration', js: true do
40
40
  within("[data-id='#{page1.id}']") do
41
41
  within('h3') do
42
42
  expect(page).to have_content('FeaturePage1')
43
- expect(page).to have_css('input', visible: false)
43
+ expect(page).to have_css('.title-field', visible: false)
44
44
  click_link('FeaturePage1')
45
- expect(page).to have_css('input', visible: true)
46
- find('input').set('NewFeaturePage1')
45
+ expect(page).to have_css('.title-field', visible: true)
46
+ find('.title-field').set('NewFeaturePage1')
47
47
  end
48
48
  end
49
49
  click_button('Save changes')
@@ -85,10 +85,10 @@ feature 'Feature Pages Adminstration', js: true do
85
85
  within("[data-id='#{page1.id}']") do
86
86
  within('h3') do
87
87
  expect(page).to have_content('FeaturePage1')
88
- expect(page).to have_css('input', visible: false)
88
+ expect(page).to have_css('.title-field', visible: false)
89
89
  click_link('FeaturePage1')
90
- expect(page).to have_css('input', visible: true)
91
- find('input').set('NewFancyTitle')
90
+ expect(page).to have_css('.title-field', visible: true)
91
+ find('.title-field').set('NewFancyTitle')
92
92
  end
93
93
  end
94
94
 
@@ -120,19 +120,19 @@ feature 'Feature Pages Adminstration', js: true do
120
120
  click_link 'Feature pages'
121
121
 
122
122
  within('.home_page') do
123
- within('h3.panel-title') do
123
+ within('h3.card-title') do
124
124
  expect(page).to have_content(exhibit.home_page.title)
125
- expect(page).to have_css('input', visible: false)
125
+ expect(page).to have_css('.title-field', visible: false)
126
126
  click_link(exhibit.home_page.title)
127
- expect(page).to have_css('input', visible: true)
128
- find('input').set('New Home Page Title')
127
+ expect(page).to have_css('.title-field', visible: true)
128
+ find('.title-field').set('New Home Page Title')
129
129
  end
130
130
  end
131
131
 
132
132
  click_button('Save changes')
133
133
 
134
134
  within('.home_page') do
135
- within('h3.panel-title') do
135
+ within('h3.card-title') do
136
136
  expect(page).to have_content('New Home Page Title')
137
137
  end
138
138
  end
@@ -12,7 +12,6 @@ RSpec.describe 'Locale Selector', js: true do
12
12
  I18n.fallbacks[:es] = [:es, I18n.default_locale]
13
13
  end
14
14
 
15
-
16
15
  context 'with an anonymous user' do
17
16
  let(:user) { FactoryBot.create(:exhibit_visitor) }
18
17
 
@@ -13,9 +13,9 @@ describe 'Multi image selector', type: :feature, js: true, versioning: true, def
13
13
 
14
14
  fill_in_typeahead_field with: 'xd327cm9378'
15
15
 
16
- expect(page).to have_selector '.panel'
16
+ expect(page).to have_selector '.card'
17
17
 
18
- within('.panel') do
18
+ within('.card') do
19
19
  expect(page).to have_content(/Image \d of \d/)
20
20
  expect(page).to have_link 'Change'
21
21
  end
@@ -29,7 +29,7 @@ describe 'Multi image selector', type: :feature, js: true, versioning: true, def
29
29
 
30
30
  click_link('Edit')
31
31
 
32
- within('.panel') do
32
+ within('.card') do
33
33
  expect(page).to have_content(/Image \d of \d/)
34
34
  find('a', text: 'Change').click
35
35
  end
@@ -14,8 +14,8 @@ feature 'Reindex Monitor', js: true, default_max_wait_time: 10 do
14
14
  end
15
15
 
16
16
  it 'is rendered on the item admin page' do
17
- expect(page).to have_css('.panel.index-status', visible: true)
18
- within('.panel.index-status') do
17
+ expect(page).to have_css('.card.index-status', visible: true)
18
+ within('.card.index-status') do
19
19
  expect(page).to have_css('p', text: /Began reindexing a total of \d+ items/)
20
20
  expect(page).to have_css('p', text: /Reindexed \d+ of \d+ items/)
21
21
  end
@@ -23,7 +23,7 @@ describe 'Roles Admin', type: :feature, js: true do
23
23
  end
24
24
 
25
25
  it 'persists invited users to the exhibits user list' do
26
- expect(page).not_to have_css('.label-warning pending-label', text: 'pending', visible: true)
26
+ expect(page).not_to have_css('.badge-warning pending-label', text: 'pending', visible: true)
27
27
 
28
28
  click_link 'Add a new user'
29
29
  fill_in 'User key', with: 'user@example.com'
@@ -31,7 +31,7 @@ describe 'Roles Admin', type: :feature, js: true do
31
31
 
32
32
  within('tr.invite-pending') do
33
33
  expect(page).to have_css('td', text: 'user@example.com')
34
- expect(page).to have_css('.label-warning.pending-label', text: 'pending', visible: true)
34
+ expect(page).to have_css('.badge-warning.pending-label', text: 'pending', visible: true)
35
35
  end
36
36
  end
37
37
  end
@@ -32,12 +32,11 @@ feature 'Search contexts' do
32
32
 
33
33
  # verify that the item + image widget is displaying an image from the document.
34
34
  within(:css, '.items-block') do
35
- expect(page).to have_css('.thumbnail')
36
- expect(page).to have_css('.thumbnail a img')
35
+ expect(page).to have_css('.img-thumbnail')
37
36
  expect(page).not_to have_css('.title')
38
37
  end
39
38
 
40
- find('.thumbnail a').click
39
+ find('.items-block a').click
41
40
 
42
41
  expect(page).to have_selector '.breadcrumb a', text: 'Home'
43
42
  end
@@ -62,12 +61,11 @@ feature 'Search contexts' do
62
61
 
63
62
  # verify that the item + image widget is displaying an image from the document.
64
63
  within(:css, '.items-block') do
65
- expect(page).to have_css('.thumbnail')
66
- expect(page).to have_css('.thumbnail a img')
64
+ expect(page).to have_css('.img-thumbnail')
67
65
  expect(page).not_to have_css('.title')
68
66
  end
69
67
 
70
- find('.thumbnail a').click
68
+ find('.items-block a').click
71
69
 
72
70
  expect(page).to have_selector '.breadcrumb a', text: 'Home'
73
71
  expect(page).to have_link 'FeaturePage1', href: spotlight.exhibit_feature_page_path(exhibit, feature_page)
@@ -45,7 +45,7 @@ describe 'Site users management', js: true do
45
45
  expect(page).to have_css(:td, text: 'not-an-admin@example.com')
46
46
 
47
47
  expect(page).to have_css(:a, text: 'Remove from admin role', count: 4)
48
- within(all('table tbody tr').last) do
48
+ within(all('table tbody tr:not([data-edit-for])').last) do
49
49
  click_link 'Remove from admin role'
50
50
  end
51
51
 
@@ -110,7 +110,8 @@ describe Spotlight::ApplicationHelper, type: :helper do
110
110
  before do
111
111
  allow(helper).to receive_messages(current_exhibit: current_exhibit)
112
112
  allow(helper).to receive_messages(blacklight_config: Blacklight::Configuration.new do |config|
113
- config.index.display_type_field = :some_field
113
+ config.show.display_type_field = :some_field # Blacklight 7.4+
114
+ config.index.display_type_field = :some_field # pre Blacklight 7.4
114
115
  end)
115
116
  end
116
117
 
@@ -128,4 +128,23 @@ describe Spotlight::CrudLinkHelpers, type: :helper do
128
128
  expect(helper.send(:action_default_value, :my_thing, :custom_action))
129
129
  end
130
130
  end
131
+
132
+ describe '#nav_link' do
133
+ it 'renders a bootstrap nav link' do
134
+ rendered = Capybara.string(helper.nav_link('Some link', root_url))
135
+ expect(rendered).to have_css('li').and(have_link('Some link', href: root_url))
136
+ end
137
+
138
+ it 'renders a bootstrap nav link using the block style' do
139
+ rendered = Capybara.string(helper.nav_link(root_url) { 'Some link' })
140
+ expect(rendered).to have_css('li').and(have_link('Some link', href: root_url))
141
+ end
142
+
143
+ it 'adds an active class if it is the current page' do
144
+ allow(helper).to receive(:current_page?).with(root_url).and_return(true)
145
+
146
+ rendered = Capybara.string(helper.nav_link('Some link', root_url))
147
+ expect(rendered).to have_css('.nav-link.active')
148
+ end
149
+ end
131
150
  end
@@ -8,6 +8,7 @@ describe Spotlight::LanguagesHelper, type: :helper do
8
8
  expect(helper.add_exhibit_language_dropdown_options).to match_array(
9
9
  [
10
10
  ['Albanian', :sq],
11
+ ['Arabic', :ar],
11
12
  ['Chinese', :zh],
12
13
  ['Dutch', :nl],
13
14
  ['French', :fr],
@@ -86,7 +86,7 @@ describe Spotlight::Controller do
86
86
  end
87
87
  end
88
88
 
89
- describe '#exhibit_search_facet_url' do
89
+ describe '#exhibit_search_facet_path' do
90
90
  let(:exhibit) { FactoryBot.create(:exhibit) }
91
91
  let(:params) { { action: 'index', q: 'xyz' } }
92
92
 
@@ -96,7 +96,7 @@ describe Spotlight::Controller do
96
96
 
97
97
  it 'adds the current exhibit context to the route' do
98
98
  expect(subject.spotlight).to receive(:facet_exhibit_catalog_url).with(exhibit, id: 'some_field', q: 'xyz')
99
- subject.exhibit_search_facet_url(id: 'some_field')
99
+ subject.exhibit_search_facet_path(id: 'some_field')
100
100
  end
101
101
  end
102
102
  end
@@ -17,4 +17,42 @@ describe SirTrevorRails::Blocks::SolrDocumentsBlock do
17
17
  expect(subject.text).to be_blank
18
18
  end
19
19
  end
20
+
21
+ describe '#primary_caption?' do
22
+ it 'is false if the primary caption field is not configured' do
23
+ block_data['show-primary-caption'] = 'true'
24
+ expect(subject.primary_caption?).to eq false
25
+ end
26
+
27
+ it 'is false if the field is configured not to show' do
28
+ block_data['primary-caption-field'] = 'some_field'
29
+ block_data['show-primary-caption'] = 'false'
30
+ expect(subject.primary_caption?).to eq false
31
+ end
32
+
33
+ it 'is true if the field is configured to show' do
34
+ block_data['primary-caption-field'] = 'some_field'
35
+ block_data['show-primary-caption'] = 'true'
36
+ expect(subject.primary_caption?).to eq true
37
+ end
38
+ end
39
+
40
+ describe '#secondary_caption?' do
41
+ it 'is false if the secondary caption field is not configured' do
42
+ block_data['show-secondary-caption'] = 'true'
43
+ expect(subject.secondary_caption?).to eq false
44
+ end
45
+
46
+ it 'is false if the field is configured not to show' do
47
+ block_data['secondary-caption-field'] = 'some_field'
48
+ block_data['show-secondary-caption'] = 'false'
49
+ expect(subject.secondary_caption?).to eq false
50
+ end
51
+
52
+ it 'is true if the field is configured to show' do
53
+ block_data['secondary-caption-field'] = 'some_field'
54
+ block_data['show-secondary-caption'] = 'true'
55
+ expect(subject.secondary_caption?).to eq true
56
+ end
57
+ end
20
58
  end
@@ -17,19 +17,20 @@ describe Spotlight::AccessControlsEnforcementSearchBuilder do
17
17
 
18
18
  subject { MockSearchBuilder.new blacklight_params, scope }
19
19
  let(:exhibit) { FactoryBot.create(:exhibit) }
20
- let(:scope) { double(current_exhibit: exhibit) }
20
+ let(:scope) { double(current_exhibit: exhibit, context: { current_ability: current_ability }) }
21
+ let(:current_ability) { instance_double(Ability) }
21
22
  let(:solr_request) { Blacklight::Solr::Request.new }
22
23
  let(:blacklight_params) { Hash.new }
23
24
 
24
25
  describe '#apply_permissive_visibility_filter' do
25
26
  it 'allows curators to view everything' do
26
- allow(scope).to receive(:can?).and_return(true)
27
+ allow(current_ability).to receive(:can?).and_return(true)
27
28
  subject.apply_permissive_visibility_filter(solr_request)
28
29
  expect(solr_request.to_hash).to be_empty
29
30
  end
30
31
 
31
32
  it 'restricts searches to public items' do
32
- allow(scope).to receive(:can?).and_return(false)
33
+ allow(current_ability).to receive(:can?).and_return(false)
33
34
 
34
35
  subject.apply_permissive_visibility_filter(solr_request)
35
36
  expect(solr_request).to include :fq
@@ -37,7 +38,7 @@ describe Spotlight::AccessControlsEnforcementSearchBuilder do
37
38
  end
38
39
 
39
40
  it 'does not filter resources to just those created by the exhibit' do
40
- allow(subject).to receive(:can?).and_return(true)
41
+ allow(current_ability).to receive(:can?).and_return(true)
41
42
  subject.apply_permissive_visibility_filter(solr_request)
42
43
  expect(solr_request).to include :fq
43
44
  expect(solr_request[:fq]).not_to include "{!term f=spotlight_exhibit_slug_#{exhibit.slug}_bsi}true"
@@ -51,7 +52,7 @@ describe Spotlight::AccessControlsEnforcementSearchBuilder do
51
52
  end
52
53
 
53
54
  it 'filters resources to just those created by the exhibit' do
54
- allow(scope).to receive(:can?).and_return(true)
55
+ allow(current_ability).to receive(:can?).and_return(true)
55
56
 
56
57
  subject.apply_exhibit_resources_filter(solr_request)
57
58
 
@@ -68,7 +69,7 @@ describe Spotlight::AccessControlsEnforcementSearchBuilder do
68
69
  end
69
70
 
70
71
  it 'filters resources to just those identified by the exhibit filter' do
71
- allow(scope).to receive(:can?).and_return(true)
72
+ allow(current_ability).to receive(:can?).and_return(true)
72
73
 
73
74
  subject.apply_exhibit_resources_filter(solr_request)
74
75
 
@@ -2,6 +2,21 @@
2
2
 
3
3
  describe Spotlight::Analytics::Ga do
4
4
  it 'does not be enabled without configuration' do
5
- expect(described_class.enabled?).to be_falsey
5
+ expect(subject.enabled?).to be_falsey
6
+ end
7
+
8
+ describe '#site' do
9
+ it 'selects the correct profile based on the web property id' do
10
+ allow(Spotlight::Engine.config).to receive_messages(ga_web_property_id: 'bar')
11
+ allow(subject).to receive_message_chain(
12
+ :user,
13
+ :accounts,
14
+ :first,
15
+ profiles: [
16
+ double('profile1', web_property_id: 'foo'), double('profile2', web_property_id: 'bar')
17
+ ]
18
+ )
19
+ expect(subject.site.web_property_id).to eq 'bar'
20
+ end
6
21
  end
7
22
  end
@@ -1,10 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe Spotlight::ContactForm do
4
- subject { described_class.new(name: 'Root', email: 'user@example.com').tap { |c| c.current_exhibit = exhibit } }
4
+ subject { described_class.new(name: 'Root', email: 'user@example.com') }
5
5
  let(:exhibit) { FactoryBot.build_stubbed(:exhibit) }
6
6
  let(:honeypot_field_name) { Spotlight::Engine.config.spambot_honeypot_email_field }
7
7
 
8
+ describe 'the email subject' do
9
+ it 'has a subject' do
10
+ expect(subject.headers[:subject]).to eq 'Blacklight exhibit feedback'
11
+ end
12
+
13
+ context 'with a current exhibit' do
14
+ before do
15
+ subject.current_exhibit = exhibit
16
+ exhibit.title = 'My exhibit'
17
+ end
18
+
19
+ it 'uses the site title in the email' do
20
+ expect(subject.headers[:subject]).to eq 'My exhibit exhibit feedback'
21
+ end
22
+ end
23
+
24
+ context 'with a site title' do
25
+ before do
26
+ Spotlight::Site.instance.update(title: 'Exhibits')
27
+ end
28
+
29
+ it 'uses the site title in the email' do
30
+ expect(subject.headers[:subject]).to eq 'Exhibits exhibit feedback'
31
+ end
32
+ end
33
+ end
34
+
8
35
  context 'with a site-wide contact email' do
9
36
  before { allow(Spotlight::Engine.config).to receive_messages default_contact_email: 'root@localhost' }
10
37
 
@@ -13,7 +40,10 @@ describe Spotlight::ContactForm do
13
40
  end
14
41
 
15
42
  context 'with exhibit-specific contacts' do
16
- before { exhibit.contact_emails.create(email: 'curator@example.com', confirmed_at: Time.zone.now) }
43
+ before do
44
+ subject.current_exhibit = exhibit
45
+ exhibit.contact_emails.create(email: 'curator@example.com', confirmed_at: Time.zone.now)
46
+ end
17
47
 
18
48
  it 'appends exhibit-specific contacts as cc recipients' do
19
49
  expect(subject.headers[:cc]).to eq 'curator@example.com'
@@ -22,9 +52,11 @@ describe Spotlight::ContactForm do
22
52
  end
23
53
 
24
54
  context 'with exhibit-specific contacts' do
25
- before { exhibit.contact_emails.create(email: 'curator@example.com', confirmed_at: Time.zone.now) }
26
-
27
- before { exhibit.contact_emails.create(email: 'addl_curator@example.com', confirmed_at: Time.zone.now) }
55
+ before do
56
+ subject.current_exhibit = exhibit
57
+ exhibit.contact_emails.create(email: 'curator@example.com', confirmed_at: Time.zone.now)
58
+ exhibit.contact_emails.create(email: 'addl_curator@example.com', confirmed_at: Time.zone.now)
59
+ end
28
60
 
29
61
  it 'sends the email to the first contact' do
30
62
  expect(subject.headers[:to]).to eq 'curator@example.com'
@@ -186,10 +186,12 @@ describe Spotlight::Exhibit, type: :model do
186
186
  describe '#analytics' do
187
187
  subject { FactoryBot.create(:exhibit) }
188
188
  let(:ga_data) { OpenStruct.new(pageviews: 123) }
189
+ let(:mock_analytics) { double(Spotlight::Analytics::Ga) }
189
190
 
190
191
  before do
191
- allow(Spotlight::Analytics::Ga).to receive(:enabled?).and_return(true)
192
- allow(Spotlight::Analytics::Ga).to receive(:exhibit_data).with(subject, hash_including(:start_date)).and_return(ga_data)
192
+ allow(Spotlight::Analytics::Ga).to receive(:new).and_return(mock_analytics)
193
+ allow(mock_analytics).to receive(:enabled?).and_return(true)
194
+ allow(mock_analytics).to receive(:exhibit_data).with(subject, hash_including(:start_date)).and_return(ga_data)
193
195
  end
194
196
 
195
197
  it 'requests analytics data' do
@@ -200,10 +202,12 @@ describe Spotlight::Exhibit, type: :model do
200
202
  describe '#page_analytics' do
201
203
  subject { FactoryBot.create(:exhibit) }
202
204
  let(:ga_data) { [OpenStruct.new(pageviews: 123)] }
205
+ let(:mock_analytics) { double(Spotlight::Analytics::Ga) }
203
206
 
204
207
  before do
205
- allow(Spotlight::Analytics::Ga).to receive(:enabled?).and_return(true)
206
- allow(Spotlight::Analytics::Ga).to receive(:page_data).with(subject, hash_including(:start_date)).and_return(ga_data)
208
+ allow(Spotlight::Analytics::Ga).to receive(:new).and_return(mock_analytics)
209
+ allow(mock_analytics).to receive(:enabled?).and_return(true)
210
+ allow(mock_analytics).to receive(:page_data).with(subject, hash_including(:start_date)).and_return(ga_data)
207
211
  end
208
212
 
209
213
  it 'requests analytics data' do
@@ -16,6 +16,9 @@ describe Spotlight::IiifManifestPresenter do
16
16
  end
17
17
 
18
18
  describe 'public methods' do
19
+ let(:helpers) { double(show_presenter: presenter) }
20
+ let(:presenter) { instance_double(Blacklight::ShowPresenter, heading: title_field_value) }
21
+
19
22
  let(:iiif_url) { 'https://iiif.test/images/1-1' }
20
23
  let(:endpoint) { IIIFManifest::IIIFEndpoint.new(iiif_url, profile: profile_url) }
21
24
  let(:manifest_url) { 'https://iiif.test/spotlight/test/catalog/1-1/manifest' }
@@ -43,6 +46,7 @@ describe Spotlight::IiifManifestPresenter do
43
46
 
44
47
  allow(subject).to receive(:endpoint).and_return(endpoint)
45
48
  allow(subject).to receive(:id).and_return(id)
49
+ allow(controller).to receive(:view_context).and_return(helpers)
46
50
  end
47
51
 
48
52
  describe '#display_image' do