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
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ # This tests the CurationConcerns::CurationConcernController module
4
+ # which is included into spec/internal/app/controllers/generic_works_controller.rb
5
+ describe CurationConcerns::GenericWorksController do
6
+ let(:user) { create(:user) }
7
+ before { sign_in user }
8
+
9
+ context "JSON" do
10
+ let(:resource) { create(:private_generic_work, user: user) }
11
+ let(:resource_request) { get :show, id: resource, format: :json }
12
+ subject { response }
13
+
14
+ describe "unauthorized" do
15
+ before do
16
+ sign_out user
17
+ resource_request
18
+ end
19
+ it { is_expected.to respond_unauthorized }
20
+ end
21
+
22
+ describe "forbidden" do
23
+ before do
24
+ sign_in create(:user)
25
+ resource_request
26
+ end
27
+ it { is_expected.to respond_forbidden }
28
+ end
29
+
30
+ describe 'not found' do
31
+ before { get :show, id: "non-existent-pid", format: :json }
32
+ it { is_expected.to respond_not_found }
33
+ end
34
+
35
+ describe 'created' do
36
+ before { post :create, generic_work: { title: ['a title'] }, format: :json }
37
+ it "returns 201, renders show template sets location header" do
38
+ # Ensure that @curation_concern is set for jbuilder template to use
39
+ expect(assigns[:curation_concern]).to be_instance_of ::GenericWork
40
+ expect(controller).to render_template('curation_concerns/base/show')
41
+ expect(response.code).to eq "201"
42
+ created_resource = assigns[:curation_concern]
43
+ expect(response.location).to eq main_app.curation_concerns_generic_work_path(created_resource)
44
+ end
45
+ end
46
+
47
+ describe 'failed create' do
48
+ before { post :create, generic_work: {}, format: :json }
49
+ it "returns 422 and the errors" do
50
+ created_resource = assigns[:curation_concern]
51
+ expect(response).to respond_unprocessable_entity(errors: created_resource.errors.messages.as_json)
52
+ end
53
+ end
54
+
55
+ describe 'found' do
56
+ before { resource_request }
57
+ it "returns json of the work" do
58
+ # Ensure that @curation_concern is set for jbuilder template to use
59
+ expect(assigns[:curation_concern]).to be_instance_of ::GenericWork
60
+ expect(controller).to render_template('curation_concerns/base/show')
61
+ expect(response.code).to eq "200"
62
+ end
63
+ end
64
+
65
+ describe 'updated' do
66
+ before { put :update, id: resource, generic_work: { title: ['updated title'] }, format: :json }
67
+ it "returns 200, renders show template sets location header" do
68
+ # Ensure that @curation_concern is set for jbuilder template to use
69
+ expect(assigns[:curation_concern]).to be_instance_of ::GenericWork
70
+ expect(controller).to render_template('curation_concerns/base/show')
71
+ expect(response.code).to eq "200"
72
+ created_resource = assigns[:curation_concern]
73
+ expect(response.location).to eq main_app.curation_concerns_generic_work_path(created_resource)
74
+ end
75
+ end
76
+
77
+ describe 'failed update' do
78
+ before { post :update, id: resource, generic_work: { title: [] }, format: :json }
79
+
80
+ it "returns 422 and the errors" do
81
+ expect(response).to respond_unprocessable_entity(errors: { "title": ["Your work must have a title."] })
82
+ end
83
+ end
84
+ end
85
+ end
@@ -1,166 +1,178 @@
1
1
  require 'spec_helper'
2
2
 
3
+ # This tests the CurationConcerns::CurationConcernController module
4
+ # which is included into spec/internal/app/controllers/generic_works_controller.rb
3
5
  describe CurationConcerns::GenericWorksController do
4
- let(:public_work_factory_name) { :public_generic_work }
5
- let(:private_work_factory_name) { :work }
6
-
7
- let(:user) { FactoryGirl.create(:user) }
6
+ let(:user) { create(:user) }
8
7
  before { sign_in user }
9
8
 
