blacklight-spotlight 3.0.0.rc3 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/blacklight/close.svg +1 -0
  3. data/app/assets/images/blacklight/zoom_in.svg +1 -0
  4. data/app/assets/images/blacklight/zoom_out.svg +1 -0
  5. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +8 -1
  6. data/app/assets/javascripts/spotlight/admin/catalog_edit.js +13 -47
  7. data/app/assets/javascripts/spotlight/admin/exhibit_tag_autocomplete.js +37 -0
  8. data/app/assets/javascripts/spotlight/admin/{reindex_monitor.js → progress_monitor.js} +26 -4
  9. data/app/assets/javascripts/spotlight/admin/sir-trevor/locales.js +1 -1
  10. data/app/assets/javascripts/spotlight/user/zpr_links.js.erb +29 -14
  11. data/app/assets/stylesheets/spotlight/_browse.scss +8 -0
  12. data/app/assets/stylesheets/spotlight/_catalog.scss +30 -4
  13. data/app/assets/stylesheets/spotlight/_exhibit_admin.scss +9 -0
  14. data/app/assets/stylesheets/spotlight/_modals.scss +3 -0
  15. data/app/assets/stylesheets/spotlight/_nestable.scss +8 -0
  16. data/app/assets/stylesheets/spotlight/_spotlight.scss +2 -0
  17. data/app/assets/stylesheets/spotlight/_view_larger.scss +22 -0
  18. data/app/assets/stylesheets/spotlight/browse_group_categories_block.scss +23 -0
  19. data/app/assets/stylesheets/spotlight/typeahead.css +23 -23
  20. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +4 -2
  21. data/app/controllers/concerns/spotlight/base.rb +1 -1
  22. data/app/controllers/concerns/spotlight/catalog.rb +7 -1
  23. data/app/controllers/spotlight/browse_controller.rb +9 -15
  24. data/app/controllers/spotlight/bulk_actions_controller.rb +62 -0
  25. data/app/controllers/spotlight/bulk_updates_controller.rb +67 -0
  26. data/app/controllers/spotlight/catalog_controller.rb +16 -13
  27. data/app/controllers/spotlight/dashboards_controller.rb +5 -4
  28. data/app/controllers/spotlight/exhibits_controller.rb +1 -1
  29. data/app/controllers/spotlight/featured_images_controller.rb +1 -1
  30. data/app/controllers/spotlight/job_trackers_controller.rb +17 -0
  31. data/app/controllers/spotlight/pages_controller.rb +6 -7
  32. data/app/controllers/spotlight/tags_controller.rb +39 -5
  33. data/app/helpers/spotlight/application_helper.rb +20 -1
  34. data/app/helpers/spotlight/job_trackers_helper.rb +31 -0
  35. data/app/helpers/spotlight/main_app_helpers.rb +3 -4
  36. data/app/helpers/spotlight/meta_helper.rb +2 -2
  37. data/app/helpers/spotlight/pages_helper.rb +1 -8
  38. data/app/helpers/spotlight/roles_helper.rb +1 -1
  39. data/app/helpers/spotlight/searches_helper.rb +1 -1
  40. data/app/jobs/concerns/spotlight/gather_documents.rb +35 -0
  41. data/app/jobs/concerns/spotlight/job_tracking.rb +64 -0
  42. data/app/jobs/concerns/spotlight/limit_concurrency.rb +33 -0
  43. data/app/jobs/spotlight/add_tags_job.rb +31 -0
  44. data/app/jobs/spotlight/add_uploads_from_csv.rb +4 -3
  45. data/app/jobs/spotlight/application_job.rb +8 -0
  46. data/app/jobs/spotlight/change_visibility_job.rb +33 -0
  47. data/app/jobs/spotlight/cleanup_job_trackers_job.rb +13 -0
  48. data/app/jobs/spotlight/default_thumbnail_job.rb +1 -3
  49. data/app/jobs/spotlight/process_bulk_updates_csv_job.rb +82 -0
  50. data/app/jobs/spotlight/reindex_exhibit_job.rb +39 -0
  51. data/app/jobs/spotlight/reindex_job.rb +64 -44
  52. data/app/jobs/spotlight/remove_tags_job.rb +31 -0
  53. data/app/jobs/spotlight/rename_sidecar_field_job.rb +3 -2
  54. data/app/jobs/spotlight/rename_tags_job.rb +33 -0
  55. data/app/jobs/spotlight/update_job_trackers_job.rb +20 -0
  56. data/app/models/concerns/spotlight/browse_category_search_builder.rb +59 -0
  57. data/app/models/concerns/spotlight/exhibit_analytics.rb +2 -6
  58. data/app/models/concerns/spotlight/exhibit_documents.rb +2 -2
  59. data/app/models/concerns/spotlight/resources/web.rb +1 -1
  60. data/app/models/concerns/spotlight/search_builder.rb +11 -0
  61. data/app/models/concerns/spotlight/solr_document.rb +1 -1
  62. data/app/models/concerns/spotlight/solr_document/atomic_updates.rb +2 -2
  63. data/app/models/concerns/spotlight/user.rb +7 -2
  64. data/app/models/sir_trevor_rails/blocks/solr_documents_block.rb +9 -0
  65. data/app/models/sir_trevor_rails/blocks/uploaded_items_block.rb +4 -0
  66. data/app/models/spotlight/ability.rb +6 -2
  67. data/app/models/spotlight/attachment.rb +1 -1
  68. data/app/models/spotlight/background_job_progress.rb +96 -0
  69. data/app/models/spotlight/blacklight_configuration.rb +26 -6
  70. data/app/models/spotlight/bulk_update.rb +8 -0
  71. data/app/models/spotlight/event.rb +13 -0
  72. data/app/models/spotlight/exhibit.rb +5 -14
  73. data/app/models/spotlight/feature_page.rb +0 -2
  74. data/app/models/spotlight/featured_image.rb +40 -1
  75. data/app/models/spotlight/field_metadata.rb +4 -8
  76. data/app/models/spotlight/job_tracker.rb +114 -0
  77. data/app/models/spotlight/page.rb +1 -3
  78. data/app/models/spotlight/page_configurations.rb +10 -9
  79. data/app/models/spotlight/resource.rb +28 -62
  80. data/app/models/spotlight/resources/iiif_harvester.rb +12 -3
  81. data/app/models/spotlight/resources/iiif_manifest.rb +3 -1
  82. data/app/models/spotlight/resources/iiif_service.rb +9 -2
  83. data/app/models/spotlight/resources/json_upload.rb +12 -0
  84. data/app/models/spotlight/resources/upload.rb +25 -2
  85. data/app/models/spotlight/role.rb +1 -2
  86. data/app/models/spotlight/solr_document_sidecar.rb +2 -1
  87. data/app/presenters/spotlight/iiif_manifest_presenter.rb +2 -2
  88. data/app/services/spotlight/bulk_updates_csv_template_service.rb +93 -0
  89. data/app/services/spotlight/etl.rb +7 -0
  90. data/app/services/spotlight/etl/context.rb +52 -0
  91. data/app/services/spotlight/etl/executor.rb +192 -0
  92. data/app/services/spotlight/etl/loaders.rb +12 -0
  93. data/app/services/spotlight/etl/pipeline.rb +81 -0
  94. data/app/services/spotlight/etl/solr_loader.rb +96 -0
  95. data/app/services/spotlight/etl/sources.rb +25 -0
  96. data/app/services/spotlight/etl/step.rb +82 -0
  97. data/app/services/spotlight/etl/transforms.rb +64 -0
  98. data/app/services/spotlight/iiif_resource_resolver.rb +1 -1
  99. data/app/services/spotlight/validity_checker.rb +5 -5
  100. data/app/uploaders/spotlight/bulk_updates_uploader.rb +7 -0
  101. data/app/uploaders/spotlight/featured_image_uploader.rb +1 -1
  102. data/app/views/catalog/_add_tags.html.erb +28 -0
  103. data/app/views/catalog/_bulk_actions.html.erb +12 -0
  104. data/app/views/catalog/_change_visibility.html.erb +35 -0
  105. data/app/views/catalog/_curator_actions.html.erb +3 -0
  106. data/app/views/catalog/_remove_tags.html.erb +37 -0
  107. data/app/views/catalog/_save_search.html.erb +1 -1
  108. data/app/views/spotlight/about_pages/_sidebar.html.erb +2 -2
  109. data/app/views/spotlight/browse/_search.html.erb +3 -3
  110. data/app/views/spotlight/browse/_search_box.html.erb +9 -9
  111. data/app/views/spotlight/browse/_search_title.html.erb +1 -1
  112. data/app/views/spotlight/bulk_updates/_download.html.erb +23 -0
  113. data/app/views/spotlight/bulk_updates/_overview.html.erb +1 -0
  114. data/app/views/spotlight/bulk_updates/_progress_panel.html.erb +19 -0
  115. data/app/views/spotlight/bulk_updates/_upload.html.erb +12 -0
  116. data/app/views/spotlight/bulk_updates/edit.html.erb +37 -0
  117. data/app/views/spotlight/catalog/_admin_header.html.erb +1 -1
  118. data/app/views/spotlight/catalog/_admin_index_header_default.html.erb +1 -1
  119. data/app/views/spotlight/catalog/_admin_thumbnail_default.html.erb +3 -2
  120. data/app/views/spotlight/catalog/_edit_default.html.erb +2 -2
  121. data/app/views/spotlight/catalog/_reindex_progress_panel.html.erb +1 -1
  122. data/app/views/spotlight/catalog/index.iiif_json.jbuilder +1 -1
  123. data/app/views/spotlight/custom_fields/_form.html.erb +1 -1
  124. data/app/views/spotlight/custom_search_fields/_form.html.erb +1 -1
  125. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +6 -6
  126. data/app/views/spotlight/exhibits/_exhibit_card.html.erb +1 -1
  127. data/app/views/spotlight/feature_pages/_sidebar.html.erb +1 -1
  128. data/app/views/spotlight/featured_images/_form.html.erb +1 -1
  129. data/app/views/spotlight/job_trackers/show.html.erb +79 -0
  130. data/app/views/spotlight/metadata_configurations/_metadata_field.html.erb +2 -2
  131. data/app/views/spotlight/pages/_form.html.erb +2 -2
  132. data/app/views/spotlight/pages/_order_pages.html.erb +2 -2
  133. data/app/views/spotlight/pages/_view_type_group.html.erb +3 -3
  134. data/app/views/spotlight/pages/show.html.erb +1 -1
  135. data/app/views/spotlight/resources/_form.html.erb +1 -1
  136. data/app/views/spotlight/resources/csv_upload/_form.html.erb +1 -1
  137. data/app/views/spotlight/resources/iiif/_form.html.erb +1 -1
  138. data/app/views/spotlight/resources/json_upload/_form.html.erb +2 -2
  139. data/app/views/spotlight/resources/upload/_form.html.erb +1 -1
  140. data/app/views/spotlight/search_configurations/_document_index_view_types.html.erb +2 -2
  141. data/app/views/spotlight/searches/_form.html.erb +2 -2
  142. data/app/views/spotlight/shared/_curation_sidebar.html.erb +3 -0
  143. data/app/views/spotlight/shared/_locale_picker.html.erb +1 -1
  144. data/app/views/spotlight/sir_trevor/blocks/_browse_group_categories_block.html.erb +7 -6
  145. data/app/views/spotlight/sir_trevor/blocks/_search_results_block.html.erb +1 -1
  146. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb +8 -8
  147. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb +7 -7
  148. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +9 -7
  149. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb +5 -5
  150. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +4 -0
  151. data/app/views/spotlight/tags/_tag.html.erb +24 -0
  152. data/app/views/spotlight/tags/index.html.erb +12 -16
  153. data/app/views/spotlight/translations/show.yaml.yamlbuilder +6 -0
  154. data/config/i18n-tasks.yml +1 -0
  155. data/config/locales/spotlight.ar.yml +11 -1
  156. data/config/locales/spotlight.en.yml +170 -10
  157. data/config/routes.rb +29 -1
  158. data/db/migrate/20210122082032_create_job_trackers.rb +22 -0
  159. data/db/migrate/20210126123041_create_events.rb +15 -0
  160. data/db/migrate/20210305070001_remove_class_from_sirtrevor_image_blocks.rb +20 -0
  161. data/db/migrate/20210305171150_create_bulk_updates.rb +9 -0
  162. data/db/migrate/20210308090000_migrate_caption_values_for_title_key.rb +29 -0
  163. data/db/migrate/20210506070809_add_indexes_for_featured_images.rb +9 -0
  164. data/lib/generators/spotlight/install_generator.rb +2 -2
  165. data/lib/generators/spotlight/scaffold_resource_generator.rb +5 -13
  166. data/lib/generators/spotlight/templates/config/initializers/riiif.rb +7 -5
  167. data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +1 -1
  168. data/lib/generators/spotlight/templates/solr/config/schema.xml +1 -1
  169. data/lib/migration/iiif.rb +3 -3
  170. data/lib/spotlight/engine.rb +22 -1
  171. data/lib/spotlight/version.rb +1 -1
  172. data/spec/controllers/spotlight/browse_controller_spec.rb +0 -6
  173. data/spec/controllers/spotlight/bulk_actions_controller_spec.rb +124 -0
  174. data/spec/controllers/spotlight/bulk_updates_controller_spec.rb +77 -0
  175. data/spec/controllers/spotlight/catalog_controller_spec.rb +15 -13
  176. data/spec/controllers/spotlight/featured_images_controller_spec.rb +3 -3
  177. data/spec/controllers/spotlight/job_trackers_controller_spec.rb +37 -0
  178. data/spec/controllers/spotlight/tags_controller_spec.rb +5 -1
  179. data/spec/examples.txt +1502 -1437
  180. data/spec/factories/bulk_updates.rb +15 -0
  181. data/spec/factories/exhibits.rb +4 -0
  182. data/spec/factories/job_trackers.rb +11 -0
  183. data/spec/factories/users.rb +27 -8
  184. data/spec/features/add_items_spec.rb +10 -5
  185. data/spec/features/bulk_actions_spec.rb +72 -0
  186. data/spec/features/catalog_spec.rb +1 -0
  187. data/spec/features/import_exhibit_spec.rb +5 -1
  188. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +4 -4
  189. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +27 -1
  190. data/spec/features/javascript/reindex_monitor_spec.rb +1 -1
  191. data/spec/features/site_users_management_spec.rb +5 -5
  192. data/spec/fixtures/bulk-update-template.csv +57 -0
  193. data/spec/fixtures/updated-bulk-update-template-w-tags.csv +4 -0
  194. data/spec/fixtures/updated-bulk-update-template.csv +4 -0
  195. data/spec/helpers/spotlight/application_helper_spec.rb +5 -6
  196. data/spec/helpers/spotlight/pages_helper_spec.rb +8 -15
  197. data/spec/helpers/spotlight/roles_helper_spec.rb +1 -1
  198. data/spec/i18n_spec.rb +1 -0
  199. data/spec/jobs/spotlight/add_tags_job_spec.rb +34 -0
  200. data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +4 -1
  201. data/spec/jobs/spotlight/change_visibility_job_spec.rb +30 -0
  202. data/spec/jobs/spotlight/process_bulk_updates_csv_job_spec.rb +78 -0
  203. data/spec/jobs/spotlight/reindex_exhibit_job_spec.rb +43 -0
  204. data/spec/jobs/spotlight/reindex_job_spec.rb +34 -60
  205. data/spec/jobs/spotlight/remove_tags_job_spec.rb +39 -0
  206. data/spec/lib/migration/iiif_spec.rb +1 -1
  207. data/spec/models/spotlight/ability_spec.rb +27 -0
  208. data/spec/models/spotlight/background_job_progress_spec.rb +137 -0
  209. data/spec/models/spotlight/blacklight_configuration_spec.rb +22 -17
  210. data/spec/models/spotlight/browse_category_search_builder_spec.rb +49 -0
  211. data/spec/models/spotlight/exhibit_spec.rb +4 -58
  212. data/spec/models/spotlight/featured_image_spec.rb +13 -1
  213. data/spec/models/spotlight/resource_spec.rb +89 -87
  214. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +9 -10
  215. data/spec/models/spotlight/solr_document/atomic_updates_spec.rb +10 -0
  216. data/spec/models/spotlight/solr_document_sidecar_spec.rb +1 -0
  217. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +1 -1
  218. data/spec/services/spotlight/bulk_updates_csv_template_service_spec.rb +26 -0
  219. data/spec/services/spotlight/etl/context_spec.rb +66 -0
  220. data/spec/services/spotlight/etl/executor_spec.rb +149 -0
  221. data/spec/services/spotlight/etl/pipeline_spec.rb +22 -0
  222. data/spec/services/spotlight/etl/solr_loader_spec.rb +76 -0
  223. data/spec/services/spotlight/etl/step_spec.rb +70 -0
  224. data/spec/spec_helper.rb +2 -5
  225. data/spec/test_app_templates/Gemfile.extra +1 -0
  226. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  227. data/spec/uploaders/spotlight/featured_image_uploader_spec.rb +2 -2
  228. data/spec/views/spotlight/catalog/_edit_default.html.erb_spec.rb +1 -1
  229. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +24 -19
  230. data/spec/views/spotlight/job_trackers/show.html.erb_spec.rb +65 -0
  231. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -4
  232. data/spec/views/spotlight/sir_trevor/blocks/_browse_block.html.erb_spec.rb +1 -1
  233. data/spec/views/spotlight/sir_trevor/blocks/_iframe_block.html.erb_spec.rb +1 -1
  234. data/spec/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb_spec.rb +1 -1
  235. data/spec/views/spotlight/sir_trevor/blocks/_rule_block.html.erb_spec.rb +1 -1
  236. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb_spec.rb +8 -4
  237. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +7 -2
  238. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +8 -5
  239. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +3 -2
  240. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +9 -4
  241. data/spec/views/spotlight/tags/index.html.erb_spec.rb +5 -2
  242. metadata +143 -34
  243. data/app/assets/images/blacklight/add_circle.svg +0 -1
  244. data/app/assets/images/blacklight/custom_fullscreen.svg +0 -1
  245. data/app/assets/images/blacklight/remove_circle.svg +0 -1
  246. data/app/assets/images/blacklight/resize_small.svg +0 -1
  247. data/app/models/concerns/spotlight/resources/open_graph.rb +0 -36
  248. data/app/models/spotlight/reindex_progress.rb +0 -78
  249. data/app/models/spotlight/reindexing_log_entry.rb +0 -42
  250. data/app/services/spotlight/resources/iiif_builder.rb +0 -19
  251. data/app/services/spotlight/solr_document_builder.rb +0 -77
  252. data/app/services/spotlight/upload_solr_document_builder.rb +0 -57
  253. data/spec/factories/reindexing_log_entries.rb +0 -54
  254. data/spec/models/spotlight/reindex_progress_spec.rb +0 -122
  255. data/spec/models/spotlight/reindexing_log_entry_spec.rb +0 -129
  256. data/spec/models/spotlight/resources/open_graph_spec.rb +0 -65
  257. data/spec/services/spotlight/solr_document_builder_spec.rb +0 -66
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :bulk_update, class: 'Spotlight::BulkUpdate' do
5
+ file { Rack::Test::UploadedFile.new(File.expand_path(File.join('..', 'fixtures', 'updated-bulk-update-template.csv'), __dir__)) }
6
+
7
+ exhibit
8
+ end
9
+
10
+ factory :tagged_bulk_update, class: 'Spotlight::BulkUpdate' do
11
+ file { Rack::Test::UploadedFile.new(File.expand_path(File.join('..', 'fixtures', 'updated-bulk-update-template-w-tags.csv'), __dir__)) }
12
+
13
+ exhibit
14
+ end
15
+ end
@@ -10,4 +10,8 @@ FactoryBot.define do
10
10
  association :thumbnail, factory: :exhibit_thumbnail
