blacklight-spotlight 3.0.0.rc1 → 3.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/images/blacklight/arrow-alt-circle-left.svg +1 -0
  4. data/app/assets/images/blacklight/arrow-alt-circle-right.svg +1 -0
  5. data/app/assets/images/blacklight/close.svg +1 -0
  6. data/app/assets/images/blacklight/zoom_in.svg +1 -0
  7. data/app/assets/images/blacklight/zoom_out.svg +1 -0
  8. data/app/assets/javascripts/spotlight/admin/{add_new_page_button.js → add_new_button.js} +7 -0
  9. data/app/assets/javascripts/spotlight/admin/block_mixins/autocompleteable.js +4 -4
  10. data/app/assets/javascripts/spotlight/admin/blocks/browse_group_categories_block.js +88 -0
  11. data/app/assets/javascripts/spotlight/admin/blocks/pages_block.js +1 -1
  12. data/app/assets/javascripts/spotlight/admin/blocks/solr_documents_base_block.js +1 -1
  13. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +8 -1
  14. data/app/assets/javascripts/spotlight/admin/catalog_edit.js +13 -47
  15. data/app/assets/javascripts/spotlight/admin/croppable.js +1 -1
  16. data/app/assets/javascripts/spotlight/admin/exhibit_tag_autocomplete.js +37 -0
  17. data/app/assets/javascripts/spotlight/admin/index.js +0 -2
  18. data/app/assets/javascripts/spotlight/admin/{reindex_monitor.js → progress_monitor.js} +26 -4
  19. data/app/assets/javascripts/spotlight/admin/search_typeahead.js +2 -2
  20. data/app/assets/javascripts/spotlight/admin/sir-trevor/locales.js +9 -2
  21. data/app/assets/javascripts/spotlight/user/browse_group_categories.js +59 -0
  22. data/app/assets/javascripts/spotlight/user/index.js +1 -0
  23. data/app/assets/javascripts/spotlight/user/zpr_links.js.erb +29 -14
  24. data/app/assets/stylesheets/spotlight/_breadcrumbs.scss +8 -0
  25. data/app/assets/stylesheets/spotlight/_browse.scss +8 -0
  26. data/app/assets/stylesheets/spotlight/_catalog.scss +34 -8
  27. data/app/assets/stylesheets/spotlight/_exhibit_admin.scss +9 -0
  28. data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +212 -84
  29. data/app/assets/stylesheets/spotlight/_item_text_block.scss +1 -1
  30. data/app/assets/stylesheets/spotlight/_modals.scss +3 -0
  31. data/app/assets/stylesheets/spotlight/_nestable.scss +8 -0
  32. data/app/assets/stylesheets/spotlight/_pages.scss +9 -4
  33. data/app/assets/stylesheets/spotlight/_spotlight.scss +4 -0
  34. data/app/assets/stylesheets/spotlight/_translations.scss +6 -0
  35. data/app/assets/stylesheets/spotlight/_view_larger.scss +22 -0
  36. data/app/assets/stylesheets/spotlight/browse_group_categories_block.scss +92 -0
  37. data/app/assets/stylesheets/spotlight/typeahead.css +23 -23
  38. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +5 -4
  39. data/app/controllers/concerns/spotlight/base.rb +1 -1
  40. data/app/controllers/concerns/spotlight/catalog.rb +7 -1
  41. data/app/controllers/concerns/spotlight/search_helper.rb +2 -8
  42. data/app/controllers/spotlight/appearances_controller.rb +0 -13
  43. data/app/controllers/spotlight/browse_controller.rb +15 -17
  44. data/app/controllers/spotlight/bulk_actions_controller.rb +62 -0
  45. data/app/controllers/spotlight/bulk_updates_controller.rb +67 -0
  46. data/app/controllers/spotlight/catalog_controller.rb +17 -14
  47. data/app/controllers/spotlight/concerns/application_controller.rb +13 -2
  48. data/app/controllers/spotlight/dashboards_controller.rb +5 -4
  49. data/app/controllers/spotlight/exhibits_controller.rb +1 -1
  50. data/app/controllers/spotlight/featured_images_controller.rb +1 -1
  51. data/app/controllers/spotlight/groups_controller.rb +80 -0
  52. data/app/controllers/spotlight/job_trackers_controller.rb +17 -0
  53. data/app/controllers/spotlight/pages_controller.rb +8 -13
  54. data/app/controllers/spotlight/searches_controller.rb +4 -17
  55. data/app/controllers/spotlight/tags_controller.rb +39 -5
  56. data/app/helpers/spotlight/application_helper.rb +21 -2
  57. data/app/helpers/spotlight/crud_link_helpers.rb +1 -1
  58. data/app/helpers/spotlight/job_trackers_helper.rb +31 -0
  59. data/app/helpers/spotlight/main_app_helpers.rb +4 -5
  60. data/app/helpers/spotlight/meta_helper.rb +2 -2
  61. data/app/helpers/spotlight/pages_helper.rb +1 -8
  62. data/app/helpers/spotlight/roles_helper.rb +1 -1
  63. data/app/helpers/spotlight/searches_helper.rb +1 -1
  64. data/app/jobs/concerns/spotlight/gather_documents.rb +35 -0
  65. data/app/jobs/concerns/spotlight/job_tracking.rb +64 -0
  66. data/app/jobs/concerns/spotlight/limit_concurrency.rb +33 -0
  67. data/app/jobs/spotlight/add_tags_job.rb +31 -0
  68. data/app/jobs/spotlight/add_uploads_from_csv.rb +4 -3
  69. data/app/jobs/spotlight/application_job.rb +8 -0
  70. data/app/jobs/spotlight/change_visibility_job.rb +33 -0
  71. data/app/jobs/spotlight/cleanup_job_trackers_job.rb +13 -0
  72. data/app/jobs/spotlight/default_thumbnail_job.rb +1 -3
  73. data/app/jobs/spotlight/process_bulk_updates_csv_job.rb +82 -0
  74. data/app/jobs/spotlight/reindex_exhibit_job.rb +39 -0
  75. data/app/jobs/spotlight/reindex_job.rb +64 -44
  76. data/app/jobs/spotlight/remove_tags_job.rb +31 -0
  77. data/app/jobs/spotlight/rename_sidecar_field_job.rb +3 -2
  78. data/app/jobs/spotlight/rename_tags_job.rb +33 -0
  79. data/app/jobs/spotlight/update_job_trackers_job.rb +20 -0
  80. data/app/models/concerns/spotlight/browse_category_search_builder.rb +59 -0
  81. data/app/models/concerns/spotlight/exhibit_analytics.rb +2 -6
  82. data/app/models/concerns/spotlight/exhibit_defaults.rb +1 -1
  83. data/app/models/concerns/spotlight/exhibit_documents.rb +2 -2
  84. data/app/models/concerns/spotlight/resources/web.rb +1 -1
  85. data/app/models/concerns/spotlight/search_builder.rb +11 -0
  86. data/app/models/concerns/spotlight/solr_document.rb +1 -1
  87. data/app/models/concerns/spotlight/solr_document/atomic_updates.rb +2 -2
  88. data/app/models/concerns/spotlight/user.rb +7 -2
  89. data/app/models/sir_trevor_rails/blocks/browse_group_categories_block.rb +25 -0
  90. data/app/models/sir_trevor_rails/blocks/solr_documents_block.rb +9 -0
  91. data/app/models/sir_trevor_rails/blocks/uploaded_items_block.rb +4 -0
  92. data/app/models/spotlight/ability.rb +8 -2
  93. data/app/models/spotlight/about_page.rb +1 -1
  94. data/app/models/spotlight/attachment.rb +1 -1
  95. data/app/models/spotlight/background_job_progress.rb +96 -0
  96. data/app/models/spotlight/blacklight_configuration.rb +28 -7
  97. data/app/models/spotlight/bulk_update.rb +8 -0
  98. data/app/models/spotlight/event.rb +13 -0
  99. data/app/models/spotlight/exhibit.rb +15 -12
  100. data/app/models/spotlight/feature_page.rb +1 -3
  101. data/app/models/spotlight/featured_image.rb +8 -2
  102. data/app/models/spotlight/field_metadata.rb +4 -8
  103. data/app/models/spotlight/group.rb +22 -0
  104. data/app/models/spotlight/group_member.rb +11 -0
  105. data/app/models/spotlight/home_page.rb +1 -1
  106. data/app/models/spotlight/job_tracker.rb +114 -0
  107. data/app/models/spotlight/page.rb +3 -5
  108. data/app/models/spotlight/page_configurations.rb +15 -9
  109. data/app/models/spotlight/resource.rb +28 -62
  110. data/app/models/spotlight/resources/iiif_harvester.rb +12 -3
  111. data/app/models/spotlight/resources/iiif_manifest.rb +9 -7
  112. data/app/models/spotlight/resources/iiif_service.rb +9 -2
  113. data/app/models/spotlight/resources/json_upload.rb +12 -0
  114. data/app/models/spotlight/resources/upload.rb +25 -2
  115. data/app/models/spotlight/role.rb +1 -2
  116. data/app/models/spotlight/search.rb +5 -0
  117. data/app/models/spotlight/solr_document_sidecar.rb +2 -1
  118. data/app/presenters/spotlight/iiif_manifest_presenter.rb +2 -2
  119. data/app/services/spotlight/bulk_updates_csv_template_service.rb +93 -0
  120. data/app/services/spotlight/etl.rb +7 -0
  121. data/app/services/spotlight/etl/context.rb +52 -0
  122. data/app/services/spotlight/etl/executor.rb +192 -0
  123. data/app/services/spotlight/etl/loaders.rb +12 -0
  124. data/app/services/spotlight/etl/pipeline.rb +81 -0
  125. data/app/services/spotlight/etl/solr_loader.rb +96 -0
  126. data/app/services/spotlight/etl/sources.rb +25 -0
  127. data/app/services/spotlight/etl/step.rb +82 -0
  128. data/app/services/spotlight/etl/transforms.rb +64 -0
  129. data/app/services/spotlight/exhibit_import_export_service.rb +50 -22
  130. data/app/services/spotlight/iiif_resource_resolver.rb +1 -1
  131. data/app/services/spotlight/validity_checker.rb +5 -5
  132. data/app/uploaders/spotlight/bulk_updates_uploader.rb +7 -0
  133. data/app/uploaders/spotlight/featured_image_uploader.rb +1 -1
  134. data/app/views/catalog/_add_tags.html.erb +28 -0
  135. data/app/views/catalog/_bulk_actions.html.erb +12 -0
  136. data/app/views/catalog/_change_visibility.html.erb +35 -0
  137. data/app/views/catalog/_curator_actions.html.erb +3 -0
  138. data/app/views/catalog/_remove_tags.html.erb +37 -0
  139. data/app/views/catalog/_save_search.html.erb +1 -1
  140. data/app/views/spotlight/about_pages/_empty.html.erb +5 -5
  141. data/app/views/spotlight/browse/_search.html.erb +2 -1
  142. data/app/views/spotlight/browse/_search_box.html.erb +9 -9
  143. data/app/views/spotlight/browse/index.html.erb +13 -0
  144. data/app/views/spotlight/bulk_updates/_download.html.erb +23 -0
  145. data/app/views/spotlight/bulk_updates/_overview.html.erb +1 -0
  146. data/app/views/spotlight/bulk_updates/_progress_panel.html.erb +19 -0
  147. data/app/views/spotlight/bulk_updates/_upload.html.erb +12 -0
  148. data/app/views/spotlight/bulk_updates/edit.html.erb +37 -0
  149. data/app/views/spotlight/catalog/_admin_header.html.erb +1 -1
  150. data/app/views/spotlight/catalog/_admin_index_header_default.html.erb +1 -1
  151. data/app/views/spotlight/catalog/_admin_thumbnail_default.html.erb +3 -2
  152. data/app/views/spotlight/catalog/_document.html.erb +2 -4
  153. data/app/views/spotlight/catalog/_edit_default.html.erb +2 -2
  154. data/app/views/spotlight/catalog/_reindex_progress_panel.html.erb +1 -1
  155. data/app/views/spotlight/catalog/index.iiif_json.jbuilder +22 -0
  156. data/app/views/spotlight/contacts/_form.html.erb +1 -1
  157. data/app/views/spotlight/custom_fields/_form.html.erb +1 -1
  158. data/app/views/spotlight/custom_search_fields/_form.html.erb +1 -1
  159. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +6 -6
  160. data/app/views/spotlight/exhibits/_exhibit_card.html.erb +1 -1
  161. data/app/views/spotlight/feature_pages/_empty.html.erb +5 -5
  162. data/app/views/spotlight/featured_images/_form.html.erb +2 -2
  163. data/app/views/spotlight/featured_images/_upload_form.html.erb +1 -1
  164. data/app/views/spotlight/home_pages/_empty.html.erb +3 -3
  165. data/app/views/spotlight/job_trackers/show.html.erb +79 -0
  166. data/app/views/spotlight/metadata_configurations/_metadata_field.html.erb +2 -2
  167. data/app/views/spotlight/pages/_form.html.erb +2 -2
  168. data/app/views/spotlight/pages/_view_type_group.html.erb +3 -3
  169. data/app/views/spotlight/resources/_form.html.erb +1 -1
  170. data/app/views/spotlight/resources/csv_upload/_form.html.erb +1 -1
  171. data/app/views/spotlight/resources/iiif/_form.html.erb +1 -1
  172. data/app/views/spotlight/resources/json_upload/_form.html.erb +2 -2
  173. data/app/views/spotlight/resources/upload/_form.html.erb +1 -1
  174. data/app/views/spotlight/search_configurations/_document_index_view_types.html.erb +2 -2
  175. data/app/views/spotlight/searches/_form.html.erb +14 -2
  176. data/app/views/spotlight/searches/_group.html.erb +27 -0
  177. data/app/views/spotlight/searches/index.html.erb +58 -17
  178. data/app/views/spotlight/shared/_curation_sidebar.html.erb +3 -0
  179. data/app/views/spotlight/shared/_locale_picker.html.erb +1 -1
  180. data/app/views/spotlight/sir_trevor/blocks/_browse_group_categories_block.html.erb +45 -0
  181. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb +8 -8
  182. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb +7 -7
  183. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +9 -7
  184. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb +5 -5
  185. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +4 -0
  186. data/app/views/spotlight/tags/_tag.html.erb +24 -0
  187. data/app/views/spotlight/tags/index.html.erb +12 -16
  188. data/app/views/spotlight/translations/_groups.html.erb +34 -0
  189. data/app/views/spotlight/translations/_import.html.erb +5 -5
  190. data/app/views/spotlight/translations/edit.html.erb +6 -0
  191. data/app/views/spotlight/translations/show.yaml.yamlbuilder +6 -0
  192. data/config/i18n-tasks.yml +6 -0
  193. data/config/locales/spotlight.ar.yml +11 -1
  194. data/config/locales/spotlight.en.yml +283 -87
  195. data/config/routes.rb +39 -1
  196. data/db/migrate/20210113092223_create_spotlight_groups.rb +23 -0
  197. data/db/migrate/20210122082032_create_job_trackers.rb +22 -0
  198. data/db/migrate/20210126123041_create_events.rb +15 -0
  199. data/db/migrate/20210305070001_remove_class_from_sirtrevor_image_blocks.rb +20 -0
  200. data/db/migrate/20210305171150_create_bulk_updates.rb +9 -0
  201. data/db/migrate/20210308090000_migrate_caption_values_for_title_key.rb +29 -0
  202. data/lib/generators/spotlight/install_generator.rb +5 -5
  203. data/lib/generators/spotlight/scaffold_resource_generator.rb +5 -13
  204. data/lib/generators/spotlight/templates/config/initializers/riiif.rb +7 -5
  205. data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +1 -1
  206. data/lib/generators/spotlight/templates/solr/config/schema.xml +1 -1
  207. data/lib/migration/iiif.rb +3 -3
  208. data/lib/spotlight/engine.rb +26 -4
  209. data/lib/spotlight/version.rb +1 -1
  210. data/spec/controllers/spotlight/about_pages_controller_spec.rb +3 -3
  211. data/spec/controllers/spotlight/browse_controller_spec.rb +23 -6
  212. data/spec/controllers/spotlight/bulk_actions_controller_spec.rb +124 -0
  213. data/spec/controllers/spotlight/bulk_updates_controller_spec.rb +77 -0
  214. data/spec/controllers/spotlight/catalog_controller_spec.rb +15 -13
  215. data/spec/controllers/spotlight/contacts_controller_spec.rb +2 -2
  216. data/spec/controllers/spotlight/feature_pages_controller_spec.rb +11 -0
  217. data/spec/controllers/spotlight/featured_images_controller_spec.rb +3 -3
  218. data/spec/controllers/spotlight/groups_controller_spec.rb +103 -0
  219. data/spec/controllers/spotlight/home_pages_controller_spec.rb +1 -1
  220. data/spec/controllers/spotlight/job_trackers_controller_spec.rb +37 -0
  221. data/spec/controllers/spotlight/searches_controller_spec.rb +10 -3
  222. data/spec/controllers/spotlight/tags_controller_spec.rb +5 -1
  223. data/spec/controllers/spotlight/view_configurations_controller_spec.rb +1 -1
  224. data/spec/examples.txt +1501 -1410
  225. data/spec/factories/bulk_updates.rb +15 -0
  226. data/spec/factories/exhibits.rb +4 -0
  227. data/spec/factories/group.rb +17 -0
  228. data/spec/factories/job_trackers.rb +11 -0
  229. data/spec/factories/searches.rb +11 -1
  230. data/spec/factories/users.rb +27 -8
  231. data/spec/features/add_items_spec.rb +10 -5
  232. data/spec/features/browse_category_admin_spec.rb +37 -5
  233. data/spec/features/browse_category_navigation_spec.rb +44 -0
  234. data/spec/features/browse_category_spec.rb +2 -2
  235. data/spec/features/bulk_actions_spec.rb +72 -0
  236. data/spec/features/catalog_spec.rb +3 -2
  237. data/spec/features/dashboard_spec.rb +2 -2
  238. data/spec/features/edit_search_fields_spec.rb +2 -2
  239. data/spec/features/exhibits/edit_metadata_fields_spec.rb +1 -1
  240. data/spec/features/exhibits/translation_editing_spec.rb +55 -6
  241. data/spec/features/home_page_spec.rb +5 -5
  242. data/spec/features/import_exhibit_spec.rb +5 -1
  243. data/spec/features/item_admin_spec.rb +4 -4
  244. data/spec/features/javascript/about_page_admin_spec.rb +1 -1
  245. data/spec/features/javascript/block_controls_spec.rb +1 -1
  246. data/spec/features/javascript/blocks/browse_group_categories_block_spec.rb +64 -0
  247. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +4 -4
  248. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +27 -1
  249. data/spec/features/javascript/browse_group_admin_spec.rb +45 -0
  250. data/spec/features/javascript/edit_in_place_spec.rb +3 -3
  251. data/spec/features/javascript/feature_page_admin_spec.rb +1 -1
  252. data/spec/features/javascript/reindex_monitor_spec.rb +1 -1
  253. data/spec/features/javascript/search_config_admin_spec.rb +1 -1
  254. data/spec/features/report_a_problem_spec.rb +1 -1
  255. data/spec/features/site_users_management_spec.rb +5 -5
  256. data/spec/fixtures/bulk-update-template.csv +57 -0
  257. data/spec/fixtures/updated-bulk-update-template-w-tags.csv +4 -0
  258. data/spec/fixtures/updated-bulk-update-template.csv +4 -0
  259. data/spec/helpers/spotlight/application_helper_spec.rb +5 -6
  260. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +3 -3
  261. data/spec/helpers/spotlight/pages_helper_spec.rb +8 -15
  262. data/spec/helpers/spotlight/roles_helper_spec.rb +1 -1
  263. data/spec/i18n_spec.rb +1 -0
  264. data/spec/jobs/spotlight/add_tags_job_spec.rb +34 -0
  265. data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +4 -1
  266. data/spec/jobs/spotlight/change_visibility_job_spec.rb +30 -0
  267. data/spec/jobs/spotlight/process_bulk_updates_csv_job_spec.rb +78 -0
  268. data/spec/jobs/spotlight/reindex_exhibit_job_spec.rb +43 -0
  269. data/spec/jobs/spotlight/reindex_job_spec.rb +34 -60
  270. data/spec/jobs/spotlight/remove_tags_job_spec.rb +39 -0
  271. data/spec/lib/migration/iiif_spec.rb +1 -1
  272. data/spec/models/sir_trevor_rails/blocks/browse_group_categories_block_spec.rb +41 -0
  273. data/spec/models/spotlight/ability_spec.rb +27 -0
  274. data/spec/models/spotlight/background_job_progress_spec.rb +137 -0
  275. data/spec/models/spotlight/blacklight_configuration_spec.rb +22 -17
  276. data/spec/models/spotlight/browse_category_search_builder_spec.rb +49 -0
  277. data/spec/models/spotlight/exhibit_spec.rb +13 -59
  278. data/spec/models/spotlight/featured_image_spec.rb +1 -1
  279. data/spec/models/spotlight/group_spec.rb +19 -0
  280. data/spec/models/spotlight/main_navigation_spec.rb +1 -1
  281. data/spec/models/spotlight/resource_spec.rb +89 -87
  282. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +9 -10
  283. data/spec/models/spotlight/role_spec.rb +1 -1
  284. data/spec/models/spotlight/search_spec.rb +30 -3
  285. data/spec/models/spotlight/solr_document/atomic_updates_spec.rb +10 -0
  286. data/spec/models/spotlight/solr_document_sidecar_spec.rb +1 -0
  287. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +1 -1
  288. data/spec/services/spotlight/bulk_updates_csv_template_service_spec.rb +26 -0
  289. data/spec/services/spotlight/etl/context_spec.rb +66 -0
  290. data/spec/services/spotlight/etl/executor_spec.rb +149 -0
  291. data/spec/services/spotlight/etl/pipeline_spec.rb +22 -0
  292. data/spec/services/spotlight/etl/solr_loader_spec.rb +76 -0
  293. data/spec/services/spotlight/etl/step_spec.rb +70 -0
  294. data/spec/services/spotlight/exhibit_import_export_service_spec.rb +48 -1
  295. data/spec/spec_helper.rb +3 -6
  296. data/spec/support/features/test_features_helpers.rb +15 -0
  297. data/spec/test_app_templates/Gemfile.extra +2 -0
  298. data/spec/test_app_templates/catalog_controller.rb +6 -3
  299. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -2
  300. data/spec/uploaders/spotlight/featured_image_uploader_spec.rb +2 -2
  301. data/spec/views/shared/_exhibit_navbar.html.erb_spec.rb +1 -1
  302. data/spec/views/spotlight/browse/index.html.erb_spec.rb +2 -0
  303. data/spec/views/spotlight/catalog/_edit_default.html.erb_spec.rb +1 -1
  304. data/spec/views/spotlight/dashboards/_analytics.html.erb_spec.rb +1 -1
  305. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +30 -25
  306. data/spec/views/spotlight/job_trackers/show.html.erb_spec.rb +65 -0
  307. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -4
  308. data/spec/views/spotlight/pages/show.html.erb_spec.rb +1 -0
  309. data/spec/views/spotlight/search_configurations/_facets.html.erb_spec.rb +1 -1
  310. data/spec/views/spotlight/sir_trevor/blocks/_browse_block.html.erb_spec.rb +1 -1
  311. data/spec/views/spotlight/sir_trevor/blocks/_iframe_block.html.erb_spec.rb +1 -1
  312. data/spec/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb_spec.rb +1 -1
  313. data/spec/views/spotlight/sir_trevor/blocks/_rule_block.html.erb_spec.rb +1 -1
  314. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb_spec.rb +8 -4
  315. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +7 -2
  316. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +8 -5
  317. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +3 -2
  318. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +9 -4
  319. data/spec/views/spotlight/tags/index.html.erb_spec.rb +5 -2
  320. data/vendor/assets/javascripts/tiny-slider.js +3218 -0
  321. data/vendor/assets/stylesheets/tiny-slider.css +1 -0
  322. metadata +471 -281
  323. data/app/assets/images/blacklight/add_circle.svg +0 -1
  324. data/app/assets/images/blacklight/custom_fullscreen.svg +0 -1
  325. data/app/assets/images/blacklight/remove_circle.svg +0 -1
  326. data/app/assets/images/blacklight/resize_small.svg +0 -1
  327. data/app/models/concerns/spotlight/resources/open_graph.rb +0 -36
  328. data/app/models/spotlight/reindex_progress.rb +0 -78
  329. data/app/models/spotlight/reindexing_log_entry.rb +0 -42
  330. data/app/services/spotlight/resources/iiif_builder.rb +0 -19
  331. data/app/services/spotlight/solr_document_builder.rb +0 -77
  332. data/app/services/spotlight/upload_solr_document_builder.rb +0 -57
  333. data/spec/factories/reindexing_log_entries.rb +0 -54
  334. data/spec/models/spotlight/reindex_progress_spec.rb +0 -122
  335. data/spec/models/spotlight/reindexing_log_entry_spec.rb +0 -129
  336. data/spec/models/spotlight/resources/open_graph_spec.rb +0 -65
  337. data/spec/services/spotlight/solr_document_builder_spec.rb +0 -66
  338. data/vendor/assets/javascripts/handlebars-v1.3.0.js +0 -2746