10
- describe "#show" do
11
- context "my own private work" do
12
- let(:a_work) { FactoryGirl.create(private_work_factory_name, user: user) }
13
- it "should show me the page" do
9
+ describe '#show' do
10
+ context 'my own private work' do
11
+ let(:a_work) { create(:private_generic_work, user: user) }
12
+ it 'shows me the page' do
14
13
  get :show, id: a_work
15
14
  expect(response).to be_success
16
15
  end
17
16
  end
18
17
 
19
- context "someone elses private work" do
20
- let(:a_work) { FactoryGirl.create(private_work_factory_name) }
21
- it "should redirect and show unauthorized message" do
18
+ context 'someone elses private work' do
19
+ let(:a_work) { create(:private_generic_work) }
20
+ it 'shows unauthorized message' do
22
21
  get :show, id: a_work
23
- expect(response).to fail_redirect_and_flash(main_app.root_path, 'You are not authorized to access this page.')
22
+ expect(response.code).to eq '401'
23
+ expect(response).to render_template(:unauthorized)
24
24
  end
25
25
  end
26
26
 
27
- context "someone elses public work" do
28
- let(:a_work) { FactoryGirl.create(public_work_factory_name) }
29
- it "should show me the page" do
27
+ context 'someone elses public work' do
28
+ let(:a_work) { create(:public_generic_work) }
29
+ it 'shows me the page' do
30
30
  get :show, id: a_work
31
31
  expect(response).to be_success
32
32
  end
33
33
  end
34
34
 
35
- context "when I am a repository manager" do
35
+ context 'when I am a repository manager' do
36
36
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
37
- let(:a_work) { FactoryGirl.create(private_work_factory_name) }
38
- it "someone elses private work should show me the page" do
37
+ let(:a_work) { create(:private_generic_work) }
38
+ it 'someone elses private work should show me the page' do
39
39
  get :show, id: a_work
40
40
  expect(response).to be_success
41
41
  end
42
42
  end
43
43
  end
44
44
 
45
- describe "#new" do
46
- context "my work" do
47
- it "should show me the page" do
45
+ describe '#new' do
46
+ context 'my work' do
47
+ it 'shows me the page' do
48
48
  get :new
49
49
  expect(response).to be_success
50
50
  end
51
51
  end
52
52
  end
53
53
 
54
- describe "#create" do
55
- it "should create a work" do
56
- expect {
57
- post :create, generic_work: { title: ["a title"] }
58
- }.to change { GenericWork.count }.by(1)
54
+ describe '#create' do
55
+ it 'creates a work' do
56
+ expect do
57
+ post :create, generic_work: { title: ['a title'] }
58
+ end.to change { GenericWork.count }.by(1)
59
59
  expect(response).to redirect_to main_app.curation_concerns_generic_work_path(assigns[:curation_concern])
60
60
  end
61
61
  end
62
62
 
63
- describe "#edit" do
64
- context "my own private work" do
65
- let(:a_work) { FactoryGirl.create(private_work_factory_name, user: user) }
66
- it "should show me the page" do
63
+ describe '#edit' do
64
+ context 'my own private work' do
65
+ let(:a_work) { create(:private_generic_work, user: user) }
66
+ it 'shows me the page' do
67
67
  get :edit, id: a_work
68
+ expect(assigns[:form]).to be_kind_of CurationConcerns::GenericWorkForm
68
69
  expect(response).to be_success
69
70
  end
70
71
  end
71
72
 
72
- context "someone elses private work" do
73
+ context 'someone elses private work' do
73
74
  routes { Rails.application.class.routes }
74
- let(:a_work) { FactoryGirl.create(private_work_factory_name) }
75
- it "should redirect and show unauthorized message" do
75
+ let(:a_work) { create(:private_generic_work) }
76
+ it 'shows the unauthorized message' do
76
77
  get :edit, id: a_work
77
- expect(response).to fail_redirect_and_flash(main_app.curation_concerns_generic_work_path(assigns[:curation_concern]), 'You are not authorized to access this page.')
78
+ expect(response.code).to eq '401'
79
+ expect(response).to render_template(:unauthorized)
78
80
  end
79
81
  end
80
82
 
81
- context "someone elses public work" do
82
- let(:a_work) { FactoryGirl.create(public_work_factory_name) }
83
- it "should show me the page" do
83
+ context 'someone elses public work' do
84
+ let(:a_work) { create(:public_generic_work) }
85
+ it 'shows the unauthorized message' do
84
86
  get :edit, id: a_work