11
11
  end
12
12
  end
13
+ factory :skinny_exhibit, class: 'Spotlight::Exhibit' do
14
+ sequence(:title) { |n| "Exhibit Title #{n}" }
15
+ published { true }
16
+ end
13
17
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :job_tracker, class: 'Spotlight::JobTracker' do
5
+ user
6
+ on factory: :exhibit
7
+ resource factory: :exhibit
8
+ created_at { Time.zone.parse('2017-01-05 23:00:00') }
9
+ updated_at { Time.zone.parse('2017-01-05 23:05:00') }
10
+ end
11
+ end
@@ -2,26 +2,45 @@
2
2
 
3
3
  FactoryBot.define do
4
4
  factory :user do
5
- transient do
6
- exhibit { FactoryBot.create(:exhibit) }
7
- end
8
5
  sequence(:email) { |n| "user#{n}@example.com" }
9
6
  password { 'insecure' }
10
-
11
7
  factory :site_admin do
12
8
  after(:create) do |user, _evaluator|
13
9
  user.roles.create role: 'admin', resource: Spotlight::Site.instance
14
10
  end
15
11
  end
16
12
 
17
- factory :exhibit_admin do
13
+ factory :named_exhibit_roles do
14
+ transient do
15
+ exhibit { FactoryBot.create(:exhibit) }
16
+ role { nil }
17
+ end
18
+
18
19
  after(:create) do |user, evaluator|