@@ -27,7 +27,7 @@ describe 'Report a Problem', type: :feature do
27
27
 
28
28
  click_on 'Feedback'
29
29
 
30
- expect(page).to have_css('h2', text: 'Contact Us', visible: true)
30
+ expect(page).to have_css('h2', text: 'Contact us', visible: true)
31
31
  end
32
32
 
33
33
  it 'accepts a problem report', js: true do
@@ -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
 
@@ -104,7 +104,7 @@ describe Spotlight::CrudLinkHelpers, type: :helper do
104
104
  describe '#action_default_value' do
105
105
  it 'attempts i18n lookups for models' do
106
106
  expect(I18n).to receive(:t).with(:'helpers.action.spotlight/feature_page.edit',
107
- model: some_model.class.model_name.human,
107
+ model: some_model.class.model_name.human.downcase,
108
108
  default: [:'helpers.action.edit', 'Edit Feature page'])
109
109
  expect(helper.send(:action_default_value, some_model))
110
110
  end
@@ -112,14 +112,14 @@ describe Spotlight::CrudLinkHelpers, type: :helper do
112
112
  it 'attempts i18n lookups for unpersisted models' do
113
113
  some_model = Spotlight::FeaturePage.new
114
114
  expect(I18n).to receive(:t).with(:'helpers.action.spotlight/feature_page.create',
115
- model: some_model.class.model_name.human,
115
+ model: some_model.class.model_name.human.downcase,
116
116
  default: [:'helpers.action.create', 'Create Feature page'])
