curation_concerns 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -9
  3. data/.rspec +1 -1
  4. data/.rubocop.yml +185 -0
  5. data/.travis.yml +0 -10
  6. data/CONTRIBUTING.md +117 -0
  7. data/Gemfile +5 -2
  8. data/README.md +18 -11
  9. data/Rakefile +23 -11
  10. data/VERSION +1 -1
  11. data/app/assets/images/audio.png +0 -0
  12. data/app/assets/images/loading.gif +0 -0
  13. data/app/assets/images/progressbar.gif +0 -0
  14. data/app/assets/javascripts/curation_concerns/application.js +2 -8
  15. data/app/assets/javascripts/curation_concerns/curation_concerns.js +1 -15
  16. data/app/assets/javascripts/curation_concerns/facet_mine.js +4 -10
  17. data/app/assets/javascripts/curation_concerns/fileupload.js +6 -0
  18. data/app/assets/javascripts/curation_concerns/uploader.js +183 -0
  19. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +3 -0
  20. data/app/assets/stylesheets/curation_concerns/_positioning.scss +6 -0
  21. data/app/assets/stylesheets/curation_concerns/fileupload/jquery.fileupload-ui.scss +86 -0
  22. data/app/assets/stylesheets/curation_concerns/fileupload/thumbnail-scaling.css +3 -0
  23. data/app/assets/stylesheets/curation_concerns/fileupload.scss +48 -0
  24. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +10 -0
  25. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +1 -1
  26. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +0 -10
  27. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +7 -8
  28. data/app/controllers/concerns/curation_concerns/api.rb +77 -0
  29. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +30 -12
  30. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +9 -276
  31. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +51 -40
  32. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +60 -30
  33. data/app/controllers/concerns/curation_concerns/download_behavior.rb +51 -37
  34. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +29 -29
  35. data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +198 -0
  36. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +27 -20
  37. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +2 -7
  38. data/app/controllers/concerns/curation_concerns/parent_container.rb +20 -4
  39. data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +48 -0
  40. data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +75 -0
  41. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +0 -1
  42. data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +38 -0
  43. data/app/controllers/concerns/curation_concerns/welcome_controller_behavior.rb +8 -0
  44. data/app/controllers/concerns/curation_concerns/without_namespace.rb +2 -1
  45. data/app/controllers/curation_concerns/classify_concerns_controller.rb +9 -9
  46. data/app/controllers/curation_concerns/file_sets_controller.rb +5 -0
  47. data/app/controllers/curation_concerns/permissions_controller.rb +2 -3
  48. data/app/controllers/curation_concerns/single_use_links_controller.rb +5 -0
  49. data/app/controllers/curation_concerns/single_use_links_viewer_controller.rb +21 -0
  50. data/app/controllers/downloads_controller.rb +0 -1
  51. data/app/controllers/embargoes_controller.rb +0 -2
  52. data/app/controllers/leases_controller.rb +0 -2
  53. data/app/controllers/registrations_controller.rb +1 -2
  54. data/app/controllers/upload_sets_controller.rb +3 -0
  55. data/app/controllers/welcome_controller.rb +3 -0
  56. data/app/forms/curation_concerns/forms/collection_edit_form.rb +18 -2
  57. data/app/forms/curation_concerns/forms/file_set_edit_form.rb +15 -0
  58. data/app/forms/curation_concerns/forms/work_form.rb +57 -0
  59. data/app/helpers/curation_concerns/ability_helper.rb +24 -24
  60. data/app/helpers/curation_concerns/catalog_helper.rb +9 -8
  61. data/app/helpers/curation_concerns/collections_helper.rb +9 -12
  62. data/app/helpers/curation_concerns/embargo_helper.rb +0 -2
  63. data/app/helpers/curation_concerns/file_set_helper.rb +31 -0
  64. data/app/helpers/curation_concerns/lease_helper.rb +0 -3
  65. data/app/helpers/curation_concerns/main_app_helpers.rb +1 -3
  66. data/app/helpers/curation_concerns/render_constraints_helper.rb +5 -5
  67. data/app/helpers/curation_concerns/search_paths_helper.rb +5 -7
  68. data/app/helpers/curation_concerns/title_helper.rb +3 -7
  69. data/app/helpers/curation_concerns/url_helper.rb +4 -6
  70. data/app/inputs/multifile_input.rb +8 -0
  71. data/app/jobs/visibility_copy_job.rb +22 -0
  72. data/app/presenters/curation_concerns/collection_presenter.rb +14 -32
  73. data/app/presenters/curation_concerns/embargo_presenter.rb +26 -0
  74. data/app/presenters/curation_concerns/file_set_presenter.rb +34 -0
  75. data/app/presenters/curation_concerns/lease_presenter.rb +30 -0
  76. data/app/presenters/curation_concerns/model_proxy.rb +27 -0
  77. data/app/presenters/curation_concerns/permission_badge.rb +61 -0
  78. data/app/presenters/curation_concerns/presenter_factory.rb +45 -0
  79. data/app/presenters/curation_concerns/presents_attributes.rb +25 -0
  80. data/app/presenters/curation_concerns/version_list_presenter.rb +18 -0
  81. data/app/presenters/curation_concerns/version_presenter.rb +27 -0
  82. data/app/presenters/curation_concerns/work_show_presenter.rb +33 -0
  83. data/app/renderers/curation_concerns/attribute_renderer.rb +75 -0
  84. data/app/search_builders/curation_concerns/deactivated_embargo_search_builder.rb +10 -0
  85. data/app/search_builders/curation_concerns/deactivated_lease_search_builder.rb +10 -0
  86. data/app/search_builders/curation_concerns/embargo_search_builder.rb +23 -0
  87. data/app/search_builders/curation_concerns/expired_embargo_search_builder.rb +11 -0
  88. data/app/search_builders/curation_concerns/expired_lease_search_builder.rb +11 -0
  89. data/app/search_builders/curation_concerns/lease_search_builder.rb +23 -0
  90. data/app/search_builders/curation_concerns/search_builder.rb +10 -16
  91. data/app/services/curation_concerns/curation_concern.rb +0 -5
  92. data/app/services/curation_concerns/embargo_service.rb +26 -4
  93. data/app/services/curation_concerns/lease_service.rb +14 -5
  94. data/app/services/curation_concerns/parent_service.rb +19 -0
  95. data/app/services/curation_concerns/restriction_service.rb +24 -0
  96. data/app/services/rights_service.rb +14 -0
  97. data/app/views/catalog/_action_menu_partials/_collection.html.erb +1 -1
  98. data/app/views/catalog/_action_menu_partials/_default.html.erb +5 -3
  99. data/app/views/catalog/_document_list.html.erb +1 -1
  100. data/app/views/catalog/index.html.erb +1 -35
  101. data/app/views/collections/_edit_descriptions.html.erb +3 -4
  102. data/app/views/collections/_form.html.erb +1 -1
  103. data/app/views/collections/_form_permission.html.erb +1 -1
  104. data/app/views/collections/_search_form.html.erb +10 -0
  105. data/app/views/collections/_show_actions.html.erb +3 -3
  106. data/app/views/collections/_sort_and_per_page.html.erb +2 -2
  107. data/app/views/collections/show.html.erb +6 -6
  108. data/app/views/curation_concerns/base/_attribute_rows.html.erb +7 -0
  109. data/app/views/curation_concerns/base/_attributes.html.erb +6 -13
  110. data/app/views/curation_concerns/base/_form.html.erb +4 -5
  111. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +2 -4
  112. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +3 -5
  113. data/app/views/curation_concerns/base/_form_permission.html.erb +13 -26
  114. data/app/views/curation_concerns/base/_form_permission_note.html.erb +15 -0
  115. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +2 -2
  116. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +2 -2
  117. data/app/views/curation_concerns/base/_form_representative_image.html.erb +16 -4
  118. data/app/views/curation_concerns/base/_form_rights.html.erb +17 -0
  119. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +4 -9
  120. data/app/views/curation_concerns/base/_related_files.html.erb +4 -4
  121. data/app/views/curation_concerns/base/_representative_media.html.erb +2 -4
  122. data/app/views/curation_concerns/base/_versioning.html.erb +23 -0
  123. data/app/views/curation_concerns/base/show.html.erb +13 -10
  124. data/app/views/curation_concerns/base/show.json.jbuilder +1 -0
  125. data/app/views/curation_concerns/base/versions.html.erb +6 -0
  126. data/app/views/curation_concerns/file_sets/_actions.html.erb +16 -0
  127. data/app/views/curation_concerns/file_sets/_file_set.html.erb +12 -0
  128. data/app/views/curation_concerns/{generic_files → file_sets}/_form.html.erb +7 -7
  129. data/app/views/curation_concerns/file_sets/_multiple_upload.html.erb +3 -0
  130. data/app/views/curation_concerns/{generic_files → file_sets}/edit.html.erb +0 -0
  131. data/app/views/curation_concerns/file_sets/jq_upload.json.jbuilder +8 -0
  132. data/app/views/curation_concerns/file_sets/media_display/_audio.html.erb +6 -0
  133. data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +4 -0
  134. data/app/views/curation_concerns/file_sets/media_display/_image.html.erb +8 -0
  135. data/app/views/curation_concerns/file_sets/media_display/_office_document.html.erb +7 -0
  136. data/app/views/curation_concerns/file_sets/media_display/_pdf.html.erb +7 -0
  137. data/app/views/curation_concerns/file_sets/media_display/_video.html.erb +6 -0
  138. data/app/views/curation_concerns/file_sets/show.html.erb +15 -0
  139. data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -0
  140. data/app/views/curation_concerns/file_sets/upload/_alerts.html.erb +19 -0
  141. data/app/views/curation_concerns/file_sets/upload/_form.html.erb +6 -0
  142. data/app/views/curation_concerns/file_sets/upload/_form_fields.html.erb +45 -0
  143. data/app/views/curation_concerns/file_sets/upload/_script_templates.html.erb +61 -0
  144. data/app/views/curation_concerns/single_use_links/new_download.html.erb +5 -0
  145. data/app/views/curation_concerns/single_use_links/new_show.html.erb +5 -0
  146. data/app/views/curation_concerns/single_use_links_viewer/show.html.erb +10 -0
  147. data/app/views/error/single_use_error.html.erb +19 -0
  148. data/app/views/layouts/error.html.erb +33 -0
  149. data/app/views/leases/_list_expired_active_leases.html.erb +6 -1
  150. data/app/views/records/_rights_modal.html.erb +1 -0
  151. data/app/views/records/edit_fields/_default.html.erb +5 -0
  152. data/app/views/records/show_fields/_default.html.erb +6 -0
  153. data/app/views/shared/_add_content.html.erb +2 -14
  154. data/app/views/shared/_add_works.html.erb +14 -0
  155. data/app/views/shared/_my_actions.html.erb +9 -1
  156. data/app/views/shared/_site_actions.html.erb +1 -1
  157. data/app/views/shared/_site_search.html.erb +7 -7
  158. data/app/views/upload_sets/_edit.js.erb +15 -0
  159. data/app/views/upload_sets/_metadata.html.erb +50 -0
  160. data/app/views/upload_sets/_more_metadata.html.erb +7 -0
  161. data/app/views/upload_sets/edit.html.erb +26 -0
  162. data/app/views/{catalog/_home_text.html.erb → welcome/index.html.erb} +1 -0
  163. data/config/initializers/simple_form.rb +14 -0
  164. data/config/jetty.yml +5 -0
  165. data/config/locales/curation_concerns.en.yml +25 -4
  166. data/config/routes.rb +5 -0
  167. data/curation_concerns.gemspec +4 -6
  168. data/lib/curation_concerns/callbacks/registry.rb +48 -0
  169. data/lib/curation_concerns/callbacks.rb +26 -0
  170. data/lib/curation_concerns/controller_resource.rb +4 -4
  171. data/lib/curation_concerns/engine.rb +4 -2
  172. data/lib/curation_concerns/rails/routes.rb +23 -19
  173. data/lib/curation_concerns/single_use_error.rb +3 -0
  174. data/lib/curation_concerns/spec_support.rb +0 -2
  175. data/lib/curation_concerns/version.rb +1 -1
  176. data/lib/curation_concerns.rb +1 -2
  177. data/lib/generators/curation_concerns/install_generator.rb +34 -30
  178. data/lib/generators/curation_concerns/templates/catalog_controller.rb +236 -0
  179. data/lib/generators/curation_concerns/templates/config/authorities/rights.yml +19 -0
  180. data/lib/generators/curation_concerns/templates/{curation_concerns.css.scss → curation_concerns.scss} +0 -0
  181. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +1 -1
  182. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +1 -1
  183. data/lib/generators/curation_concerns/work/templates/form.rb.erb +8 -0
  184. data/lib/generators/curation_concerns/work/templates/form_spec.rb.erb +10 -0
  185. data/lib/generators/curation_concerns/work/templates/model.rb.erb +2 -2
  186. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +1 -1
  187. data/lib/generators/curation_concerns/work/work_generator.rb +31 -26
  188. data/spec/abilities/collection_abilities_spec.rb +13 -13
  189. data/spec/abilities/embargo_and_lease_ability_spec.rb +23 -0
  190. data/spec/abilities/file_set_abilities_spec.rb +67 -0
  191. data/spec/abilities/generic_work_abilities_spec.rb +12 -12
  192. data/spec/actors/curation_concerns/embargo_actor_spec.rb +38 -0
  193. data/spec/actors/curation_concerns/file_set_actor_spec.rb +180 -0
  194. data/spec/actors/curation_concerns/lease_actor_spec.rb +39 -0
  195. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +44 -38
  196. data/spec/actors/curation_concerns/work_actor_spec.rb +121 -63
  197. data/spec/controllers/catalog_controller_spec.rb +30 -32
  198. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +2 -3
  199. data/spec/controllers/curation_concerns/collections_controller_spec.rb +93 -76
  200. data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +106 -0
  201. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +237 -0
  202. data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +85 -0
  203. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +84 -72
  204. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +8 -11
  205. data/spec/controllers/curation_concerns/single_use_links_controller_spec.rb +79 -0
  206. data/spec/controllers/curation_concerns/single_use_links_viewer_controller_spec.rb +74 -0
  207. data/spec/controllers/downloads_controller_spec.rb +49 -24
  208. data/spec/controllers/embargoes_controller_spec.rb +42 -51
  209. data/spec/controllers/leases_controller_spec.rb +53 -42
  210. data/spec/controllers/upload_sets_controller_spec.rb +76 -0
  211. data/spec/controllers/welcome_controller_spec.rb +12 -0
  212. data/spec/factories/collections.rb +5 -1
  213. data/spec/factories/{generic_files.rb → file_sets.rb} +6 -6
  214. data/spec/factories/generic_works.rb +5 -6
  215. data/spec/factories/users.rb +2 -4
  216. data/spec/features/add_file_spec.rb +11 -12
  217. data/spec/features/catalog_search_spec.rb +43 -0
  218. data/spec/features/collection_spec.rb +61 -46
  219. data/spec/features/create_work_spec.rb +26 -19
  220. data/spec/features/embargo_spec.rb +13 -12
  221. data/spec/features/lease_spec.rb +15 -16
  222. data/spec/features/update_file_spec.rb +11 -13
  223. data/spec/features/work_generator_spec.rb +34 -26
  224. data/spec/{helpers/curation_concerns/.keep → fixtures/empty_file.txt} +0 -0
  225. data/spec/fixtures/test.pdf +0 -0
  226. data/spec/forms/collection_edit_form_spec.rb +53 -9
  227. data/spec/forms/file_set_edit_form_spec.rb +53 -0
  228. data/spec/forms/work_form_spec.rb +54 -0
  229. data/spec/helpers/catalog_helper_spec.rb +9 -10
  230. data/spec/helpers/configuration_helper_spec.rb +1 -2
  231. data/spec/helpers/curation_concerns/collections_helper_spec.rb +8 -9
  232. data/spec/helpers/curation_concerns/file_set_helper_spec.rb +61 -0
  233. data/spec/helpers/render_constraints_helper_spec.rb +4 -4
  234. data/spec/helpers/url_helper_spec.rb +8 -7
  235. data/spec/indexers/collection_indexer_spec.rb +14 -0
  236. data/spec/indexers/file_set_indexing_service_spec.rb +69 -0
  237. data/spec/indexers/generic_work_indexing_service_spec.rb +22 -0
  238. data/spec/inputs/multifile_input_spec.rb +32 -0
  239. data/spec/jobs/active_fedora_id_based_job_spec.rb +10 -8
  240. data/spec/jobs/audit_job_spec.rb +28 -20
  241. data/spec/jobs/characterize_job_spec.rb +10 -15
  242. data/spec/jobs/create_derivatives_job_spec.rb +11 -9
  243. data/spec/jobs/import_url_job_spec.rb +14 -21
  244. data/spec/jobs/ingest_file_job_spec.rb +45 -0
  245. data/spec/jobs/ingest_local_file_job_spec.rb +13 -15
  246. data/spec/jobs/upload_set_update_job_spec.rb +30 -0
  247. data/spec/jobs/visibility_copy_job_spec.rb +61 -0
  248. data/spec/lib/curation_concerns/callbacks/registry_spec.rb +54 -0
  249. data/spec/lib/curation_concerns/callbacks_spec.rb +27 -0
  250. data/spec/lib/curation_concerns/messages_spec.rb +29 -30
  251. data/spec/lib/curation_concerns/readable_permissions_spec.rb +18 -20
  252. data/spec/lib/curation_concerns/writable_permissions_spec.rb +2 -4
  253. data/spec/matchers/metadata_field_matchers.rb +1 -1
  254. data/spec/matchers/response_matchers.rb +2 -2
  255. data/spec/matchers.rb +3 -2
  256. data/spec/models/checksum_audit_log_spec.rb +37 -32
  257. data/spec/models/curation_concerns/collection_behavior_spec.rb +50 -37
  258. data/spec/models/curation_concerns/file_set/derivatives_spec.rb +84 -0
  259. data/spec/models/curation_concerns/work_behavior_spec.rb +53 -0
  260. data/spec/models/file_set_spec.rb +601 -0
  261. data/spec/models/generic_work_spec.rb +15 -14
  262. data/spec/models/single_use_link_spec.rb +69 -0
  263. data/spec/models/solr_document_spec.rb +67 -0
  264. data/spec/models/upload_set_spec.rb +39 -0
  265. data/spec/models/user_spec.rb +7 -8
  266. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +8 -24
  267. data/spec/presenters/curation_concerns/file_set_presenter_spec.rb +59 -0
  268. data/spec/presenters/curation_concerns/permission_badge_spec.rb +29 -0
  269. data/spec/presenters/curation_concerns/presenter_factory_spec.rb +29 -0
  270. data/spec/presenters/curation_concerns/version_list_presenter_spec.rb +32 -0
  271. data/spec/presenters/curation_concerns/version_presenter_spec.rb +51 -0
  272. data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +35 -0
  273. data/spec/presenters/embargo_presenter_spec.rb +48 -0
  274. data/spec/presenters/lease_presenter_spec.rb +48 -0
  275. data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +14 -0
  276. data/spec/routing/curation_concerns/routes_spec.rb +38 -12
  277. data/spec/routing/route_spec.rb +38 -39
  278. data/spec/search_builders/curation_concerns/embargo_search_builder_spec.rb +17 -0
  279. data/spec/search_builders/curation_concerns/lease_search_builder_spec.rb +17 -0
  280. data/spec/search_builders/curation_concerns/search_builder_spec.rb +60 -0
  281. data/spec/services/derivative_path_spec.rb +16 -0
  282. data/spec/services/embargo_service_spec.rb +15 -14
  283. data/spec/services/file_set_audit_service_spec.rb +71 -0
  284. data/spec/services/lease_service_spec.rb +13 -13
  285. data/spec/services/lock_manager_spec.rb +12 -0
  286. data/spec/services/parent_service_spec.rb +13 -0
  287. data/spec/services/persist_derivatives_spec.rb +24 -0
  288. data/spec/services/persist_directly_contained_output_file_service_spec.rb +14 -0
  289. data/spec/services/repository_audit_service_spec.rb +8 -7
  290. data/spec/services/rights_service_spec.rb +17 -0
  291. data/spec/services/thumbnail_path_service_spec.rb +43 -0
  292. data/spec/services/versioning_service_spec.rb +8 -9
  293. data/spec/spec_helper.rb +21 -13
  294. data/spec/support/curation_concerns/factory_helpers.rb +1 -0
  295. data/spec/support/features/fixture_file_upload.rb +3 -1
  296. data/spec/support/features/session_helpers.rb +3 -4
  297. data/spec/support/features.rb +1 -4
  298. data/spec/support/input_support.rb +11 -0
  299. data/spec/support/matchers/api_responses.rb +22 -0
  300. data/spec/support/shared/shared_examples_has_dc_metadata.rb +0 -2
  301. data/spec/support/shared/shared_examples_is_embargoable.rb +1 -3
  302. data/spec/support/shared/shared_examples_with_access_rights.rb +13 -16
  303. data/spec/tasks/rake_spec.rb +9 -11
  304. data/spec/test_app_templates/Gemfile.extra +4 -1
  305. data/spec/test_app_templates/lib/generators/test_app_generator.rb +3 -35
  306. data/spec/views/catalog/index.html.erb_spec.rb +7 -10
  307. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +9 -6
  308. data/spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb +13 -0
  309. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +35 -15
  310. data/spec/views/curation_concerns/base/show.json.jbuilder_spec.rb +21 -0
  311. data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +37 -0
  312. data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +21 -0
  313. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +6 -6
  314. data/spec/views/error/single_use_error.html.erb_spec.rb +8 -0
  315. data/spec/views/layouts/error.html.erb_spec.rb +8 -0
  316. data/spec/views/shared/_add_content.html.erb_spec.rb +33 -20
  317. data/spec/views/shared/_my_actions.html.erb_spec.rb +18 -6
  318. data/spec/views/single_use_links/new_download.html.erb_spec.rb +29 -0
  319. data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +32 -0
  320. data/tasks/jetty.rake +1 -1
  321. data/vendor/assets/javascrips/fileupload/jquery.fileupload-process.js +175 -0
  322. data/vendor/assets/javascrips/fileupload/jquery.fileupload-ui.js +710 -0
  323. data/vendor/assets/javascrips/fileupload/jquery.fileupload-validate.js +122 -0
  324. data/vendor/assets/javascrips/fileupload/jquery.fileupload.js +1477 -0
  325. data/vendor/assets/javascrips/fileupload/locale.js +27 -0
  326. data/vendor/assets/javascrips/fileupload/tmpl.js +87 -0
  327. metadata +242 -213
  328. data/app/assets/javascripts/curation_concerns/help_modal.js +0 -36
  329. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +0 -123
  330. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +0 -126
  331. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +0 -95
  332. data/app/assets/javascripts/curation_concerns/proxy_submission.js +0 -23
  333. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +0 -20
  334. data/app/controllers/catalog_controller.rb +0 -3
  335. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +0 -149
  336. data/app/controllers/curation_concerns/generic_files_controller.rb +0 -13
  337. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +0 -57
  338. data/app/datastreams/generic_work_metadata.rb +0 -3
  339. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +0 -15
  340. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +0 -9
  341. data/app/helpers/curation_concerns/attribute_helper.rb +0 -67
  342. data/app/helpers/curation_concerns/generic_file_helper.rb +0 -19
  343. data/app/helpers/curation_concerns/thumbnail_helper.rb +0 -11
  344. data/app/presenters/curation_concerns/generic_file_presenter.rb +0 -14
  345. data/app/presenters/curation_concerns/generic_work_presenter.rb +0 -13
  346. data/app/views/catalog/_index_default.html.erb +0 -17
  347. data/app/views/collections/_form_representative_image.html.erb +0 -13
  348. data/app/views/collections/_identifier_and_action.html.erb +0 -15
  349. data/app/views/curation_concerns/base/_form_content_license.html.erb +0 -16
  350. data/app/views/curation_concerns/base/_form_editors.html.erb +0 -15
  351. data/app/views/curation_concerns/generic_files/_actions.html.erb +0 -16
  352. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +0 -12
  353. data/app/views/curation_concerns/generic_files/_media_display.html.erb +0 -19
  354. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +0 -8
  355. data/app/views/curation_concerns/generic_files/show.html.erb +0 -15
  356. data/app/workers/visibility_copy_worker.rb +0 -30
  357. data/curation_concerns-models/.gitignore +0 -17
  358. data/curation_concerns-models/Gemfile +0 -4
  359. data/curation_concerns-models/LICENSE.md +0 -177
  360. data/curation_concerns-models/README.md +0 -42
  361. data/curation_concerns-models/Rakefile +0 -1
  362. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +0 -99
  363. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +0 -90
  364. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +0 -150
  365. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +0 -88
  366. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +0 -22
  367. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +0 -6
  368. data/curation_concerns-models/app/jobs/audit_job.rb +0 -58
  369. data/curation_concerns-models/app/jobs/characterize_job.rb +0 -11
  370. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +0 -24
  371. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +0 -15
  372. data/curation_concerns-models/app/jobs/import_url_job.rb +0 -56
  373. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +0 -48
  374. data/curation_concerns-models/app/jobs/resolrize_job.rb +0 -9
  375. data/curation_concerns-models/app/models/checksum_audit_log.rb +0 -21
  376. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +0 -34
  377. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +0 -87
  378. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +0 -47
  379. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +0 -53
  380. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +0 -89
  381. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +0 -8
  382. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +0 -343
  383. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +0 -12
  384. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +0 -14
  385. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +0 -16
  386. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +0 -5
  387. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +0 -44
  388. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +0 -38
  389. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +0 -14
  390. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +0 -23
  391. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +0 -19
  392. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +0 -75
  393. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +0 -7
  394. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +0 -15
  395. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +0 -135
  396. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +0 -65
  397. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +0 -98
  398. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +0 -29
  399. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +0 -47
  400. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +0 -31
  401. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +0 -148
  402. data/curation_concerns-models/app/models/version_committer.rb +0 -2
  403. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +0 -71
  404. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +0 -38
  405. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +0 -85
  406. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +0 -14
  407. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +0 -16
  408. data/curation_concerns-models/app/services/curation_concerns/noid.rb +0 -23
  409. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +0 -9
  410. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +0 -27
  411. data/curation_concerns-models/config/locales/curation_concerns.en.yml +0 -6
  412. data/curation_concerns-models/curation_concerns-models.gemspec +0 -34
  413. data/curation_concerns-models/lib/curation_concerns/messages.rb +0 -66
  414. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +0 -61
  415. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +0 -36
  416. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +0 -22
  417. data/curation_concerns-models/lib/curation_concerns/models/version.rb +0 -5
  418. data/curation_concerns-models/lib/curation_concerns/models.rb +0 -32
  419. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +0 -30
  420. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +0 -19
  421. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +0 -28
  422. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +0 -70
  423. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +0 -4
  424. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +0 -4
  425. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +0 -1
  426. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +0 -123
  427. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +0 -6
  428. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +0 -9
  429. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +0 -32
  430. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +0 -1
  431. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +0 -10
  432. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +0 -5
  433. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
  434. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +0 -15
  435. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +0 -75
  436. data/curation_concerns-models/lib/tasks/migrate.rake +0 -13
  437. data/curation_concerns-models/lib/tasks/resque.rake +0 -13
  438. data/curation_concerns-models/lib/tasks/solr_reindex.rake +0 -8
  439. data/lib/curation_concerns/configuration.rb +0 -74
  440. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +0 -2
  441. data/solr_conf/conf/solrconfig.xml +0 -223
  442. data/spec/abilities/generic_file_abilities_spec.rb +0 -62
  443. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +0 -116
  444. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +0 -251
  445. data/spec/forms/generic_file_edit_form_spec.rb +0 -33
  446. data/spec/helpers/thumbnail_helper_spec.rb +0 -21
  447. data/spec/jobs/copy_permissions_job_spec.rb +0 -49
  448. data/spec/jobs/curation_concerns_resque_queue_spec.rb +0 -49
  449. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +0 -88
  450. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +0 -35
  451. data/spec/models/fits_datastream_spec.rb +0 -127
  452. data/spec/models/generic_file_spec.rb +0 -619
  453. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +0 -16
  454. data/spec/services/characterization_service_spec.rb +0 -30
  455. data/spec/services/full_text_extraction_service_spec.rb +0 -5
  456. data/spec/services/generic_file_audit_service_spec.rb +0 -71
  457. data/spec/services/generic_file_indexing_service_spec.rb +0 -57
  458. data/spec/services/generic_work_indexing_service_spec.rb +0 -18
  459. data/spec/workers/visibility_copy_worker_spec.rb +0 -70
  460. data/vendor/assets/javascripts/handlebars.js +0 -2278
  461. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +0 -602
  462. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +0 -356
  463. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +0 -50
  464. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +0 -1276
  465. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +0 -610
  466. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +0 -498
  467. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +0 -528
  468. data/vendor/assets/javascripts/jquery.tokeninput.js +0 -1061
  469. data/vendor/assets/stylesheets/jquery-ui-lightness.css +0 -474
  470. data/vendor/assets/stylesheets/token-input-facebook.css +0 -122
  471. data/vendor/assets/stylesheets/token-input-mac.css +0 -204
  472. data/vendor/assets/stylesheets/token-input.css +0 -127