19
- user.roles.create role: 'admin', resource: evaluator.exhibit
20
+ user.roles.create role: evaluator.role, resource: evaluator.exhibit if evaluator.role
21
+ end
22
+
23
+ factory :exhibit_admin do
24
+ transient do
25
+ role { 'admin' }
26
+ end
27
+ end
28
+
29
+ factory :exhibit_curator do
30
+ transient do
31
+ role { 'curator' }
32
+ end
20
33
  end
21
34
  end
22
- factory :exhibit_curator do
35
+
36
+ trait :with_exhibit_role do
37
+ transient do
38
+ exhibit { FactoryBot.create(:exhibit) }
39
+ role { nil }
40
+ end
41
+
23
42
  after(:create) do |user, evaluator|
24
- user.roles.create role: 'curator', resource: evaluator.exhibit
43
+ user.roles.create role: evaluator.role, resource: evaluator.exhibit if evaluator.role
25
44
  end
26
45
  end
27
46
 
@@ -43,7 +43,8 @@ describe 'Uploading a non-repository item', type: :feature do
43
43
  expect(page).to have_content 'Object uploaded successfully.'
44
44
 
45
45
  expect(Spotlight::Resource.last.upload.image.file.path).to end_with '800x600.png'
46
- Blacklight.default_index.connection.delete_by_id Spotlight::Resource.last.send(:compound_id)
46
+ ensure
47
+ Blacklight.default_index.connection.delete_by_query 'spotlight_resource_type_ssim:spotlight/resources/uploads'
47
48
  Blacklight.default_index.connection.commit