117
117
  expect(helper.send(:action_default_value, some_model))
118
118
  end
119
119
 
120
120
  it 'attempts i18n lookups for models with an explicit action' do
121
121
  expect(I18n).to receive(:t).with(:'helpers.action.spotlight/feature_page.custom_action',
122
- model: some_model.class.model_name.human,
122
+ model: some_model.class.model_name.human.downcase,
123
123
  default: [:'helpers.action.custom_action', 'Custom action Feature page'])
124
124
  expect(helper.send(:action_default_value, some_model, :custom_action))
125
125
  end
@@ -12,21 +12,6 @@ describe Spotlight::PagesHelper, type: :helper do
12
12
  allow(helper).to receive_messages(blacklight_config: blacklight_config)
13
13
  end
14
14
 
15
- describe 'available_index_fields' do
16
- before do
17
- blacklight_config.index.title_field = :title_field
18
- blacklight_config.add_index_field 'x', label: 'X'
19
- end
20
-
21
- it 'lists the configured index fields' do
22
- expect(helper.available_index_fields).to include key: 'x', label: 'X'
23
- end
24
-
25
- it 'adds the title field if necessary' do
26
- expect(helper.available_index_fields).to include key: :title_field, label: 'Title'
27
- end
28
- end
29
-
30
15
  describe 'disable_save_pages_button?' do