85
- expect(response).to fail_redirect_and_flash(main_app.curation_concerns_generic_work_path(assigns[:curation_concern]), 'You are not authorized to access this page.')
87
+ expect(response.code).to eq '401'
88
+ expect(response).to render_template(:unauthorized)
86
89
  end
87
90
  end
88
91
 
89
- context "when I am a repository manager" do
92
+ context 'when I am a repository manager' do
90
93
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
91
- let(:a_work) { FactoryGirl.create(private_work_factory_name) }
92
- it "someone elses private work should show me the page" do
94
+ let(:a_work) { create(:private_generic_work) }
95
+ it 'someone elses private work should show me the page' do
93
96
  get :edit, id: a_work
94
97
  expect(response).to be_success
95
98
  end
96
99
  end
97
100
  end
98
101
 
99
- describe "#update" do
100
- let(:a_work) { FactoryGirl.create(private_work_factory_name, user: user) }
102
+ describe '#update' do
103
+ let(:a_work) { FactoryGirl.create(:private_generic_work, user: user) }
104
+ before do
105
+ allow(controller).to receive(:actor).and_return(actor)
106
+ end
107
+ let(:actor) { double(update: true, visibility_changed?: false) }
101
108
 
102
- it "should update the work " do
103
- patch :update, id: a_work, generic_work: { }
109
+ it 'updates the work' do
110
+ patch :update, id: a_work, generic_work: {}
104
111
  expect(response).to redirect_to main_app.curation_concerns_generic_work_path(a_work)
105
112
  end
106
113
 
107
- describe "changing rights" do
108
- it "should prompt to change the files access" do
109
- allow(controller).to receive(:actor).and_return(double(update: true, visibility_changed?: true))
114
+ describe 'changing rights' do
115
+ let(:actor) { double(update: true, visibility_changed?: true) }
116
+
117
+ it 'prompts to change the files access' do
110
118
  patch :update, id: a_work
111
119
  expect(response).to redirect_to main_app.confirm_curation_concerns_permission_path(controller.curation_concern)
112
120
  end
113
121
  end
114
122
 
115
- describe "failure" do
116
- it "renders the form" do
117
- allow(controller).to receive(:actor).and_return(double(update: false, visibility_changed?: false))
123
+ describe 'failure' do
124
+ let(:actor) { double(update: false, visibility_changed?: false) }
125
+
126
+ it 'renders the form' do
118
127
  patch :update, id: a_work
128
+ expect(assigns[:form]).to be_kind_of CurationConcerns::GenericWorkForm
119
129
  expect(response).to render_template('edit')
120
130
  end
121
131
  end
122
132
 
123
- context "someone elses public work" do
124
- let(:a_work) { FactoryGirl.create(public_work_factory_name) }
125
- it "should redirect and show unauthorized message" do
133
+ context 'someone elses public work' do
134
+ let(:a_work) { create(:public_generic_work) }
135
+ it 'shows the unauthorized message' do
126
136
  get :update, id: a_work
127
- expect(response).to fail_redirect_and_flash(main_app.root_path, 'You are not authorized to access this page.')
137
+ expect(response.code).to eq '401'
138
+ expect(response).to render_template(:unauthorized)
128
139
  end
129
140
  end
130
141
 
131
- context "when I am a repository manager" do
142
+ context 'when I am a repository manager' do
132
143
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
133
- let(:a_work) { FactoryGirl.create(private_work_factory_name) }
134
- it "someone elses private work should update the work" do
135
- patch :update, id: a_work, generic_work: { }
144
+ let(:a_work) { create(:private_generic_work) }
145
+ it 'someone elses private work should update the work' do
146
+ patch :update, id: a_work, generic_work: {}
136
147
  expect(response).to redirect_to main_app.curation_concerns_generic_work_path(a_work)
137
148
  end
138
149
  end
139
150
  end
140
151
 
141
- describe "#destroy" do
142
- let(:work_to_be_deleted) { FactoryGirl.create(private_work_factory_name, user: user) }
152
+ describe '#destroy' do
153
+ let(:work_to_be_deleted) { create(:private_generic_work, user: user) }
143
154
 