@@ -4,20 +4,22 @@ describe CurationConcerns::CreateDerivativesJob do
4
4
  before do
5
5
  @ffmpeg_enabled = CurationConcerns.config.enable_ffmpeg
6
6
  CurationConcerns.config.enable_ffmpeg = true
7
- allow(ActiveFedora::Base).to receive(:find).with('123').and_return(generic_file)
8
- allow(generic_file).to receive(:original_file).and_return(double("orignal_file", :has_content? => true))
7
+ allow(ActiveFedora::Base).to receive(:find).with('123').and_return(file_set)
8
+ allow(file_set).to receive(:mime_type).and_return('audio/x-wav')
9
+ allow(file_set).to receive(:id).and_return('123')
9
10
  end
10
- let(:generic_file) { GenericFile.new }
11
+
12
+ let(:file_set) { FileSet.new }
11
13
 
12
14
  after do
13
15
  CurationConcerns.config.enable_ffmpeg = @ffmpeg_enabled
14
16
  end
15
17
 
16
- subject { CreateDerivativesJob.new('123') }
17
-
18
- it "should call create_derivatives and save on a generic_file" do
19
- expect(generic_file).to receive(:create_derivatives)
20
- expect(generic_file).to receive(:save)
21
- subject.run
18
+ context "with a file name" do
19
+ it 'calls create_derivatives and save on a file set' do
20
+ expect(Hydra::Derivatives::AudioDerivatives).to receive(:create)
21
+ expect(file_set).to receive(:update_index)
22
+ CreateDerivativesJob.perform_now('123', 'spec/fixtures/piano_note.wav')
23
+ end
22
24
  end
