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
@@ -1,91 +1,88 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe EmbargoesController do
4
- let(:user) { FactoryGirl.create(:user) }
5
- let(:a_work) { FactoryGirl.create(:generic_work, user: user) }
6
- let(:not_my_work) { FactoryGirl.create(:generic_work) }
4
+ let(:user) { create(:user) }
5
+ let(:a_work) { create(:generic_work, user: user) }
6
+ let(:not_my_work) { create(:generic_work) }
7
7
 
8
8
  before { sign_in user }
9
9
 
10
- describe "#index" do
11
- context "when I am NOT a repository manager" do
12
- it "should redirect" do
10
+ describe '#index' do
11
+ context 'when I am NOT a repository manager' do
12
+ it 'redirects' do
13
13
  get :index
14
14
  expect(response).to redirect_to root_path
15
15
  end
16
16
  end
17
- context "when I am a repository manager" do
17
+ context 'when I am a repository manager' do
18
18
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
19
- it "should show me the page" do
19
+ it 'shows me the page' do
20
20
  get :index
21
21
  expect(response).to be_success
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
- describe "#edit" do
27
- context "when I do not have edit permissions for the object" do
28
- it "should redirect" do
26
+ describe '#edit' do
27
+ context 'when I do not have edit permissions for the object' do
28
+ it 'redirects' do
29
29
  get :edit, id: not_my_work
30
30
  expect(response.status).to eq 302
31
31
  expect(flash[:alert]).to eq 'You are not authorized to access this page.'
32
32
  end
33
33
  end
34
- context "when I have permission to edit the object" do
35
- it "should show me the page" do
34
+ context 'when I have permission to edit the object' do
35
+ it 'shows me the page' do
36
36
  get :edit, id: a_work
37
37
  expect(response).to be_success
38
38
  end
39
39
  end
40
40
  end
41
41
 
42
-
43
-
44
- describe "#destroy" do
45
- context "when I do not have edit permissions for the object" do
46
- it "should deny access" do
42
+ describe '#destroy' do
43
+ context 'when I do not have edit permissions for the object' do
44
+ it 'denies access' do
47
45
  get :destroy, id: not_my_work
48
- expect(response).to fail_redirect_and_flash(root_path, 'You are not authorized to access this page.')
46
+ expect(response).to fail_redirect_and_flash(root_path, 'You are not authorized to access this page.')
49
47
  end
50
48
  end
51
49
 
52
- context "when I have permission to edit the object" do
50
+ context 'when I have permission to edit the object' do
53
51
  before do
54
- expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
55
- a_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
56
- a_work.visibility_during_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
57
- a_work.visibility_after_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
58
- a_work.embargo_release_date = release_date.to_s
59
- a_work.save(validate: false)
60
- get :destroy, id: a_work
52
+ expect(CurationConcerns::EmbargoActor).to receive(:new).with(a_work).and_return(actor)
61
53
  end
62
54
 
63
- context "with an active embargo" do
64
- let(:release_date) { Date.today+2 }
55
+ let(:actor) { double }
65
56
 
66
- it "should deactivate embargo without updating visibility and redirect" do
67
- expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
57
+ context 'that has no files' do
58
+ it 'deactivates embargo and redirects' do
59
+ expect(actor).to receive(:destroy)
60
+ get :destroy, id: a_work
68
61
  expect(response).to redirect_to edit_embargo_path(a_work)
69
62
  end
70
63
  end
71
64
 
72
- context "with an expired embargo" do
73
- let(:release_date) { Date.today-2 }
65
+ context 'that has files' do
66
+ before do
67
+ a_work.members << create(:file_set)
68
+ a_work.save!
69
+ end
74
70
 
75
- it "should deactivate embargo, update the visibility and redirect" do
76
- expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
71
+ it 'deactivates embargo and checks to see if we want to copy the visibility to files' do
72
+ expect(actor).to receive(:destroy)
73
+ get :destroy, id: a_work
77
74
  expect(response).to redirect_to confirm_curation_concerns_permission_path(a_work)
78
75
  end
79
76
  end
80
77
  end
81
78
  end
82
79
 
83
- describe "#update" do
84
- context "when I have permission to edit the object" do
85
- let(:a_file) { FactoryGirl.create(:generic_file, visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED) }
86
- let(:release_date) { Date.today+2 }
80
+ describe '#update' do
81
+ context 'when I have permission to edit the object' do
82
+ let(:file_set) { create(:file_set, visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED) }
83
+ let(:release_date) { Date.today + 2 }
87
84
  before do