144
- it "should delete the work" do
155
+ it 'deletes the work' do
145
156
  delete :destroy, id: work_to_be_deleted
146
- expect(response).to redirect_to main_app.catalog_index_path()
147
- expect { GenericWork.find(work_to_be_deleted.id) }.to raise_error
157
+ expect(response).to redirect_to main_app.catalog_index_path
158
+ expect(GenericWork).not_to exist(work_to_be_deleted.id)
148
159
  end
149
160
 
150
- context "someone elses public work" do
151
- let(:work_to_be_deleted) { FactoryGirl.create(private_work_factory_name) }
152
- it "should redirect and show unauthorized message" do
161
+ context 'someone elses public work' do
162
+ let(:work_to_be_deleted) { create(:private_generic_work) }
163
+ it 'shows unauthorized message' do
153
164
  delete :destroy, id: work_to_be_deleted
154
- expect(response).to fail_redirect_and_flash(main_app.root_path, 'You are not authorized to access this page.')
165
+ expect(response.code).to eq '401'
166
+ expect(response).to render_template(:unauthorized)
155
167
  end
156
168
  end
157
169
 
158
- context "when I am a repository manager" do
159
- let(:work_to_be_deleted) { FactoryGirl.create(private_work_factory_name) }
170
+ context 'when I am a repository manager' do
171
+ let(:work_to_be_deleted) { create(:private_generic_work) }
160
172
  before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
161
- it "someone elses private work should delete the work" do
173
+ it 'someone elses private work should delete the work' do
162
174
  delete :destroy, id: work_to_be_deleted
163
- expect { GenericWork.find(work_to_be_deleted.id) }.to raise_error
175
+ expect(GenericWork).not_to exist(work_to_be_deleted.id)
164
176
  end
165
177
  end
166
178
  end
@@ -1,29 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CurationConcerns::PermissionsController do
4
- let(:user) { FactoryGirl.create(:user) }
4
+ let(:user) { create(:user) }
5
5
  before { sign_in user }
6
6
 
7
- describe "#confirm" do
8
- let(:generic_work) { FactoryGirl.create(:generic_work, user: user) }
7
+ describe '#confirm' do
8
+ let(:generic_work) { create(:generic_work, user: user) }
9
9
 
10
- it "should draw the page" do
10
+ it 'draws the page' do
11
11
  get :confirm, id: generic_work
12
12
  expect(response).to be_success
13
13
  end
14
14
  end
15
15
 
16
- describe "#copy" do
17
- let(:generic_work) { FactoryGirl.create(:generic_work, user: user) }
18
- let(:worker) { double }
16
+ describe '#copy' do
17
+ let(:generic_work) { create(:generic_work, user: user) }
19
18
 
20
- it "should add a worker to the queue" do
21
- expect(VisibilityCopyWorker).to receive(:new).with(generic_work.id).and_return(worker)
22
- expect(CurationConcerns.queue).to receive(:push).with(worker)
19
+ it 'adds a worker to the queue' do
20
+ expect(VisibilityCopyJob).to receive(:perform_later).with(generic_work.id)
23
21
  post :copy, id: generic_work
24
22
  expect(response).to redirect_to main_app.curation_concerns_generic_work_path(generic_work)
25
23
  expect(flash[:notice]).to eq 'Updating file permissions. This may take a few minutes. You may want to refresh your browser or return to this record later to see the updated file permissions.'
26
24
  end
27
25
  end
28
-
29
26
  end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurationConcerns::SingleUseLinksController, type: :controller do