23
25
  end
@@ -1,19 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ImportUrlJob do
4
- let(:user) { FactoryGirl.find_or_create(:jill) }
4
+ let(:user) { create(:user) }
5
5
 
6
- let(:file_path) { fixture_path + '/world.png' }
7
- let(:file_hash) {'/673467823498723948237462429793840923582'}
6
+ let(:file_path) { fixture_path + '/world.png' }
7
+ let(:file_hash) { '/673467823498723948237462429793840923582' }
8
8
 
9
- let(:generic_file) do
10
- GenericFile.create do |f|
11
- f.import_url = "http://example.org#{file_hash}"
12
- f.label = file_path
9
+ let(:file_set) do
10
+ FileSet.new(import_url: "http://example.org#{file_hash}", label: file_path) do |f|
13
11
  f.apply_depositor_metadata(user.user_key)
14
12
  end
15
13
  end
16
14
 
15
+ let(:file_set_id) { 'abc123' }
16
+ let(:actor) { double }
17
+
17
18
  let(:mock_response) do
18
19
  double('response').tap do |http_res|
19
20
  allow(http_res).to receive(:start).and_yield
@@ -22,24 +23,16 @@ describe ImportUrlJob do
22
23
  end
23
24
  end
24
25
 
25
- subject(:job) { ImportUrlJob.new(generic_file.id) }
26
-
27
- it "should have no content at the outset" do
28
- expect(generic_file.original_file).to be_nil
29
- end
30
-
31
- context "after running the job" do
26
+ context 'after running the job' do
32
27
  before do