31
16
  it 'returns true if there are no pages and we are on the about pages page' do
32
17
  expect(helper).to receive(:page_collection_name).and_return('about_pages')
@@ -106,6 +91,14 @@ describe Spotlight::PagesHelper, type: :helper do
106
91
  it 'handles nil input' do
107
92
  expect(helper.sir_trevor_markdown(nil)).to be_blank
108
93
  end
94
+
95
+ it 'retains paragraphs' do
96
+ expect(helper.sir_trevor_markdown('<p>First Line</p><p>Second Line</p>').chomp).to match(%r{<p>First Line</p>\s*<p>Second Line</p>})
97
+ end
98
+
99
+ it 'replaces line breaks with paragraphs' do
100
+ expect(helper.sir_trevor_markdown('First Line<br>Second Line').chomp).to match(%r{<p>First Line</p>\s*<p>Second Line</p>})
101
+ end
109
102
  end
110
103
 
111
104
  describe '#content_editor_class' do
@@ -2,6 +2,6 @@
2
2
 
3
3
  describe Spotlight::RolesHelper, type: :helper do
4
4
  it 'is a list of options' do
5
- expect(helper.roles_for_select).to eq('Admin' => 'admin', 'Curator' => 'curator')
5
+ expect(helper.roles_for_select).to eq('Admin' => 'admin', 'Curator' => 'curator', 'Viewer' => 'viewer')
6
6
  end