48
49
  end
49
50
 
@@ -59,8 +60,8 @@ describe 'Uploading a non-repository item', type: :feature do
59
60
  end
60
61
  expect(page).to have_content 'Object uploaded successfully.'
61
62
  expect(Spotlight::Resource.last.data['full_title_tesim']).to eq 'no-image'
62
-
63
- Blacklight.default_index.connection.delete_by_id Spotlight::Resource.last.send(:compound_id)
63
+ ensure
64
+ Blacklight.default_index.connection.delete_by_query 'spotlight_resource_type_ssim:spotlight/resources/uploads'
64
65
  Blacklight.default_index.connection.commit
65
66
  end
66
67
 
@@ -84,7 +85,7 @@ describe 'Uploading a non-repository item', type: :feature do
84
85
  end
85
86
 
86
87
  context 'as an site administrator' do
87
- let(:user) { FactoryBot.create(:site_admin, exhibit: exhibit) }
88
+ let(:user) { FactoryBot.create(:site_admin) }
88
89
 
89
90
  it 'displays the JSON upload form' do
90
91
  visit spotlight.new_exhibit_resource_path(exhibit)
@@ -113,6 +114,9 @@ describe 'Uploading a non-repository item', type: :feature do
113
114
  end
114
115
  end
115
116
 