33
- s1 = double('characterize')
34
- allow(CharacterizeJob).to receive(:new).with(generic_file.id).and_return(s1)
35
- expect(CurationConcerns.queue).to receive(:push).with(s1).once
36
- expect(ClamAV.instance).to receive(:scanfile).and_return(0)
28
+ allow(ActiveFedora::Base).to receive(:find).with(file_set_id).and_return(file_set)
29
+ allow(CurationConcerns::FileSetActor).to receive(:new).with(file_set, user).and_return(actor)
37
30
  end
38
31
 
39
- it "should create a content datastream" do
32
+ it 'creates a content datastream' do
40
33
  expect_any_instance_of(Net::HTTP).to receive(:request_get).with(file_hash).and_yield(mock_response)
41
- job.run
42
- expect(generic_file.reload.original_file.size).to eq 4218
34
+ expect(actor).to receive(:create_content).and_return(true)
35
+ described_class.perform_now(file_set_id)
43
36
  end
44
37
  end
45
38
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe IngestFileJob do
4
+ let(:file_set) { create(:file_set) }
5
+ let(:filename) { fixture_file_path('/world.png') }
6
+
7
+ it 'uses the provided mime_type' do
8
+ described_class.perform_now(file_set.id, filename, 'image/png', 'bob')
9
+ expect(file_set.reload.original_file.mime_type).to eq 'image/png'
10
+ end
11
+
12
+ context 'with two existing versions from different users' do
13
+ let(:file1) { fixture_file_path 'world.png' }
14
+ let(:file2) { fixture_file_path 'small_file.txt' }
15
+ let(:actor1) { described_class.new(file_set, user) }
16
+ let(:actor2) { described_class.new(file_set, second_user) }
17
+
18
+ let(:second_user) { create(:user) }
19
+ let(:versions) { file_set.reload.original_file.versions }
20
+
21
+ before do
22
+ described_class.perform_now(file_set.id, file1, 'image/png', 'bob')
23
+ described_class.perform_now(file_set.id, file2, 'text/plain', 'bess')
24
+ end
25
+
26
+ it 'has two versions' do
27
+ expect(versions.all.count).to eq 2
28
+
29
+ # the current version
30
+ expect(CurationConcerns::VersioningService.latest_version_of(file_set.reload.original_file).label).to eq 'version2'
31
+ expect(file_set.original_file.content).to eq File.open(file2).read
32
+ expect(file_set.original_file.mime_type).to eq 'text/plain'
33
+ expect(file_set.original_file.original_name).to eq 'small_file.txt'
34
+
35
+ # the user for each version
36
+ expect(VersionCommitter.where(version_id: versions.first.uri).pluck(:committer_login)).to eq ['bob']
37
+ expect(VersionCommitter.where(version_id: versions.last.uri).pluck(:committer_login)).to eq ['bess']
38
+ end
39
+ end
40
+
41
+ it 'runs the after_create_content callback with file_set and user arguments' do
42
+ expect(CurationConcerns.config.callback).to receive(:run).with(:after_create_content, file_set, 'bob').exactly(1).times
43
+ described_class.perform_now(file_set.id, filename, 'image/png', 'bob')
44
+ end
45
+ end
@@ -1,25 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe IngestLocalFileJob do
4
- let(:user) { FactoryGirl.find_or_create(:jill) }
4
+ let(:user) { create(:user) }
5
+
6
+ let(:file_set) { FileSet.new }
7
+ let(:file_set_id) { 'abc123' }
8
+ let(:actor) { double }
5
9
 