7
7
  end
data/spec/i18n_spec.rb CHANGED
@@ -13,6 +13,7 @@ RSpec.describe 'I18n' do
13
13
  end
14
14
 
15
15
  it 'does not have unused keys' do
16
+ puts unused_keys.inspect
16
17
  expect(unused_keys).to be_empty,
17
18
  "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
18
19
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Spotlight::AddTagsJob do
4
+ subject { described_class.new(solr_params: solr_params, exhibit: exhibit, tags: tags) }
5
+
6
+ let(:solr_params) { { q: 'map' } }
7
+ let(:exhibit) { FactoryBot.create(:exhibit) }
8
+ let(:tags) { 'hello,world' }
9
+
10
+ before do
11
+ allow(Spotlight::Engine.config).to receive_messages(bulk_actions_batch_size: 5)
12
+ end
13
+
14
+ it 'adds tags to SolrDocumentSidecar objects' do
15
+ subject.perform_now
16
+ response = exhibit.blacklight_config.repository.search(solr_params.merge('rows' => 999_999_999))
17
+ expect(response.total).to eq 55
18
+ expect(Spotlight::JobTracker.last).to have_attributes(
19
+ status: 'completed',
20
+ total: 55,
21
+ progress: 55,
22
+ job_class: 'Spotlight::AddTagsJob'
23
+ )
24
+ response.documents.each do |document|
25
+ expect(document.sidecar(exhibit).all_tags_list).to include('hello', 'world')
26
+ exhibit.tag(document.sidecar(exhibit), with: [], on: :tags)
27
+ end
28
+ exhibit.owned_tags.destroy_all
29
+ response.documents.each do |document|
30
+ document.sidecar(exhibit).destroy
31
+ document.reindex
32
+ end
33
+ end
34
+ end
@@ -48,7 +48,10 @@ describe Spotlight::AddUploadsFromCsv do
48
48
  expect(Spotlight::IndexingCompleteMailer).to have_received(:documents_indexed).with(
49
49
  data, exhibit, user,
50
50
  indexed_count: 1,
51
- errors: { 1 => array_including(match(/relative URI: x/)), 2 => array_including(match(/Upload is invalid/)) }
51
+ errors: {
52
+ 1 => array_including(match(Regexp.union(/relative URI: x/, /URI scheme '' not in whitelist:/))),
53
+ 2 => array_including(match(/Upload is invalid/))
54
+ }
52
55
  )