117
+ Blacklight.default_index.connection.commit
118
+ visit current_path
119
+
116
120
  click_link '800x600'
117
121
  click_link 'Edit'
118
122
  fill_in 'Title', with: 'This is a now an avatar'
@@ -123,7 +127,8 @@ describe 'Uploading a non-repository item', type: :feature do
123
127
 
124
128
  expect(page).to have_content 'This is a now an avatar'
125
129
  expect(Spotlight::Resource.last.upload.image.path).to end_with 'avatar.png'
126
- Blacklight.default_index.connection.delete_by_id Spotlight::Resource.last.send(:compound_id)
130
+ ensure
131
+ Blacklight.default_index.connection.delete_by_query 'spotlight_resource_type_ssim:spotlight/resources/uploads'
127
132
  Blacklight.default_index.connection.commit
128
133
  end
129
134
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe 'Bulk actions', type: :feature do
4
+ let(:exhibit) { FactoryBot.create(:exhibit) }
5
+ let(:curator) { FactoryBot.create(:exhibit_curator, exhibit: exhibit) }
6
+
7
+ before do
8
+ login_as curator
9
+ d = SolrDocument.new(id: 'dq287tq6352')
10
+ exhibit.tag(d.sidecar(exhibit), with: ['foo'], on: :tags)
11
+ d.make_private! exhibit
12
+ d.reindex
13
+ Blacklight.default_index.connection.commit
14
+ end
15
+
16
+ after do
17
+ d = SolrDocument.new(id: 'dq287tq6352')
18
+ exhibit.tag(d.sidecar(exhibit), with: [], on: :tags)
19
+ exhibit.owned_tags.destroy_all
20
+ d.make_public! exhibit
21
+ d.reindex
22
+ Blacklight.default_index.connection.commit
23
+ end
24
+
25
+ it 'setting item visibility', js: true do
26
+ visit spotlight.search_exhibit_catalog_path(exhibit, { q: 'dq287tq6352' })
27
+
28
+ click_button 'Bulk actions'
29
+ click_link 'Change item visibility'
30
+ expect(page).to have_css 'h4', text: 'Change item visibility', visible: true
31
+ choose 'Private'
32
+ accept_confirm 'All items in the result set will be updated. Are you sure?' do
33
+ click_button 'Change'
34
+ end
35
+ expect(page).to have_css '.alert', text: 'Visibility of 1 item is being updated.'
36
+ expect(SolrDocument.new(id: 'dq287tq6352').private?(exhibit)).to be true
37
+ end
38
+
39
+ it 'adding tags', js: true do
40
+ visit spotlight.search_exhibit_catalog_path(exhibit, { q: 'dq287tq6352' })
41
+
42
+ click_button 'Bulk actions'
43
+ click_link 'Add tags'
44
+ expect(page).to have_css 'h4', text: 'Add tags', visible: true
45
+ within '#add-tags-modal' do
46
+ find('[data-autocomplete-fetched="true"]', visible: false)
47
+ find('.tt-input').set('good,stuff')
48
+ end
49
+ accept_confirm 'All items in the result set will be updated. Are you sure?' do
50
+ click_button 'Add'
51
+ end
52
+ expect(page).to have_css '.alert', text: 'Tags are being added for 1 item.'
53
+ expect(SolrDocument.new(id: 'dq287tq6352').sidecar(exhibit).all_tags_list).to include('foo', 'good', 'stuff')
54
+ end
55
+
56
+ it 'removing tags', js: true do
57
+ visit spotlight.search_exhibit_catalog_path(exhibit, { q: 'dq287tq6352' })
58
+
59
+ click_button 'Bulk actions'
60
+ click_link 'Remove tags'
61
+ expect(page).to have_css 'h4', text: 'Remove tags', visible: true
62
+ within '#remove-tags-modal' do
63
+ find('[data-autocomplete-fetched="true"]', visible: false)
64
+ find('.tt-input').set('foo')
65
+ end
66
+ accept_confirm 'All items in the result set will be updated. Are you sure?' do
67
+ click_button 'Remove'
68
+ end
69
+ expect(page).to have_css '.alert', text: 'Tags are being removed for 1 item.'
70
+ expect(SolrDocument.new(id: 'dq287tq6352').sidecar(exhibit).all_tags_list).to eq []
71
+ end
72
+ end
@@ -30,6 +30,7 @@ describe 'Catalog', type: :feature do
30
30
  it 'has breadcrumbs' do