6
- let(:generic_file) do
7
- GenericFile.create do |file|
8
- file.apply_depositor_metadata(user)
9
- end
10
- end
11
-
12
- let(:job) { IngestLocalFileJob.new(generic_file.id, mock_upload_directory, "world.png", user.user_key) }
13
10
  let(:mock_upload_directory) { 'spec/mock_upload_directory' }
14
-
11
+
15
12
  before do
16
- Dir.mkdir mock_upload_directory unless File.exists? mock_upload_directory
13
+ Dir.mkdir mock_upload_directory unless File.exist? mock_upload_directory
17
14
  FileUtils.copy(File.expand_path('../../fixtures/world.png', __FILE__), mock_upload_directory)
15
+ allow(FileSet).to receive(:find).with(file_set_id).and_return(file_set)
16
+ allow(CurationConcerns::FileSetActor).to receive(:new).with(file_set, user).and_return(actor)
18
17
  end
19
-
20
- it "should have attached a file" do
21
- expect(CurationConcerns::CharacterizationService).to receive(:run).with(generic_file)
22
- job.run
23
- expect(generic_file.reload.original_file.size).to eq(4218)
18
+
19
+ it 'has attached a file' do
20
+ expect(actor).to receive(:create_content).and_return(true)
21
+ described_class.perform_now(file_set_id, mock_upload_directory, 'world.png', user.user_key)
24
22
  end