4
+ routes { CurationConcerns::Engine.routes }
5
+ let(:user) { FactoryGirl.find_or_create(:jill) }
6
+
7
+ let(:file) do
8
+ FileSet.create do |file|
9
+ file.apply_depositor_metadata(user)
10
+ end
11
+ end
12
+
13
+ describe "logged in user with edit permission" do
14
+ let(:hash) { "some-dummy-sha2-hash" }
15
+
16
+ before do
17
+ sign_in user
18
+ allow(DateTime).to receive(:now).and_return(DateTime.now)
19
+ expect(Digest::SHA2).to receive(:new).and_return(hash)
20
+ end
21
+
22
+ describe "GET 'download'" do
23
+ it "and_return http success" do
24
+ get 'new_download', id: file
25
+ expect(response).to be_success
26
+ expect(assigns[:link]).to eq routes.url_helpers.download_single_use_link_path(hash)
27
+ end
28
+ end
29
+
30
+ describe "GET 'show'" do
31
+ it "and_return http success" do
32
+ get 'new_show', id: file
33
+ expect(response).to be_success
34
+ expect(assigns[:link]).to eq routes.url_helpers.show_single_use_link_path(hash)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "logged in user without edit permission" do
40
+ before do
41
+ @other_user = FactoryGirl.find_or_create(:archivist)
42
+ file.read_users << @other_user
43
+ file.save
44
+ sign_in @other_user
45
+ file.read_users << @other_user
46
+ file.save
47
+ end
48
+
49
+ describe "GET 'download'" do
50
+ it "and_return http success" do
51
+ get 'new_download', id: file
52
+ expect(response).not_to be_success
53
+ end
54
+ end
55
+
56
+ describe "GET 'show'" do
57
+ it "and_return http success" do
58
+ get 'new_show', id: file
59
+ expect(response).not_to be_success
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "unknown user" do
65
+ describe "GET 'download'" do
66
+ it "and_return http failure" do
67
+ get 'new_download', id: file
68
+ expect(response).not_to be_success
69
+ end
70
+ end
71
+
72
+ describe "GET 'show'" do
73
+ it "and_return http failure" do
74
+ get 'new_show', id: file
75
+ expect(response).not_to be_success
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurationConcerns::SingleUseLinksViewerController do
4
+ routes { CurationConcerns::Engine.routes }
5
+ let(:file) do
6
+ file = FileSet.create do |lfile|
7
+ lfile.label = 'world.png'
8
+ lfile.apply_depositor_metadata('mjg')
9
+ end
10
+ Hydra::Works::AddFileToFileSet.call(file, File.open(fixture_path + '/world.png'), :original_file)
11
+ file
12
+ end
13
+
14
+ describe "retrieval links" do
15
+ let :show_link do
16
+ SingleUseLink.create itemId: file.id, path: Rails.application.routes.url_helpers.curation_concerns_file_set_path(id: file)
17
+ end
18
+
19
+ let :download_link do
20
+ SingleUseLink.create itemId: file.id, path: Rails.application.routes.url_helpers.download_path(id: file)
21
+ end
22
+
23
+ let :show_link_hash do
24
+ show_link.downloadKey
25
+ end
26
+
27
+ let :download_link_hash do
28
+ download_link.downloadKey
29
+ end
30
+
31
+ describe "GET 'download'" do
32
+ let(:expected_content) { ActiveFedora::Base.find(file.id).original_file.content }
33
+
34
+ it "and_return http success" do
35
+ expect(controller).to receive(:send_file_headers!).with(filename: 'world.png', disposition: 'inline', type: 'image/png')
36
+ get :download, id: download_link_hash
37
+ expect(response.body).to eq expected_content
38
+ expect(response).to be_success
39
+ expect { SingleUseLink.find_by_downloadKey!(download_link_hash) }.to raise_error ActiveRecord::RecordNotFound
40
+ end
41
+
42
+ context "and the key is not found" do
43
+ before { SingleUseLink.find_by_downloadKey!(download_link_hash).destroy }
44
+
45
+ it "returns 404 if the key is not present" do
46
+ get :download, id: download_link_hash
47
+ expect(response).to render_template('error/single_use_error')
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "GET 'show'" do
53
+ it "and_return http success" do
54
+ get 'show', id: show_link_hash
55
+ expect(response).to be_success
56
+ expect(assigns[:presenter].id).to eq file.id
57
+ expect { SingleUseLink.find_by_downloadKey!(show_link_hash) }.to raise_error ActiveRecord::RecordNotFound
58
+ end
59
+
60
+ context "and the key is not found" do
61
+ before { SingleUseLink.find_by_downloadKey!(show_link_hash).destroy }
62
+ it "returns 404 if the key is not present" do
63
+ get :show, id: show_link_hash
64
+ expect(response).to render_template('error/single_use_error')
65
+ end
66
+ end
67
+
68
+ it "returns 404 on attempt to get show path with download hash" do
69
+ get :show, id: download_link_hash
70
+ expect(response).to render_template('error/single_use_error')
71
+ end
72
+ end
73
+ end
74
+ end
@@ -3,49 +3,74 @@ require 'spec_helper'
3
3
  describe DownloadsController do