53
56
  end
54
57
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Spotlight::ChangeVisibilityJob do
4
+ subject { described_class.new(solr_params: solr_params, exhibit: exhibit, visibility: visibility) }
5
+
6
+ let(:solr_params) { { q: 'map' } }
7
+ let(:exhibit) { FactoryBot.create(:exhibit) }
8
+ let(:visibility) { 'private' }
9
+
10
+ before do
11
+ allow(Spotlight::Engine.config).to receive_messages(bulk_actions_batch_size: 5)
12
+ end
13
+
14
+ it 'sets the items based off of the visibility' do
15
+ subject.perform_now
16
+ response = exhibit.blacklight_config.repository.search(solr_params.merge('rows' => 999_999_999))
17
+ expect(response.total).to eq 55
18
+ expect(Spotlight::JobTracker.last).to have_attributes(
19
+ status: 'completed',
20
+ total: 55,
21
+ progress: 55,
22
+ job_class: 'Spotlight::ChangeVisibilityJob'
23
+ )
24
+ response.documents.each do |document|
25
+ expect(document.private?(exhibit)).to be true
26
+ document.make_public!(exhibit)
27
+ document.reindex
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ def tag_names(exhibit, id)
4
+ exhibit.blacklight_config.repository.find(id).documents.first.sidecar(exhibit).taggings.includes(:tag).map { |tagging| tagging&.tag&.name }
5
+ end
6
+
7
+ describe Spotlight::ProcessBulkUpdatesCsvJob do
8
+ subject { described_class.new(exhibit, bulk_update) }
9
+
10
+ let(:exhibit) { FactoryBot.create(:exhibit) }
11
+
12
+ describe 'visibility' do
13
+ let(:bulk_update) { FactoryBot.create(:bulk_update, exhibit: exhibit) }
14
+
15
+ it 'is updated' do
16
+ allow(SolrDocument.index.connection).to receive(:update).and_call_original
17
+ expect(exhibit.blacklight_config.repository.find('dq287tq6352').documents.first).not_to be_private(exhibit)
18
+
19
+ subject.perform_now
20
+
21
+ expect(exhibit.blacklight_config.repository.find('dq287tq6352').documents.first).to be_private(exhibit)
22
+ expect(SolrDocument.index.connection).to have_received(:update)
23
+ end
24
+
25
+ context 'with a row that does not change visibility' do
26
+ before do
27
+ sidecar = exhibit.solr_document_sidecars.find_or_create_by(document_type: 'SolrDocument', document_id: 'dq287tq6352')
28
+ sidecar.private!
29
+ end
30
+
31
+ it 'does not update solr' do
32
+ allow(SolrDocument.index.connection).to receive(:update)
33
+
34
+ subject.perform_now
35
+
36
+ expect(SolrDocument.index.connection).not_to have_received(:update)
37
+ end
38
+ end
39
+ end
40
+
41
+ describe 'tags' do
42
+ let(:bulk_update) { FactoryBot.create(:tagged_bulk_update, exhibit: exhibit) }
43
+
44
+ before do
45
+ document = exhibit.blacklight_config.repository.find('cz507zk0531').documents.first
46
+ exhibit.tag(document.sidecar(exhibit), with: 'CSV Tag1', on: :tags)
47
+ end
48
+
49
+ it 'are added/removed' do
50
+ allow(SolrDocument.index.connection).to receive(:update).and_call_original
51
+ expect(tag_names(exhibit, 'bm387cy2596')).to be_empty
52
+ expect(tag_names(exhibit, 'cz507zk0531')).to eq(['CSV Tag1'])
53
+ expect(tag_names(exhibit, 'dq287tq6352')).to be_empty
54
+ subject.perform_now
55
+ expect(tag_names(exhibit, 'bm387cy2596')).to eq(['CSV Tag1', 'CSV Tag2'])
56
+ expect(tag_names(exhibit, 'cz507zk0531')).to eq(['CSV Tag2'])
57
+ expect(tag_names(exhibit, 'dq287tq6352')).to eq(['CSV Tag1', 'CSV Tag2'])
58
+
59
+ # 3 updates plus the final commit
60
+ expect(SolrDocument.index.connection).to have_received(:update).exactly(4).times
61
+ end
62
+
63
+ context 'with a row that does not change visibility' do
64
+ before do
65
+ # set up the documents to match what's the in the spreadsheet already
66
+ subject.perform_now
67
+ end
68
+
69
+ it 'does not update solr' do
70
+ allow(SolrDocument.index.connection).to receive(:update)
71
+
72
+ subject.perform_now
73
+
74
+ expect(SolrDocument.index.connection).not_to have_received(:update)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Spotlight::ReindexExhibitJob do
4
+ let(:exhibit) { FactoryBot.create(:exhibit) }
5
+
6
+ before do
7
+ FactoryBot.create_list(:resource, 10, exhibit: exhibit)
8
+ allow(Spotlight::ReindexJob).to receive(:perform_now)
9
+ allow(Spotlight::ReindexJob).to receive(:perform_later)
10
+ end
11
+
12
+ context 'with a single batch' do
13
+ it 'runs the index job inline' do
14
+ described_class.perform_now(exhibit, batch_count: 1)
15
+
16
+ expect(Spotlight::ReindexJob).to have_received(:perform_now).once.with(exhibit, anything)
17
+ end
18
+ end
19
+
20
+ context 'with a fixed batch count' do
21
+ it 'enqueues that number of batches' do
22
+ described_class.perform_now(exhibit, batch_count: 2)
23
+
24
+ expect(Spotlight::ReindexJob).to have_received(:perform_later).twice.with(exhibit, hash_including(:start, :finish))
25
+ end
26
+ end
27
+
28
+ context 'with a dynamically generated batch count' do
29
+ it 'enqueues the right number of batches' do
30
+ described_class.perform_now(exhibit, batch_count: nil, batch_size: 2)
31
+
32
+ expect(Spotlight::ReindexJob).to have_received(:perform_later).exactly(5).times.with(exhibit, hash_including(:start, :finish))
33
+ end
34
+ end
35
+
36
+ context 'with a dynamically generated batch size' do
37
+ it 'figues out that number of batches' do
38
+ described_class.perform_now(exhibit, batch_count: nil, batch_size: nil)
39
+
40
+ expect(Spotlight::ReindexJob).to have_received(:perform_later).exactly(3).times.with(exhibit, hash_including(:start, :finish))
41
+ end
42
+ end
43
+ end
@@ -4,67 +4,13 @@ describe Spotlight::ReindexJob do
4
4
  include ActiveJob::TestHelper