25
23
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe UploadSetUpdateJob do
4
+ let(:user) { create(:user) }
5
+ let(:upload_set) { UploadSet.create }
6
+
7
+ let!(:file) { create(:file_set, user: user, upload_set: upload_set) }
8
+ let!(:file2) { create(:file_set, user: user, upload_set: upload_set) }
9
+
10
+ describe "#perform" do
11
+ let(:title) { { file.id => ['File One'], file2.id => ['File Two'] } }
12
+ let(:metadata) { { tag: [''] } }
13
+ let(:visibility) { nil }
14
+
15
+ subject { described_class.perform_now(user.user_key, upload_set.id, title, metadata, visibility) }
16
+
17
+ it "updates file metadata" do
18
+ expect(subject).to be true
19
+ expect(file.reload.title).to eq ['File One']
20
+ end
21
+
22
+ context "when user does not have permission to edit all of the files" do
23
+ before do
24
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file).and_return(true)
25
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file2).and_return(false)
26
+ end
27
+ it { is_expected.to be false }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe VisibilityCopyJob do
4
+ describe 'an open access work' do
5
+ let(:work) { create(:work_with_files) }
6
+
7
+ it 'copies visibility to its contained files' do
8
+ # files are private at the outset
9
+ expect(work.file_sets.first.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
10
+
11
+ work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
12
+ work.save
13
+ described_class.perform_now(work.id)
14
+ work.reload.file_sets.each do |file|
15
+ expect(file.visibility).to eq 'open'
16
+ end
17
+ end
18
+ end
19
+
20
+ describe 'an embargoed work' do
21
+ let(:work) { create(:embargoed_work_with_files) }
22
+
23
+ before do
24
+ expect(work.visibility).to eq 'restricted'
25
+ expect(work).to be_under_embargo
26
+ expect(work.file_sets.first).to_not be_under_embargo
27
+ end
28
+
29
+ before do
30
+ described_class.perform_now(work.id)
31
+ work.reload
32
+ end
33
+ let(:file) { work.file_sets.first }
34
+
35
+ it 'copies visibility to its contained files and apply a copy of the embargo to the files' do
36
+ expect(file).to be_under_embargo
37
+ expect(file.embargo.id).to_not eq work.embargo.id
38
+ end
39
+ end
40
+
41
+ describe 'an leased work' do
42
+ let(:work) { create(:leased_work_with_files) }
43
+
44
+ before do
45
+ expect(work.visibility).to eq 'open'
46
+ expect(work).to be_active_lease
47
+ expect(work.file_sets.first).to_not be_active_lease
48
+ end
49
+
50
+ before do
51
+ described_class.perform_now(work.id)
52
+ work.reload
53
+ end
54
+ let(:file) { work.file_sets.first }
55
+
56
+ it 'copies visibility to its contained files and apply a copy of the lease to the files' do
57
+ expect(file).to be_active_lease
58
+ expect(file.lease.id).to_not eq work.lease.id
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,54 @@
1
+ require 'curation_concerns/callbacks/registry'
2
+
3
+ describe CurationConcerns::Callbacks::Registry do
4
+ subject { described_class.new }
5
+
6
+ describe "#enabled?" do
7
+ it "returns false if the specified callback has not been enabled" do
8
+ expect(subject.enabled?(:foo))
9
+ end
10
+
11
+ it "returns true after enabling the specified callback" do
12
+ subject.enable(:foo)
13
+ expect(subject.enabled?(:foo)).to eq true
14
+ end
15
+ end
16
+
17
+ describe "#set?" do
18
+ it "returns false if the callback has not been set" do
19
+ expect(subject.set?(:foo)).to eq false
20
+ end
21
+
22
+ it "returns true if the callback has been set" do
23
+ subject.set(:foo) { nil }
24
+ expect(subject.set?(:foo)).to eq true
25
+ end
26
+ end
27
+
28
+ describe "#set" do
29
+ it "raises an error if a block is not given" do
30
+ expect { subject.set(:foo) }.to raise_error CurationConcerns::Callbacks::NoBlockGiven
31
+ end
32
+
33
+ it "raises an error if given no arguments" do
34
+ expect { subject.set }.to raise_error ArgumentError
35
+ end
36
+ end
37
+
38
+ describe "#run" do
39
+ it "raises a NotEnabled error if the callback has not been enabled" do
40
+ expect { subject.run(:foo) }.to raise_error CurationConcerns::Callbacks::NotEnabled
41
+ end
42
+
43
+ it "runs the specified callback with parameters" do
44
+ subject.set(:foo) { |x, y| x + y }
45
+ expect(subject.run(:foo, 1, 2)).to eq 3
46
+ end
47
+
48
+ it "runs the most recently set callback" do
49
+ subject.set(:foo) { "first" }
50
+ subject.set(:foo) { "second" }
51
+ expect(subject.run(:foo)).to eq "second"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ require 'curation_concerns/callbacks'
2
+
3
+ describe CurationConcerns::Callbacks do
4
+ context 'when included in a class,' do
5
+ before do
6
+ class TestClass
7
+ include CurationConcerns::Callbacks
8
+ end
9
+ end
10
+
11
+ after do
12
+ Object.send(:remove_const, :TestClass)
13
+ end
14
+
15
+ describe '.callback' do
16
+ it 'returns an instance of Callbacks::Registry' do
17
+ expect(TestClass.callback).to be_a CurationConcerns::Callbacks::Registry
18
+ end
19
+ end
20
+
21
+ describe '#callback' do
22
+ it 'is an instance method shortcut to the class method of the same name' do
23
+ expect(TestClass.new.callback).to eq TestClass.callback
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CurationConcerns::Messages do
4
-
5
4
  let(:message) do
6
5
  TestClass.new
7
6
  end
@@ -16,54 +15,54 @@ describe CurationConcerns::Messages do
16
15
  Object.send(:remove_const, :TestClass)
17
16
  end
18
17
 
19
- let(:batch_id) { "1" }
20
- let(:single) { double(to_param: "1", to_s: "File 1") }
21
- let(:multiple) { [double(to_param: "1", to_s: "File 1"), double(to_param: "2", to_s: "File 2"), double(to_param: "3", to_s: "File 3")] }
22
- let(:file_list) { "<a href='/concern/generic_files/1'>File 1</a>, <a href='/concern/generic_files/2'>File 2</a>, <a href='/concern/generic_files/3'>File 3</a>" }
18
+ let(:upload_set_id) { '1' }
19
+ let(:single) { double(to_param: '1', to_s: 'File 1') }
20
+ let(:multiple) { [double(to_param: '1', to_s: 'File 1'), double(to_param: '2', to_s: 'File 2'), double(to_param: '3', to_s: 'File 3')] }
21
+ let(:file_list) { "<a href='/concern/file_sets/1'>File 1</a>, <a href='/concern/file_sets/2'>File 2</a>, <a href='/concern/file_sets/3'>File 3</a>" }
23
22
 
24
- describe "message subjects" do
25
- it "should provide a subject for a success message" do
26
- expect(message.success_subject).to eq("Batch upload complete")
23
+ describe 'message subjects' do
24
+ it 'provides a subject for a success message' do
25
+ expect(message.success_subject).to eq('Batch upload complete')
27
26
  end
28
- it "should provide a subject for a failure message" do
29
- expect(message.failure_subject).to eq("Batch upload permission denied")
27
+ it 'provides a subject for a failure message' do
28
+ expect(message.failure_subject).to eq('Batch upload permission denied')
30
29
  end
31
30
  end
32
31
 
33
- describe "#single_success" do
34
- it "should render a success message for a single file" do
35
- node = Capybara::Node::Simple.new(message.single_success(batch_id, single))
36
- expect(node).to have_selector("span[id=\"ss-1\"]", text:"File 1 has been saved.")
37
- expect(node).to have_selector("a[href=\"/concern/generic_files/1\"]")
32
+ describe '#single_success' do
33
+ it 'renders a success message for a single file' do
34
+ node = Capybara::Node::Simple.new(message.single_success(upload_set_id, single))
35
+ expect(node).to have_selector("span[id=\"ss-1\"]", text: 'File 1 has been saved.')
36
+ expect(node).to have_selector("a[href=\"/concern/file_sets/1\"]")
38
37
  end
39
38
  end
40
39
 
41
- describe "#multiple_success" do
42
- it "should render a success message for multiple files" do
43
- node = Capybara::Node::Simple.new(message.multiple_success(batch_id, multiple))
44
- expect(node).to have_selector("span[id=\"ss-1\"]", text:"These files have been saved.")
40
+ describe '#multiple_success' do
41
+ it 'renders a success message for multiple files' do
42
+ node = Capybara::Node::Simple.new(message.multiple_success(upload_set_id, multiple))
43
+ expect(node).to have_selector("span[id=\"ss-1\"]", text: 'These files have been saved.')
45
44
  expect(node).to have_selector("a[data-content=\"#{file_list}\"][rel=\"popover\"][data-title=\"Files uploaded successfully\"]")
46
45
  end
47
46
  end
48
47
 
49
- describe "#single_failure" do
50
- it "should render a failure message for a single file" do
51
- node = Capybara::Node::Simple.new(message.single_failure(batch_id, single))
52
- expect(node).to have_selector("span[id=\"ss-1\"]", text:"File 1 could not be updated. You do not have sufficient privileges to edit it.")
53
- expect(node).to have_selector("a[href=\"/concern/generic_files/1\"]")
48
+ describe '#single_failure' do
49
+ it 'renders a failure message for a single file' do
50
+ node = Capybara::Node::Simple.new(message.single_failure(upload_set_id, single))
51
+ expect(node).to have_selector("span[id=\"ss-1\"]", text: 'File 1 could not be updated. You do not have sufficient privileges to edit it.')
52
+ expect(node).to have_selector("a[href=\"/concern/file_sets/1\"]")
54
53
  end
55
54
  end
56
55
 
57
- describe "#multiple_failure" do
58
- it "should render a failure message for multiple files" do
59
- node = Capybara::Node::Simple.new(message.multiple_failure(batch_id, multiple))
60
- expect(node).to have_selector("span[id=\"ss-1\"]", text:"These files could not be updated. You do not have sufficient privileges to edit them.")
56
+ describe '#multiple_failure' do
57
+ it 'renders a failure message for multiple files' do
58
+ node = Capybara::Node::Simple.new(message.multiple_failure(upload_set_id, multiple))
59
+ expect(node).to have_selector("span[id=\"ss-1\"]", text: 'These files could not be updated. You do not have sufficient privileges to edit them.')
61
60
  expect(node).to have_selector("a[data-content=\"#{file_list}\"][rel=\"popover\"][data-title=\"Files failed\"]")
62
61
  end
63
62
  end
64
63
 
65
- describe "#file_list" do
66
- it "should replace double-quotes with single quotes" do
64
+ describe '#file_list' do
65
+ it 'replaces double-quotes with single quotes' do
67
66
  expect(message.file_list(multiple)).to eq(file_list)
68
67
  end
69
68
  end
@@ -1,56 +1,54 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CurationConcerns::Permissions::Readable do
4
-
5
4
  class SubjectClass
6
5
  include CurationConcerns::Permissions::Readable
7
- attr_accessor :read_groups
6
+ attr_accessor :read_groups
8
7
  end
9
8
  let(:subject) { SubjectClass.new }
10
9
 
11
- describe "#public?" do
12
- it "should return true for public items" do
13
- subject.read_groups = ["public","othergroup"]
10
+ describe '#public?' do
11
+ it 'returns true for public items' do
12
+ subject.read_groups = %w(public othergroup)
14
13
  expect(subject).to be_public
15
14
  end
16
- it "should return fale for non-public items" do
17
- subject.read_groups = ["notpublic","othergroup"]
15
+ it 'returns fale for non-public items' do
16
+ subject.read_groups = %w(notpublic othergroup)
18
17
  expect(subject).to_not be_public
19
18
  end
20
19
  end
21
20
 
22
- describe "#registered?" do
23
- it "should return true for registered items" do
24
- subject.read_groups = ["registered","othergroup"]
21
+ describe '#registered?' do
22
+ it 'returns true for registered items' do
23
+ subject.read_groups = %w(registered othergroup)
25
24
  expect(subject).to be_registered
26
25
  end
27
- it "should return fale for non-registered items" do
28
- subject.read_groups = ["othergroup"]
26
+ it 'returns fale for non-registered items' do
27
+ subject.read_groups = ['othergroup']
29
28
  expect(subject).to_not be_registered
30
29
  end
31
30
  end
32
31
 
33
- describe "#private?" do
34
- context "is true" do
35
- specify "when there are no groups defined" do
32
+ describe '#private?' do
33
+ context 'is true' do
34
+ specify 'when there are no groups defined' do
36
35
  subject.read_groups = []
37
36
  expect(subject).to be_private
38
37
  end
39
38
  specify "when groups do not include 'public' or 'registered'" do
40
- subject.read_groups = ["othergroup"]
39
+ subject.read_groups = ['othergroup']
41
40
  expect(subject).to be_private
42
41
  end
43
42
  end
44
- context "is false" do
43
+ context 'is false' do
45
44
  specify "when 'registered' group is present" do
46
- subject.read_groups = ["registered"]
45
+ subject.read_groups = ['registered']
47
46
  expect(subject).to_not be_private
48
47
  end
49
48
  specify "when 'public' group is present" do
50
- subject.read_groups = ["public"]
49
+ subject.read_groups = ['public']
51
50
  expect(subject).to_not be_private
52
51
  end
53
52
  end
54
53
  end
55
-
56
54
  end
@@ -1,16 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CurationConcerns::Permissions::Writable do
4
-
5
4
  class SampleModel < ActiveFedora::Base
6
5
  include CurationConcerns::Permissions::Writable
7
6
  end
8
7
  let(:subject) { SampleModel.new }
9
8
 
10
- describe "#permissions" do
11
- it "should initialize with nothing specified" do
9
+ describe '#permissions' do
10
+ it 'initializes with nothing specified' do
12
11
  expect(subject.permissions).to be_empty
13
12
  end
14
13
  end
15
-
16
14
  end
@@ -4,7 +4,7 @@ RSpec::Matchers.define :have_unique_field do |expected_field_name|
4
4
  match do |subject|
5
5
  expect(subject).to respond_to(expected_field_name)
6
6
  field_value = subject.send(expected_field_name)
7
- field_value.nil? || !field_value.kind_of?(Array)
7
+ field_value.nil? || !field_value.is_a?(Array)
8
8
  end
9
9
 
10
10
  description do
@@ -1,7 +1,7 @@
1
- RSpec::Matchers.define :fail_redirect_and_flash do |path,flash_message|
1
+ RSpec::Matchers.define :fail_redirect_and_flash do |path, flash_message|
2
2
  match do |response|
3
3
  expect(response.status).to eq 302
4
4
  expect(response).to redirect_to(path)
5
5
  expect(flash[:alert]).to eq flash_message
6
6
  end
7
- end
7
+ end
data/spec/matchers.rb CHANGED
@@ -3,11 +3,12 @@ require 'rspec/matchers'
3
3
  if defined?($SHOW_MATCHERS)
4
4
  module RSpec::Shim
5
5
  def define(matcher_name, *args, &block)
6
- $SHOW_MATCHERS[matcher_name] = caller.first.split(":")[0..1]
6
+ $SHOW_MATCHERS[matcher_name] = caller.first.split(':')[0..1]
7
7
  super
8
8
  end
9
+
9
10
  def matcher(matcher_name, *args, &block)
10
- $SHOW_MATCHERS[matcher_name] = caller.first.split(":")[0..1]
11
+ $SHOW_MATCHERS[matcher_name] = caller.first.split(':')[0..1]
11
12
  super
12
13
  end
13
14
  end