4
4
  describe '#show' do
5
5
  let(:user) { FactoryGirl.create(:user) }
6
- let(:another_user) { FactoryGirl.create(:user) }
7
- let(:generic_file) {
6
+ let(:file_set) do
8
7
  FactoryGirl.create(:file_with_work, user: user, content: File.open(fixture_file_path('files/image.png')))
9
- }
10
-
11
- it "raise not_found if the object does not exist" do
8
+ end
9
+ it 'raise not_found if the object does not exist' do
12
10
  get :show, id: '8675309'
13
11
  expect(response).to be_not_found
14
12
  end
15
13
 
16
14
  context "when user doesn't have access" do
15
+ let(:another_user) { FactoryGirl.create(:user) }
17
16
  before do
18
- # generic_file
19
17
  sign_in another_user
20
18
  end
21
- it "redirects to root" do
22
- get :show, id: generic_file.to_param
19
+ it 'redirects to root' do
20
+ get :show, id: file_set.to_param
23
21
  expect(response).to redirect_to root_path
24
- expect(flash["alert"]).to eq "You are not authorized to access this page."
22
+ expect(flash['alert']).to eq 'You are not authorized to access this page.'
25
23
  end
26
24
  end
27
25
 
28
26
  context "when user isn't logged in" do
29
- # before { generic_file }
30
- it "redirects to sign in" do
31
- get :show, id: generic_file.to_param
27
+ it 'redirects to sign in' do
28
+ get :show, id: file_set.to_param
32
29
  expect(response).to redirect_to new_user_session_path
33
- expect(flash["alert"]).to eq "You are not authorized to access this page."
30
+ expect(flash['alert']).to eq 'You are not authorized to access this page.'
34
31
  end
35
32
  end
36
33
 
37
- it 'sends the file if the user has access' do
38
- # generic_file
39
- sign_in user
40
- get :show, id: generic_file.to_param
41
- expect(response.body).to eq generic_file.original_file.content
42
- end
34
+ context "when the user has access" do
35
+ before do
36
+ sign_in user
37
+ end
38
+
39
+ it 'sends the original file' do
40
+ get :show, id: file_set
41
+ expect(response.body).to eq file_set.original_file.content
42
+ end
43
43
 
44
- it 'sends requested file content' do
45
- Hydra::Works::AddFileToGenericFile.call(generic_file, File.open(fixture_file_path('world.png')), :thumbnail)
46
- sign_in user
47
- get :show, id: generic_file.to_param, file: 'thumbnail'
48
- expect(response.body).to eq generic_file.thumbnail.content
44
+ context "with an alternative file" do
45
+ context "that is persisted" do
46
+ let(:file) { File.open(fixture_file_path('world.png'), 'rb') }
47
+
48
+ let(:content) { file.read }
49
+
50
+ before do
51
+ allow(CurationConcerns::DerivativePath).to receive(:derivative_path_for_reference).and_return(fixture_file_path('world.png'))
52
+ end
53
+
54
+ it 'sends requested file content' do
55
+ get :show, id: file_set, file: 'thumbnail'
56
+ expect(response.body).to eq content
57
+ expect(response.headers['Content-Length']).to eq "4218"
58
+ expect(response.headers['Accept-Ranges']).to eq "bytes"
59
+ end
60
+ end
61
+
62
+ context "that isn't persisted" do
63
+ it "returns 404 if the requested file does not exist" do
64
+ get :show, id: file_set, file: 'thumbnail'
65
+ expect(response.status).to eq 404
66
+ end
67
+ end
68
+ end
69
+
70
+ it "returns 404 if the requested association does not exist" do
71
+ get :show, id: file_set, file: 'non-existant'
72
+ expect(response.status).to eq 404
73
+ end
49
74
  end
50
75
  end
51
76
  end