5
5
 
6
6
  let(:exhibit) { FactoryBot.create(:exhibit) }
7
- let(:resource) { FactoryBot.create(:resource) }
7
+ let(:resource) { FactoryBot.create(:resource, exhibit: exhibit) }
8
8
  let(:user) { FactoryBot.create(:user) }
9
- let(:log_entry) { Spotlight::ReindexingLogEntry.create(exhibit: exhibit, user: user) }
10
9
 
11
10
  before do
12
- ActiveJob::Base.queue_adapter = :test
13
11
  allow_any_instance_of(Spotlight::Resource).to receive(:reindex)
14
12
  end
15
13
 
16
- context 'with an exhibit' do
17
- subject { described_class.new(exhibit) }
18
-
19
- before do
20
- exhibit.resources << resource
21
- exhibit.save
22
- end
23
-
24
- it 'attempts to reindex every resource in the exhibit' do
25
- # ActiveJob will reload the collection, so we go through a little trouble:
26
- expect_any_instance_of(Spotlight::Resource).to receive(:reindex) do |thingy|
27
- expect(exhibit.resources).to include thingy
28
- end
29
-
30
- subject.perform_now
31
- end
32
-
33
- context 'with a log_entry' do
34
- subject { described_class.new(exhibit, log_entry) }
35
-
36
- it 'marks the log entry as started' do
37
- expect(log_entry).to receive(:in_progress!)
38
- subject.perform_now
39
- end
40
-
41
- it 'marks the log entry as successful if there is no error' do
42
- expect(log_entry).to receive(:succeeded!)
43
- subject.perform_now
44
- end
45
-
46
- it 'marks the log entry as failed if there is an error' do
47
- unexpected_error = StandardError.new
48
- # it'd be more realistic to raise on resource#reindex, but that's already stubbed above, so this'll have to do
49
- expect(subject).to receive(:perform).with(exhibit, log_entry).and_raise unexpected_error
50
- expect(log_entry).to receive(:failed!)
51
- expect { subject.perform_now }.to raise_error unexpected_error
52
- end
53
-
54
- it 'updates the items_reindexed_estimate field on the log entry' do
55
- expect(log_entry).to receive(:update).with(items_reindexed_estimate: 1)
56
- subject.perform_now
57
- end
58
-
59
- it 'passes log_entry to the resource.reindex call' do
60
- # ActiveJob will reload the collection, so we go through a little trouble:
61
- expect_any_instance_of(Spotlight::Resource).to receive(:reindex).with(log_entry).exactly(:once)
62
- # expect(resource).to receive(:reindex).with(log_entry)
63
- subject.perform_now
64
- end
65
- end
66
- end
67
-
68
14
  context 'with a resource' do