31
31
  visit spotlight.search_exhibit_catalog_path(exhibit, q: 'xyz')
32
32
  expect(page).to have_breadcrumbs 'Home', 'Search results'
33
+ expect(page).to have_selector '.breadcrumb-item.active', text: 'Search results'
33
34
  end
34
35
 
35
36
  describe 'Non-spotlight #show' do
@@ -6,7 +6,11 @@ describe 'Allow exhibit admins to import and export content from an exhibit', ty
6
6
  let(:exhibit) { FactoryBot.create(:exhibit) }
7
7
  let(:user) { FactoryBot.create(:exhibit_admin, exhibit: exhibit) }
8
8
 
9
- before { login_as user }
9
+ before do
10
+ allow(Spotlight::ReindexExhibitJob).to receive(:perform_later).and_return(true) if Rails.version < '6'
11
+
12
+ login_as user
13
+ end
10
14
 
11
15
  pending 'should allow admins to export content from an exhibit' do
12
16
  pending(%(There's not really any good way to test the contents of a
@@ -142,14 +142,14 @@ describe 'Solr Document Block', feature: true, versioning: true, default_max_wai
142
142
  it 'allows you to optionally display a ZPR link with the image', js: true do
143
143
  fill_in_solr_document_block_typeahead_field with: 'gk446cj2442'
144
144
 
145
- check 'Display ZPR link'
145
+ check 'Offer "View larger" option'
146
146
  # this seems silly, but also seems to help with the flappy-ness of this spec
147
- expect(find_field('Display ZPR link', checked: true)).to be_checked
147
+ expect(find_field('Offer "View larger" option', checked: true)).to be_checked
148
148
 
149
149
  save_page
150
150
 
151
151
  within '.contents' do
152
- click_button 'Show in ZPR viewer'
152
+ click_button 'View [World map] larger'
153
153
  end
154
154
 
155
155
  within '.modal-content' do
@@ -225,6 +225,6 @@ describe 'Solr Document Block', feature: true, versioning: true, default_max_wai
225
225
 
226
226
  # for some reason, the text area above isn't getting filled in
227
227
  # expect(page).to have_selector ".st-text-block", text: "zzz"
228
- expect(find_field('primary-caption-field').value).to eq 'full_title_tesim'
228
+ expect(find_field('primary-caption-field').value).to eq Spotlight::PageConfigurations::DOCUMENT_TITLE_KEY
229
229
  end
230
230
  end
@@ -54,7 +54,7 @@ describe 'Uploaded Items Block', feature: true, js: true, versioning: true do
54
54
  attach_file('uploaded_item_url', fixture_file2)
55
55
 
56
56
  # This line blocks until the javascript has added the file to the page:
57
- expect(find('#st-block-3_display-checkbox_2')).to be_present
57
+ expect(find('input[name="item[file_0][display]"]')).to be_present
58
58
 
59
59
  # Uncheck the first checkbox
60
60
  all('input[type="checkbox"]').first.click
@@ -65,4 +65,30 @@ describe 'Uploaded Items Block', feature: true, js: true, versioning: true do
65
65
  expect(page).to have_css('img[alt=""]', count: 1)
66
66
  end
67
67
  end
68
+
69
+ it 'may have ZPR links' do
70
+ attach_file('uploaded_item_url', fixture_file1)
71
+ attach_file('uploaded_item_url', fixture_file2)
72
+
73
+ check 'Offer "View larger" option'
74
+ # this seems silly, but also seems to help with the flappy-ness of this spec
75
+ expect(find_field('Offer "View larger" option', checked: true)).to be_checked
76
+
77
+ save_page
78
+
79
+ within('.uploaded-items-block') do
80
+ expect(page).to have_button('View larger', count: 2)
81
+ end
82
+
83
+ within first('.contents') do
84
+ data = find('button')['data-iiif-tilesource']
85
+ expect(data).to be_present
86
+ expect(JSON.parse(data).with_indifferent_access).to include type: 'image', url: end_with('800x600.png')
87
+ click_button 'View larger'
88
+ end
89
+
90
+ within '.modal-content' do
91
+ expect(page).to have_css('#osd-modal-container')
92
+ end
93
+ end
68
94
  end
@@ -8,7 +8,7 @@ describe 'Reindex Monitor', js: true, default_max_wait_time: 10 do
8
8
  let(:exhibit_curator) { FactoryBot.create(:exhibit_curator, exhibit: exhibit) }
9
9
 
10
10
  before do
11
- FactoryBot.create(:in_progress_reindexing_log_entry, exhibit: exhibit, items_reindexed_estimate: 5)
11
+ exhibit.job_trackers.create(resource: exhibit, status: 'completed', job_class: 'Spotlight::ReindexExhibitJob')
12
12
  login_as exhibit_curator
13
13
  visit spotlight.admin_exhibit_catalog_path(exhibit)
14
14
  end
@@ -42,15 +42,15 @@ describe 'Site users management', js: true do
42
42
 
43
43
  click_button 'Add role'
44
44
 
45
- expect(page).to have_css(:td, text: 'not-an-admin@example.com')
45
+ expect(page).to have_css('td', text: 'not-an-admin@example.com')
46
46
 
47
- expect(page).to have_css(:a, text: 'Remove from admin role', count: 4)
47
+ expect(page).to have_css('a', text: 'Remove from admin role', count: 2)
48
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
 
52
52
  expect(page).to have_content 'User removed from site adminstrator role'
53
- expect(page).to have_css(:a, text: 'Remove from admin role', count: 2)
53
+ expect(page).to have_css('a', text: 'Remove from admin role', count: 0)
54
54
  end
55
55
 
56
56
  it 'sends an invitation email to users who do not exist' do
@@ -68,7 +68,7 @@ describe 'Site users management', js: true do
68
68
  click_link 'Add new administrator'
69
69
 
70
70
  expect(page).to have_css('td', text: user.email)
71
- # There are two users, the original site admin and our admin user so only one button
72
- expect(page).to have_css(:a, text: 'Remove from admin role', count: 2)
71
+ # There is just our admin user so no button
72
+ expect(page).to have_css('a', text: 'Remove from admin role', count: 0)
73
73
  end
74
74
  end
@@ -0,0 +1,57 @@
1
+ Item ID,Item Title,Visibility
2
+ bm387cy2596,L'AMERIQVE,true
3
+ cz507zk0531,NEW MEXICO,true
4
+ dq287tq6352,L'AMERIQUE,false
5
+ ds525vw8509,"Mappa mondo and Figura prima del capitolo IV., ossia della divisione della terra",true
6
+ dx157dh4345,KAART der REYZE van drie Schepen naar het ZUYDLAND in de Jaaren 1721 en 1722,true
7
+ dy396mt9665,a Map of the Middle Part of AMERICA,true
8
+ fh912bx9878,[Americas],true
9
+ gk446cj2442,[World map],true
10
+ gt736xf9712,HEMISPHERE OCCIDENTAL DU GLOBE TERRESTRE contenant L'AMERIQUE SEPTENT.LE et L'AMERIQUE M.LE et P.tie des TERRES ARCTIQUES et ANTARCTIQUES Subdivisées en leurs Regions.,true
11
+ gv664gb7394,SITVS TERRÆ CIRCVLIS COELESTIBVS CIRCVNDATÆ.,true
12
+ gw298sq0504,"PLANISPHÆRIVM BRAHEVM, Sive Structura MVNDI TOTIVS, EX HYPOTHESI TYCHONIS BRAHEI IN PLANO DELINEATA. [Amstelodami : Apud Joannem Janssonium, 1660].",true
13
+ jp266yb7109,AMERICA,false
14
+ jr961xz9944,AMERICA SEPTENTRIONALIS,true
15
+ jy409qg0248,Novissima et Accuratissima TOTIUS AMERICÆ DESCRIPTIO.,true
16
+ kw406zk5778,[America],true
17
+ kw703rh2327,"Mappe-monde pour connoitre les progŕes & les conquestes les plus remarquables des Provinces-Vnies, ainsy que celles des Compagnies d'Orient et d'Occident et les païs quelles possédent dans l'un et dans l'autre hemisphere and Atlas historique, ou, nouvelle introduction à l’histoire, à la chronologie & à la géographie ancienne & moderne",true
18
+ mw236cd6430,"AMERIQUE SEPTENTRIONALE divisée en ses principales parties, ou sont distingués les vns des autres LES ESTATS suivant qu'ils appartiennent presentemet aux FRANÇOIS, CASTILLANS, ANGLOIS, SUEDOIS, DANOIS, HOLLANDOIS. Tirée des Relations de toutes ces Nations Par le Sr. Sanson, Geographe Ordinaire du Roy",true
19
+ np731wc7689,L'AMERIQUE | Suivant les dernieres | Observations de l'Acade= | mie Royale des Sciences Seventh of 18 States,true
20
+ nq874ts4848,"Introduction a la Geographie Avec une Description Historique Sur Touttes les parties de la Terre
21
+ Title page",true
22
+ nr766vt0518,GEOGRAPHISCHE UNIVERSAL - ZEIG UND SCHLAG-UHR : WEERELD-BEELDIGH WYS EN SLAG WERK,true
23
+ nz081wv9348,AMERIQUE SEPTENTRIONALE Par N. Sanson Geographe Ord.re du Roy. Reveue et changée en plusieurs endroits suivant les Memoires les plus recents augmentée et corrigée en cette seconde edition,true
24
+ pm812zf5263,AMERICÆ,true
25
+ ps921pn8250,PLANISPHERE URANO-GEOGRAPHIQUE c'estadire LES SPHERES CELESTE et TERRESTRE mises en plan.,false
26
+ pt603pv6417,"A Map of the WORLD with the Ships DUKE & DUTCHESS Tract Round it, from 1708 to 1711. Second of 2 States",true
27
+ qb677kc3995,L'AMERIQVE autrement Le NOVVEAV MONDE et INDES OCCIDENTALES,true
28
+ qt469cf8909,"Pascaart vertoonende de Zeecusten van Chili, Peru, Hispania, Nova, Nova Granada, en California.",true
29
+ rc221bv1386,[Armenian map of the world],true
30
+ rj993fh5469,"A New Map of the World Shewing the Course of Sr. Francis Drake, William Shouten and Capt. William Dampiers Voyages Round it.",true
31
+ rx614sw9194,AMERICÆ nova discriptio.,true
32
+ rz043dh7915,MAR DEL ZUR HISPANIS MARE PACIFICUM.,true
33
+ rz818vx8201,'t Noorder deel van WEST-INDIEN,true
34
+ sb904gg2771,Planisphaerium terrestre cum utroque coelesti hemisphaerio ... = Vlakke ared-kloot met het beide hemelsch half-rond,true
35
+ sd345mz1879,A MAP of AMERICA from the latest and best Observations,true
36
+ sn161bw2027,"Pas-caart van Zuyd-Zee, tusschen California en ilhas de Ladrones and La Atlas del mundo o el mundo aguado",true
37
+ sn343fc0807,AMERICQVE SEPTENTRIONALE,true
38
+ sp821gh4463,[World],true
39
+ sw106rc9347,AMERIQUE SEPTENTRIONALE,true
40
+ sx619yv5558,"Recentissima NOVI ORBIS, Sive AMERICÆ SEPTENTRIONALIS et MERIDIONALIS TABULA",true
41
+ tg729zw9405,NOVA TOTIVS AMERICÆ DESCRIPTIO.,true
42
+ vb000vb1451,AMERICA,true
43
+ vw323gf4937,AMERICA with those known parts in that unknowne worlde both people and manner of buildings Discribed and inlarged by I.S.Ano.1626,false
44
+ vy180gj7659,L'AMERIQUE Suivant les dernieres observations de l'Acad. Royale des Sciences.,true
45
+ wb806ct0449,A Generall Chart of the | SOUTH SEA | from the River of Plate to | Dampiers Streights on ye Coast | of NEW GUINEA,true
46
+ wt855xd4818,CONTINENT ARCTIQVE,true
47
+ xd327cm9378,"Mapa mundi, con los meridianos, y paralelos, iguales como los del globo tere- y arreglado a las mejores, y ultimas relaciones",true
48
+ yh941cp6284,Orbis terrarum tabula recens emendata et in lucem edita,true
49
+ ym733yc1437,"[Maps of the world] and A new and universal dictionary of arts and sciences: ... With an introductory preface, ... And illustrated with a great number of copper-plates, engraven by the best hands",true
50
+ yn959jw9550,A New Map of North AMERICA According to the Newest Observations.,true
51
+ ys360dp2191,TYPUS SELENOGRAPHICUS LUNÆ PHASES ET ASPECTUS VARIOS ADUMBRANS.,true
52
+ zn001wm6450,L'AMERIQVE autrement Le NOVVEAV MONDE et INDES OCCIDENTALES,true
53
+ zn845sh3664,PLANISPHERE REPRESENTANT TOUTE L'ETENDUE DU MONDE. DANS L'ORDRE QU'ON A SUIVI DANS CE LIVRE. NB. LES CHIFFRES SE RAPORTENT AUX CARTES ET AUX PAGES DES DESCRIPTIONS.,true
54
+ zq083qg2931,[Pacific Ocean],true
55
+ zr014mj0786,A New and Exact Map of ASIA According to the Best Observations,true
56
+ zs247rr8237,"AMERIQUE SEPTENTRIONALE divisée en ses principales parties, ou sont distingués les vns des autres LES ESTATS suivant qu'ils appartiennent presentemet aux FRANÇOIS, CASTILLANS, ANGLOIS, SUEDOIS, DANOIS, HOLLANDOIS. Tirée des Relations de toutes ces Nations Par le Sr. Sanson, Geographe Ordinaire du Roy",true
57
+ zv316zr9542,AMERIQUE SEPTENTRIONALE,false
@@ -0,0 +1,4 @@
1
+ Item ID,Item Title,Visibility,Tag: CSV Tag1,Tag: CSV Tag2,Tag: CSV DoesntExist
2
+ bm387cy2596,L'AMERIQVE,true,true,true,false
3
+ cz507zk0531,NEW MEXICO,true,false,true,false
4
+ dq287tq6352,L'AMERIQUE,true,true,true,false
@@ -0,0 +1,4 @@
1
+ Item ID,Item Title,Visibility
2
+ bm387cy2596,L'AMERIQVE,true
3
+ cz507zk0531,NEW MEXICO,true
4
+ dq287tq6352,L'AMERIQUE,false
@@ -66,7 +66,6 @@ describe Spotlight::ApplicationHelper, type: :helper do
66
66
  end
67
67
 
68
68
  it 'is a url for a search with the given tag facet' do
69
- allow(SolrDocument).to receive_messages(solr_field_for_tagger: :exhibit_tags)
70
69
  expected = spotlight.search_exhibit_catalog_path(exhibit_id: helper.current_exhibit, f: { exhibit_tags: ['tag_value'] })
71
70
  expect(helper.url_to_tag_facet('tag_value')).to eq expected
72
71
  end
@@ -156,8 +155,8 @@ describe Spotlight::ApplicationHelper, type: :helper do
156
155
  end
157
156
 
158
157
  it 'excludes view fields that are never visible (e.g. atom, rss)' do
159
- blacklight_config.view.a.if = true
160
- blacklight_config.view.b.if = false
158
+ blacklight_config.view.a(if: true)
159
+ blacklight_config.view.b(if: false)
161
160
 
162
161
  expect(helper.available_view_fields).to include :a
163
162
  expect(helper.available_view_fields).not_to include :b
@@ -173,9 +172,9 @@ describe Spotlight::ApplicationHelper, type: :helper do
173
172
  # clean out the default views
174
173
  blacklight_config.view.reject! { |_| true }
175
174
 
176
- blacklight_config.view.a
177
- blacklight_config.view.b
178
- blacklight_config.view.c
175
+ blacklight_config.view.a!
176
+ blacklight_config.view.b!
177
+ blacklight_config.view.c!
179
178
  allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
180
179
  end
181
180