88
- a_work.generic_files << a_file
85
+ a_work.members << file_set
89
86
  a_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
90
87
  a_work.visibility_during_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
91
88
  a_work.visibility_after_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
@@ -94,18 +91,12 @@ describe EmbargoesController do
94
91
  a_work.save(validate: false)
95
92
  end
96
93
 
97
- it "should copy visibility from curation_concern to all of the identified files" do
98
- pending "Is this ever used? If so, write this test!"
99
- fail
100
- patch :update, batch_document_ids: [a_work.id], embargoes: { "0" => { copy_visibility: a_work.id} }
101
- end
102
-
103
- context "with an expired embargo" do
104
- let(:release_date) { Date.today-2 }
105
- it "should deactivate embargo, update the visibility and redirect" do
106
- patch :update, batch_document_ids: [a_work.id], embargoes: { "0" => { copy_visibility: a_work.id} }
94
+ context 'with an expired embargo' do
95
+ let(:release_date) { Date.today - 2 }
96
+ it 'deactivates embargo, update the visibility and redirect' do
97
+ patch :update, batch_document_ids: [a_work.id], embargoes: { '0' => { copy_visibility: a_work.id } }
107
98
  expect(a_work.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
108
- expect(a_file.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
99
+ expect(file_set.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
109
100
  expect(response).to redirect_to embargoes_path
110
101
  end
111
102
  end
@@ -1,93 +1,104 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LeasesController do
4
- let(:user) { FactoryGirl.create(:user) }
5
- let(:a_work) { FactoryGirl.create(:generic_work, user: user) }
6
- let(:not_my_work) { FactoryGirl.create(:generic_work) }
4
+ let(:user) { create(:user) }
5
+ let(:a_work) { create(:generic_work, user: user) }
6
+ let(:not_my_work) { create(:generic_work) }
7
7
 
8
8
  before { sign_in user }
9
9
 
10
- describe "#index" do
11
- context "when I am NOT a repository manager" do
12
- it "should redirect" do
10
+ describe '#index' do
11
+ context 'when I am NOT a repository manager' do
12
+ it 'redirects' do
13
13
  get :index
14
14
  expect(response).to redirect_to root_path
15
15
  end
16
16
  end
17
- context "when I am a repository manager" do
17
+ context 'when I am a repository manager' do
18
18
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
19
- it "should show me the page" do
19
+ it 'shows me the page' do
20
20
  get :index
21
21
  expect(response).to be_success
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
- describe "#edit" do
27
- context "when I do not have edit permissions for the object" do
28
- it "should redirect" do
26
+ describe '#edit' do
27
+ context 'when I do not have edit permissions for the object' do
28
+ it 'redirects' do
29
29
  get :edit, id: not_my_work
30
30
  expect(response.status).to eq 302
31
31
  expect(flash[:alert]).to eq 'You are not authorized to access this page.'
32
32
  end
33
33
  end
34
- context "when I have permission to edit the object" do
35
- it "should show me the page" do
34
+ context 'when I have permission to edit the object' do
35
+ it 'shows me the page' do
36
36
  get :edit, id: a_work
37
37
  expect(response).to be_success
38
38
  end
39
39
  end
40
40
  end
41
41
 
42
-
43
-
44
- describe "#destroy" do
45
- context "when I do not have edit permissions for the object" do
46
- it "should deny access" do
42
+ describe '#destroy' do
43
+ context 'when I do not have edit permissions for the object' do
44
+ it 'denies access' do
47
45
  get :destroy, id: not_my_work
48
46
  expect(response).to fail_redirect_and_flash(root_path, 'You are not authorized to access this page.')
49
47
  end
50
48
  end
51
49
 
52
- context "when I have permission to edit the object" do
50
+ context 'when I have permission to edit the object' do
51
+ let(:actor) { double('lease actor') }
53
52
  before do
54
- expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
55
- a_work.visibility_during_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
56
- a_work.visibility_after_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
57
- a_work.lease_expiration_date = release_date.to_s
58
- expect(CurationConcerns.queue).to receive(:push).with(an_instance_of(VisibilityCopyWorker))
59
- get :destroy, id: a_work
53
+ allow(CurationConcerns::LeaseActor).to receive(:new).with(a_work).and_return(actor)
60
54
  end
61
55
 
62
- context "with an active lease" do
63
- let(:release_date) { Date.today+2 }
64
- it "should deactivate the lease without updating visibility and redirect" do
65
- expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
56
+ context 'that has no files' do
57
+ it 'deactivates the lease and redirects' do
58
+ expect(actor).to receive(:destroy)
59
+ get :destroy, id: a_work
66
60
  expect(response).to redirect_to edit_lease_path(a_work)
67
61
  end
68
62
  end
69
63
 
70
- context "with an expired lease" do
71
- let(:release_date) { Date.today-2 }
64
+ context 'with files' do
65
+ before do
66
+ a_work.members << create(:file_set)
67
+ a_work.save!
68
+ end
72
69
 
73
- it "should deactivate the lease, update the visibility and redirect" do
74
- expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
75
- expect(response).to redirect_to edit_lease_path(a_work)
70
+ it 'deactivates the lease and redirects' do
71
+ expect(actor).to receive(:destroy)
72
+ get :destroy, id: a_work
73
+ expect(response).to redirect_to confirm_curation_concerns_permission_path(a_work)
76
74
  end
77
75
  end
78
76
  end
79
77
  end
80
78
 
81
- describe "#update" do
82
- context "when I have permission to edit the object" do
79
+ describe '#update' do
80
+ context 'when I have permission to edit the object' do
81
+ let(:file_set) { create(:file_set, visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
82
+ let(:expiration_date) { Date.today + 2 }
83
+
83
84
  before do
84
- expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
85
+ a_work.members << file_set
86
+ a_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
87
+ a_work.visibility_during_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
88
+ a_work.visibility_after_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
89
+ a_work.lease_expiration_date = expiration_date.to_s
90
+ a_work.lease.save(validate: false)
91
+ a_work.save(validate: false)
85
92
  end
86
- it "should deactivate lease and redirect" do
87
- expect(a_work).to receive(:deactivate_lease!)
88
- expect(a_work).to receive(:save)
89
- patch :update, batch_document_ids: [a_work.id]
90
- expect(response).to redirect_to leases_path
93
+
94
+ context 'with an expired lease' do
95
+ let(:expiration_date) { Date.today - 2 }
96
+ it 'deactivates lease, update the visibility and redirect' do
97
+ patch :update, batch_document_ids: [a_work.id], leases: { '0' => { copy_visibility: a_work.id } }
98
+ expect(a_work.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
99
+ expect(file_set.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
100
+ expect(response).to redirect_to leases_path
101
+ end
91
102
  end
92
103
  end
93
104
  end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe UploadSetsController do
4
+ let(:user) { FactoryGirl.find_or_create(:jill) }
5
+ let(:other_user) { FactoryGirl.find_or_create(:curator) }
6
+ before do
7
+ sign_in user
8
+ allow_any_instance_of(User).to receive(:groups).and_return([])
9
+ end
10
+ describe "#update" do
11
+ let(:upload_set_update_message) { double('upload_set update message') }
12
+ let(:upload_set) { UploadSet.create }
13
+ context "when successful" do
14
+ it "enqueues a upload_set job and redirects to generic_works list with a flash message" do
15
+ expect(UploadSetUpdateJob).to receive(:perform_later).with(user.user_key, upload_set.id, { '1' => 'foo' },
16
+ { tag: [] }, 'open').once
17
+ post :update, id: upload_set.id, title: { '1' => 'foo' }, visibility: 'open', file_set: { tag: [""] }
18
+ expect(response).to redirect_to routes.url_helpers.curation_concerns_generic_works_path
19
+ expect(flash[:notice]).to include("Your files are being processed")
20
+ end
21
+ end
22
+
23
+ describe "when user has edit permissions on a file" do
24
+ # TODO: all these tests could move to upload_set_update_job_spec.rb
25
+ let!(:file) { FileSet.create(upload_set: upload_set) { |f| f.apply_depositor_metadata(user) } }
26
+
27
+ it "they can set public read access" do
28
+ post :update, id: upload_set, visibility: "open", file_set: { tag: [""] }
29
+ expect(file.reload.read_groups).to eq ['public']
30
+ end
31
+
32
+ it "they can set metadata like title" do
33
+ post :update, id: upload_set, file_set: { tag: ["footag", "bartag"] }, title: { file.id => ["New Title"] }
34
+ file.reload
35
+ expect(file.title).to eq ["New Title"]
36
+ # TODO: is order important?
37
+ expect(file.tag).to include("footag", "bartag")
38
+ end
39
+
40
+ it "they cannot set any tags" do
41
+ post :update, id: upload_set, file_set: { tag: [""] }
42
+ expect(file.reload.tag).to be_empty
43
+ end
44
+ end
45
+
46
+ describe "when user does not have edit permissions on a file" do
47
+ # TODO: all these tests could move to upload_set_update_job_spec.rb
48
+ let(:file) do
49
+ FileSet.new(upload_set: upload_set, title: ['Original Title']) do |f|
50
+ f.apply_depositor_metadata('someone_else')
51
+ f.save!
52
+ end
53
+ end
54
+
55
+ it "they cannot modify the object" do
56
+ post :update, id: upload_set, "file_set" => { "tag" => [""] },
57
+ "title" => { file.id => "Title Wont Change" }
58
+ file.reload
59
+ expect(file.title).to eq ["Original Title"]
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "#edit" do
65
+ let(:us1) { UploadSet.create }
66
+ let!(:file) { FileSet.create(upload_set: us1, label: 'f1') { |f| f.apply_depositor_metadata(user) } }
67
+ let!(:file2) { FileSet.create(upload_set: us1, label: 'f2') { |f| f.apply_depositor_metadata(user) } }
68
+
69
+ it "sets up attributes for the form" do
70
+ get :edit, id: us1
71
+ expect(assigns[:form]).not_to be_persisted
72
+ expect(assigns[:form].creator[0]).to eq user.user_key
73
+ expect(assigns[:form].title[0]).to eq 'f1'
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe WelcomeController do
4
+ describe '#index' do
5
+ before { get :index }
6
+
7
+ it 'displays the welcome page' do
8
+ expect(response).to be_success
9
+ expect(response).to render_template :index
10
+ end
11
+ end
12
+ end
@@ -6,10 +6,14 @@ FactoryGirl.define do
6
6
  user { FactoryGirl.create(:user) }
7
7
  end
8
8
 
9
- title "Test collection title"
9
+ title 'Test collection title'
10
10
 
11
11
  after(:build) do |collection, evaluator|
12
12
  collection.apply_depositor_metadata(evaluator.user.user_key)
13
13
  end
14
+
15
+ trait :public do
16
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
17
+ end
14
18
  end
15
19
  end
@@ -1,7 +1,7 @@
1
1
  FactoryGirl.define do
2
- # The ::GenericFile model is defined in spec/internal/app/models by the
2
+ # The ::FileSet model is defined in spec/internal/app/models by the
3
3
  # curation_concerns:install generator.
4
- factory :generic_file, class: GenericFile do
4
+ factory :file_set, class: FileSet do
5
5
  transient do
6
6
  user { FactoryGirl.create(:user) }
7
7
  content nil
@@ -9,19 +9,19 @@ FactoryGirl.define do
9
9
 
10
10
  after(:create) do |file, evaluator|
11
11
  if evaluator.content
12
- Hydra::Works::UploadFileToGenericFile.call(file, evaluator.content)
12
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
13
13
  end
14
14
  end
15
15
 
16
16
  factory :file_with_work do
17
- after(:build) do |file, evaluator|
17
+ after(:build) do |file, _evaluator|
18
18
  file.title = ['testfile']
19
19
  end
20
20
  after(:create) do |file, evaluator|
21
21
  if evaluator.content
22
- Hydra::Works::UploadFileToGenericFile.call(file, evaluator.content)
22
+ Hydra::Works::UploadFileToFileSet.call(file, evaluator.content)
23
23
  end
24
- FactoryGirl.create(:generic_work, user: evaluator.user).generic_files << file
24
+ FactoryGirl.create(:generic_work, user: evaluator.user).members << file
25
25
  end
26
26
  end
27
27
  after(:build) do |file, evaluator|
@@ -6,26 +6,25 @@ FactoryGirl.define do
6
6
  user { FactoryGirl.create(:user) }
7
7
  end
8
8
 
9
- title ["Test title"]
9
+ title ['Test title']
10
10
  visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
11
11
 
12
12
  after(:build) do |work, evaluator|
13
13
  work.apply_depositor_metadata(evaluator.user.user_key)
14
14
  end
15
15
 
16
-
17
16
  factory :public_generic_work do
18
17
  visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
19
18
  end
20
19
 
21
20
  factory :work_with_one_file do
22
21
  before(:create) do |work, evaluator|
23
- work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user, title:['A Contained Generic File'], filename:['filename.pdf'])
22
+ work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user, title: ['A Contained Generic File'], filename: 'filename.pdf')
24
23
  end
25
24
  end
26
25
 
27
26
  factory :work_with_files do
28
- before(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
27
+ before(:create) { |work, evaluator| 2.times { work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user) } }
29
28
  end
30
29
 
31
30
  factory :with_embargo_date do
@@ -38,7 +37,7 @@ FactoryGirl.define do
38
37
 
39
38
  factory :embargoed_work_with_files do
40
39
  after(:build) { |work, evaluator| work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
41
- after(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
40
+ after(:create) { |work, evaluator| 2.times { work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user) } }
42
41
  end
43
42
 
44
43
  factory :leased_work do
@@ -47,7 +46,7 @@ FactoryGirl.define do
47
46
 
48
47
  factory :leased_work_with_files do
49
48
  after(:build) { |work, evaluator| work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
50
- after(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
49
+ after(:create) { |work, evaluator| 2.times { work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user) } }
51
50
  end
52
51
  end
53
52
  end
@@ -1,12 +1,12 @@
1
1
  FactoryGirl.define do
2
2
  factory :user do
3
- sequence(:email) {|n| "email-#{srand}@test.com" }
3
+ sequence(:email) { |_n| "email-#{srand}@test.com" }
4
4
  password 'a password'
5
5
  password_confirmation 'a password'
6
6
  factory :admin do
7
7
  after(:build) do |user|
8
8
  def user.groups
9
- ["admin"]
9
+ ['admin']
10
10
  end
11
11
  end
12
12
  end
@@ -22,7 +22,5 @@ FactoryGirl.define do
22
22
  factory :curator do
23
23
  email 'curator1@example.com'
24
24
  end
25
-
26
25
  end
27
-
28
26
  end
@@ -1,30 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Add an attached file" do
4
- let(:user) { FactoryGirl.create(:user) }
5
- let!(:work) { FactoryGirl.create(:work, user: user) }
3
+ describe 'Add an attached file' do
4
+ let(:user) { create(:user) }
5
+ let!(:work) { create(:work, user: user) }
6
6
 
7
7
  before do
8
8
  sign_in user
9
9
  # stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
10
- s2 = double('resque message')
11
- expect(CharacterizeJob).to receive(:new).and_return(s2)
12
- expect(CurationConcerns.queue).to receive(:push).with(s2).once
10
+ allow(CharacterizeJob).to receive(:perform_later)
11
+ allow_any_instance_of(CurationConcerns::FileSetActor).to receive(:acquire_lock_for).and_yield
13
12
  end
14
13
 
15
- it "should update the file" do
14
+ it 'updates the file' do
16
15
  visit "/concern/generic_works/#{work.id}"
17
16
  click_link 'Attach a File'
18
17
 
19
- within("form.new_generic_file") do
20
- fill_in("Title", with: 'image.png')
21
- attach_file("Upload a file", fixture_file_path('files/image.png'))
22
- click_on("Attach to Generic Work")
18
+ within('form.new_file_set') do
19
+ fill_in('Title', with: 'image.png')
20
+ attach_file('Upload a file', fixture_file_path('files/image.png'))
21
+ click_on('Attach to Generic Work')
23
22
  end
24
23
 
25
24
  visit "/concern/generic_works/#{work.id}"
26
25
  within '.related_files' do
27
- expect(page).to have_link "image.png"
26
+ expect(page).to have_link 'image.png'
28
27
  end
29
28
  end
30
29
  end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Catalog index page' do
4
+ let!(:work) { create(:public_generic_work, title: ['My Work']) }
5
+ let!(:coll) { create(:collection, :public, title: 'My Collection') }
6
+
7
+ scenario 'Browse the catalog using filter tabs' do
8
+ visit catalog_index_path
9
+
10
+ # Filter on Works
11
+ within '#type-tabs' do
12
+ click_on 'Works'
13
+ end
14
+
15
+ expect(page).to have_selector('#documents .document', count: 1)
16
+ within '#documents' do
17
+ expect(page).to have_link 'My Work'
18
+ expect(page).to_not have_link 'My Collection'
19
+ end
20
+
21
+ # Filter on Collections
22
+ within '#type-tabs' do
23
+ click_on 'Collections'
24
+ end
25
+
26
+ expect(page).to have_selector('#documents .document', count: 1)
27
+ within '#documents' do
28
+ expect(page).to_not have_link 'My Work'
29
+ expect(page).to have_link 'My Collection'
30
+ end
31
+
32
+ # Filter on All
33
+ within '#type-tabs' do
34
+ click_on 'All'
35
+ end
36
+
37
+ expect(page).to have_selector('#documents .document', count: 2)
38
+ within '#documents' do
39
+ expect(page).to have_link 'My Work'
40
+ expect(page).to have_link 'My Collection'
41
+ end
42
+ end
43
+ end