69
15
  subject { described_class.new(resource) }
70
16
 
@@ -72,34 +18,62 @@ describe Spotlight::ReindexJob do
72
18
  expect(resource).to receive(:reindex)
73
19
  subject.perform_now
74
20
  end
21
+
22
+ it 'adds some job tracking events' do
23
+ expect { subject.perform_now }.to change(Spotlight::Event, :count).by(1)
24
+ end
75
25
  end
76
26
 
77
27
  describe 'validity' do
78
- subject { described_class.new(resource, nil, 'xyz') }
28
+ subject { described_class.new(resource, 'validity_token' => 'xyz') }
79
29
 
80
30
  let(:mock_checker) { instance_double(Spotlight::ValidityChecker) }
81
31
 
82
32
  before do
83
33
  allow(described_class).to receive(:validity_checker).and_return(mock_checker)
84
- allow(mock_checker).to receive(:mint).with(resource).and_return('xyz')
34
+ allow(mock_checker).to receive(:mint).with(anything).and_return('xyz')
85
35
  end
86
36
 
87
37
  it 'mints a new validity token' do
88
- expect { described_class.perform_later(resource) }.to have_enqueued_job(described_class).with(resource, nil, 'xyz')
38
+ expect { described_class.perform_later(resource) }.to have_enqueued_job(described_class).with(resource, 'validity_token' => 'xyz')
89
39
  end
90
40
 
91
41
  it 'does nothing if the token is no longer valid' do
92
- allow(mock_checker).to receive(:check).with(resource, 'xyz').and_return(false)
42
+ allow(mock_checker).to receive(:check).with(subject, validity_token: 'xyz').and_return(false)
93
43
  expect(resource).not_to receive(:reindex)
94
44
 
95
45
  subject.perform_now
96
46
  end
97
47
 
98
48
  it 'indexes the resource if the token is valid' do
99
- allow(mock_checker).to receive(:check).with(resource, 'xyz').and_return(true)
49
+ allow(mock_checker).to receive(:check).with(subject, validity_token: 'xyz').and_return(true)
100
50
  expect(resource).to receive(:reindex)
101
51
 
102
52
  subject.perform_now
103
53
  end
104
54
  end
55
+
56
+ context 'with start and finish' do
57
+ it 'indexes the resources within that page' do
58
+ count = 0
59
+ allow_any_instance_of(Spotlight::Resource).to receive(:reindex) do
60
+ count += 1
61
+ end
62
+
63
+ described_class.perform_now(exhibit, start: 0, finish: resource.id)
64
+
65
+ expect(count).to eq 1
66
+ end
67
+
68
+ it 'does not index resources off that page' do
69
+ count = 0
70
+ allow_any_instance_of(Spotlight::Resource).to receive(:reindex) do
71
+ count += 1
72
+ end
73
+
74
+ described_class.perform_now(exhibit, start: resource.id + 1, finish: resource.id + 500)
75
+
76
+ expect(count).to eq 0
77
+ end
78
+ end
105
79
  end