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,251 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::GenericFilesController do
4
- let(:user) { FactoryGirl.create(:user) }
5
- let(:file) { fixture_file_upload('files/image.png','image/png') }
6
- let(:parent) { FactoryGirl.create(:generic_work, edit_users: [user.user_key], visibility:Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
7
-
8
- context "when signed in" do
9
- before { sign_in user }
10
-
11
- describe "#create" do
12
- before do
13
- GenericFile.destroy_all
14
- end
15
-
16
- context "on the happy path" do
17
- let(:date_today) { DateTime.now }
18
-
19
- before do
20
- allow(DateTime).to receive(:now).and_return(date_today)
21
- end
22
-
23
- it "spawns a CharacterizeJob" do
24
- s2 = double('one')
25
- expect(CharacterizeJob).to receive(:new).and_return(s2)
26
- expect(CurationConcerns.queue).to receive(:push).with(s2).once
27
- expect {
28
- xhr :post, :create, files: [file], parent_id: parent,
29
- generic_file: { "title"=>["test title"],
30
- visibility: "restricted"}
31
- expect(response).to be_success
32
- }.to change { GenericFile.count }.by(1)
33
- expect(flash[:error]).to be_nil
34
- saved_file = assigns[:generic_file].reload
35
-
36
- expect(saved_file.title).to eq ['test title']
37
- expect(saved_file.label).to eq 'image.png'
38
- expect(parent.reload.generic_files).to include saved_file
39
- # Confirming that date_uploaded and date_modified were set
40
- expect(saved_file.date_uploaded).to eq date_today.utc
41
- expect(saved_file.date_modified).to eq date_today.utc
42
- expect(saved_file.depositor).to eq user.email
43
-
44
- expect(saved_file.original_file.versions.count).to eq(3)
45
- expect(saved_file.original_file.versions.last).to be_instance_of(ActiveFedora::VersionsGraph::ResourceVersion)
46
-
47
- # Confirm that embargo/lease are not set.
48
- expect(saved_file).to_not be_under_embargo
49
- expect(saved_file).to_not be_active_lease
50
- expect(saved_file.visibility).to eq 'restricted'
51
- end
52
-
53
- it "copies visibility from the parent" do
54
- s2 = double('one')
55
- expect(CharacterizeJob).to receive(:new).and_return(s2)
56
- allow(CurationConcerns.queue).to receive(:push).with(s2).once
57
- xhr :post, :create, files: [file], parent_id: parent
58
- expect(assigns[:generic_file]).to be_persisted
59
- saved_file = assigns[:generic_file].reload
60
- expect(saved_file.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
61
- end
62
- end
63
-
64
- context "on something that isn't a file" do
65
- it "should render error" do
66
- xhr :post, :create, files: ['hello'], parent_id: parent,
67
- permission: { group: { 'public' => 'read' } }, terms_of_service: '1'
68
- expect(response.status).to eq 422
69
- err = JSON.parse(response.body).first['error']
70
- expect(err).to match(/no file for upload/i)
71
- end
72
- end
73
-
74
- context "when the file has a virus" do
75
- it "displays a flash error" do
76
- skip "pending hydra-works#89"
77
- expect(CurationConcerns::GenericFileActor).to receive(:virus_check).with(file.path).and_raise(CurationConcerns::VirusFoundError.new('A virus was found'))
78
- xhr :post, :create, files: [file], parent_id: parent,
79
- permission: { group: { 'public' => 'read' } }, terms_of_service: '1'
80
- expect(flash[:error]).to include('A virus was found')
81
- end
82
- end
83
-
84
- context "when solr is down" do
85
- it "should error out of create and save after on continuos rsolr error" do
86
- allow_any_instance_of(GenericFile).to receive(:save).and_raise(RSolr::Error::Http.new({},{}))
87
-
88
- xhr :post, :create, files: [file], parent_id: parent,
89
- permission: { group: { 'public' => 'read' } }, terms_of_service: '1'
90
- expect(response.body).to include("Error occurred while creating generic file.")
91
- end
92
- end
93
-
94
- end
95
-
96
- describe "destroy" do
97
- let(:generic_file) do
98
- generic_file = GenericFile.new.tap do |gf|
99
- gf.apply_depositor_metadata(user)
100
- gf.save!
101
- end
102
- parent.generic_files << generic_file
103
- generic_file
104
- end
105
-
106
- it "should delete the file" do
107
- expect(GenericFile.find(generic_file.id)).to be_kind_of GenericFile
108
- delete :destroy, id: generic_file
109
- expect { GenericFile.find(generic_file.id) }.to raise_error Ldp::Gone
110
- expect(response).to redirect_to main_app.curation_concerns_generic_work_path(parent)
111
- end
112
- end
113
-
114
- describe "update" do
115
- let!(:generic_file) do
116
- generic_file = GenericFile.new.tap do |gf|
117
- gf.apply_depositor_metadata(user)
118
- gf.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
119
- gf.save!
120
- end
121
- parent.generic_files << generic_file
122
- generic_file
123
- end
124
-
125
- after do
126
- generic_file.destroy
127
- end
128
-
129
- context "updating metadata" do
130
- it "should be successful and update attributes" do
131
- post :update, id: generic_file, generic_file:
132
- {title: ['new_title'], tag: [''], permissions_attributes: [{ type: 'person', name: 'archivist1', access: 'edit'}]}
133
- expect(response).to redirect_to main_app.curation_concerns_generic_file_path(generic_file)
134
- expect(assigns[:generic_file].title).to eq(['new_title'])
135
- end
136
-
137
- it "should go back to edit on an error" do
138
- allow_any_instance_of(GenericFile).to receive(:valid?).and_return(false)
139
- post :update, id: generic_file, generic_file:
140
- {title: ['new_title'], tag: [''], permissions_attributes: [{ type: 'person', name: 'archivist1', access: 'edit'}]}
141
- expect(response).to be_successful
142
- expect(response).to render_template('edit')
143
- expect(assigns[:generic_file]).to eq generic_file
144
- end
145
-
146
- it "should add a new groups and users" do
147
- post :update, id: generic_file, generic_file:
148
- { title: ['new_title'], tag: [''], permissions_attributes: [{ type: 'group', name: 'group1', access: 'read'}, { type: 'person', name: 'user1', access: 'edit'}]}
149
-
150
- expect(assigns[:generic_file].read_groups).to eq ["group1"]
151
- expect(assigns[:generic_file].edit_users).to include("user1")
152
- end
153
-
154
- it "should update existing groups and users" do
155
- generic_file.read_groups = ['group3']
156
- generic_file.save! # TODO slow , more than one save.
157
- post :update, id: generic_file, generic_file:
158
- { title: ['new_title'], tag: [''], permissions_attributes:[{ type: 'group', name: 'group3', access: 'edit'}] }
159
- expect(assigns[:generic_file].edit_groups).to eq ["group3"]
160
- end
161
-
162
- context "updating visibility" do
163
- it "should apply public" do
164
- new_visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
165
- post :update, id: generic_file, generic_file: {visibility: new_visibility, embargo_release_date:""}
166
- expect(generic_file.reload.visibility).to eq new_visibility
167
- end
168
-
169
- it "should apply embargo" do
170
- post :update, id: generic_file, generic_file: {
171
- visibility: 'embargo',
172
- visibility_during_embargo: "restricted",
173
- embargo_release_date: "2099-09-05",
174
- visibility_after_embargo: "open",
175
- visibility_during_lease: "open",
176
- lease_expiration_date: "2099-09-05",
177
- visibility_after_lease: "restricted"
178
- }
179
- generic_file.reload
180
- expect(generic_file).to be_under_embargo
181
- expect(generic_file).to_not be_active_lease
182
- end
183
- end
184
- end
185
-
186
- context "updating file content" do
187
- it "should be successful" do
188
- s2 = double('one')
189
- expect(CharacterizeJob).to receive(:new).with(generic_file.id).and_return(s2)
190
- expect(CurationConcerns.queue).to receive(:push).with(s2).once
191
- post :update, id: generic_file, files: [file]
192
- expect(response).to redirect_to main_app.curation_concerns_generic_file_path(generic_file)
193
- skip "pending hydra-works#89"
194
- expect(generic_file.reload.label).to eq 'image.png'
195
- end
196
- end
197
-
198
- context "restoring an old version" do
199
- before do
200
- allow(CurationConcerns.queue).to receive(:push) # don't run characterization jobs
201
- # Create version 1
202
- Hydra::Works::AddFileToGenericFile.call(generic_file, File.open(fixture_file_path('small_file.txt')), :original_file)
203
- # Create version 2
204
- Hydra::Works::AddFileToGenericFile.call(generic_file, File.open(fixture_file_path('curation_concerns_generic_stub.txt')), :original_file)
205
- end
206
-
207
- it "should be successful" do
208
- expect(generic_file.latest_content_version.label).to eq('version2')
209
- expect(generic_file.original_file.content).to eq("This is a test fixture for curation_concerns: <%= @id %>.\n")
210
- post :update, id: generic_file, revision: 'version1'
211
- expect(response).to redirect_to main_app.curation_concerns_generic_file_path(generic_file)
212
- reloaded = generic_file.reload.original_file
213
- expect(reloaded.versions.last.label).to eq 'version3'
214
- expect(reloaded.content).to eq "small\n"
215
- expect(reloaded.mime_type).to eq 'text/plain'
216
- end
217
- end
218
- end
219
- end
220
-
221
- context "someone elses files" do
222
- let(:generic_file) do
223
- generic_file = GenericFile.new.tap do |gf|
224
- gf.apply_depositor_metadata('archivist1@example.com')
225
- gf.read_groups = ['public']
226
- gf.save!
227
- end
228
- parent.generic_files << generic_file
229
- generic_file
230
- end
231
- after do
232
- # GenericFile.find('curation_concerns:5').destroy
233
- end
234
- describe "edit" do
235
- it "should give me a flash error" do
236
- get :edit, id: generic_file
237
- expect(response).to fail_redirect_and_flash(main_app.curation_concerns_generic_file_path(generic_file), 'You are not authorized to access this page.')
238
- end
239
- end
240
- describe "view" do
241
- it "should show me the file" do
242
- get :show, id: generic_file
243
- expect(response).to be_success
244
- end
245
- end
246
- it "should not let the user submit if they logout" do
247
- get :new, parent_id: parent
248
- expect(response).to fail_redirect_and_flash(main_app.new_user_session_path, 'You are not authorized to access this page.')
249
- end
250
- end
251
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::Forms::GenericFileEditForm do
4
- subject { described_class.new(GenericFile.new) }
5
-
6
- describe "#terms" do
7
- it "should return a list" do
8
- expect(subject.terms).to eq([:resource_type, :title, :creator, :contributor, :description, :tag,
9
- :rights, :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url])
10
- end
11
-
12
- it "doesn't contain fields that users shouldn't be allowed to edit" do
13
- # date_uploaded is reserved for the original creation date of the record.
14
- expect(subject.terms).not_to include(:date_uploaded)
15
- end
16
- end
17
-
18
- it "should initialize multivalued fields" do
19
- expect(subject.title).to eq ['']
20
- end
21
-
22
- describe ".model_attributes" do
23
- let(:params) { ActionController::Parameters.new(title: ['foo'], description: [''], "permissions_attributes"=>{"2"=>{"access"=>"edit", "_destroy"=>"true", "id"=>"a987551e-b87f-427a-8721-3e5942273125"}})}
24
- subject { described_class.model_attributes(params) }
25
-
26
- it "should only change title" do
27
- expect(subject['title']).to eq ["foo"]
28
- expect(subject['description']).to be_empty
29
- expect(subject['permissions_attributes']).to eq("2" => {"access"=>"edit", "id"=>"a987551e-b87f-427a-8721-3e5942273125", "_destroy"=>"true"})
30
- end
31
- end
32
-
33
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::ThumbnailHelper do
4
- let(:work) { GenericWork.new }
5
- let(:document) { SolrDocument.new work.to_solr }
6
- subject { helper.thumbnail_tag document, {} }
7
-
8
- context "with a representative" do
9
- before do
10
- allow(work).to receive(:representative).and_return('curation_concerns:test123')
11
- end
12
- it "draws the thumbnail" do
13
- expect(subject).to eq "<img alt=\"Thumbnail\" class=\"canonical-image\" " \
14
- "src=\"/downloads/curation_concerns:test123?datastream_id=thumbnail\" />"
15
- end
16
- end
17
-
18
- it "draws the default thumbnail" do
19
- expect(subject).to eq "<span class=\"canonical-image\"></span>"
20
- end
21
- end
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CopyPermissionsJob do
4
-
5
- let(:user) { FactoryGirl.create(:user) }
6
- context 'for valid pid' do
7
- let(:generic_work) { FactoryGirl.create(:generic_work, user: user ) }
8
- let(:another_user) { FactoryGirl.create(:user) }
9
- let(:generic_file_1) { FactoryGirl.create(:generic_file, user: user) }
10
- let(:generic_file_2) { FactoryGirl.create(:generic_file, user: user) }
11
-
12
- before do
13
- generic_work.edit_users += [another_user]
14
- generic_work.generic_files = [generic_file_1, generic_file_2]
15
- generic_work.save
16
- end
17
- subject { CopyPermissionsJob.new(generic_work.id) }
18
-
19
- it 'applies group/editors permissions to attached files' do
20
-
21
- expect(generic_work.generic_files).to eq [generic_file_1, generic_file_2]
22
- expect(generic_work.edit_users).to eq [user.user_key, another_user.user_key]
23
- expect(generic_file_1.edit_users).to eq [user.user_key]
24
- expect(generic_file_2.edit_users).to eq [user.user_key]
25
- generic_work.save
26
-
27
- subject.run
28
-
29
- generic_work.reload.generic_files.each do |file|
30
- expect(file.edit_users).to eq [user.user_key, another_user.user_key]
31
- end
32
- end
33
- end
34
-
35
- describe "an open access work" do
36
- let(:generic_work) { FactoryGirl.create(:work_with_files) }
37
- subject { CopyPermissionsJob.new(generic_work.id) }
38
-
39
- it "copies visibility to its contained files" do
40
- generic_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
41
- generic_work.save
42
- expect(generic_work.generic_files.first.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
43
- subject.run
44
- generic_work.reload.generic_files.each do |file|
45
- expect(file.visibility).to eq 'open'
46
- end
47
- end
48
- end
49
- end
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::Resque::Queue do
4
- let(:subject) { CurationConcerns::Resque::Queue.new "test_queue" }
5
- let(:job) { double('job') }
6
-
7
- context "with no retries" do
8
- it "queues the job" do
9
- expect(::Resque).to receive(:enqueue_to).once.and_return(true)
10
- subject.push(job)
11
- end
12
- end
13
-
14
- context 'when one run times out' do
15
- before do
16
- call_count = 0
17
- allow(::Resque).to receive(:enqueue_to) do
18
- call_count += 1
19
- call_count == 1 ? raise(Redis::TimeoutError) : true
20
- end
21
- end
22
-
23
- it 'retries the job' do
24
- expect(::Resque).to receive(:enqueue_to).twice
25
- subject.push(job)
26
- end
27
- end
28
-
29
- context 'when a job times out three times' do
30
- before do
31
- allow(::Resque).to receive(:enqueue_to).exactly(3).times.and_raise(Redis::TimeoutError)
32
- end
33
-
34
- it 'raises an error' do
35
- expect { subject.push(job) }.to raise_error Redis::TimeoutError
36
- end
37
- end
38
-
39
- context 'with no connection to Redis' do
40
- before do
41
- allow(::Resque).to receive(:enqueue_to).once.and_raise(Redis::CannotConnectError)
42
- end
43
-
44
- it 'logs an error' do
45
- expect(ActiveFedora::Base.logger).to receive(:error).with("Redis is down!")
46
- subject.push(job)
47
- end
48
- end
49
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::GenericFile do
4
-
5
- describe 'audiovisual transcoding' do
6
- before do
7
- file = File.open(File.join(fixture_path, file_name), 'r')
8
- Hydra::Works::UploadFileToGenericFile.call(generic_file, file)
9
- allow_any_instance_of(Hydra::Works::GenericFile::Base).to receive(:mime_type).and_return(mime_type)
10
- generic_file.save!
11
- end
12
-
13
-
14
- context 'with a video (.avi) file', unless: $in_travis do
15
- let(:mime_type) { 'video/avi' }
16
- let(:file_name) { 'countdown.avi' }
17
- let(:generic_file) { GenericFile.create { |gf| gf.apply_depositor_metadata('jcoyne@example.com') } }
18
-
19
- it 'transcodes to webm and mp4' do
20
- generic_file.create_derivatives
21
- derivative = generic_file.webm
22
- expect(derivative).not_to be_nil
23
- expect(derivative.content).not_to be_nil
24
- expect(derivative.mime_type).to eq('video/webm')
25
-
26
- derivative2 = generic_file.mp4
27
- expect(derivative2).not_to be_nil
28
- expect(derivative2.content).not_to be_nil
29
- expect(derivative2.mime_type).to eq('video/mp4')
30
- end
31
- end
32
-
33
- context 'with an audio (.wav) file', unless: $in_travis do
34
- let(:mime_type) { 'audio/wav' }
35
- let(:file_name) { 'piano_note.wav' }
36
- let(:generic_file) { GenericFile.create { |gf| gf.apply_depositor_metadata('jcoyne@example.com') } }
37
-
38
- it 'transcodes to mp3 and ogg' do
39
- generic_file.create_derivatives
40
- derivative = generic_file.mp3
41
- expect(derivative).not_to be_nil
42
- expect(derivative.content).not_to be_nil
43
- expect(derivative.mime_type).to eq('audio/mpeg')
44
-
45
- derivative2 = generic_file.ogg
46
- expect(derivative2).not_to be_nil
47
- expect(derivative2.content).not_to be_nil
48
- expect(derivative2.mime_type).to eq('audio/ogg')
49
- end
50
- end
51
-
52
- context 'with an mp3 file', unless: $in_travis do
53
- let(:mime_type) { 'audio/mpeg' }
54
- let(:file_name) { 'test5.mp3' }
55
- let(:generic_file) { GenericFile.create { |gf| gf.apply_depositor_metadata('jcoyne@example.com') } }
56
-
57
- xit 'should copy the content to the mp3 datastream and transcode to ogg' do
58
- generic_file.create_derivatives
59
- derivative = generic_file.mp3
60
-
61
- expect(derivative.size).to eq(generic_file.original_file.size)
62
- expect(derivative.mime_type).to eq('audio/mpeg')
63
- derivative2 = generic_file.ogg
64
- expect(derivative2.content).not_to be_nil
65
- expect(derivative2.mime_type).to eq('audio/ogg')
66
- end
67
- end
68
-
69
- context 'with an ogg file', unless: $in_travis do
70
- let(:mime_type) { 'audio/ogg' }
71
- let(:file_name) { 'Example.ogg' }
72
- let(:generic_file) { GenericFile.create { |gf| gf.apply_depositor_metadata('jcoyne@example.com') } }
73
-
74
- xit 'should copy the content to the ogg datastream and transcode to mp3' do
75
- generic_file.create_derivatives
76
- derivative = generic_file.mp3
77
- expect(derivative).not_to be_nil
78
- expect(derivative.content).not_to be_nil
79
- expect(derivative.mime_type).to eq('audio/mpeg')
80
-
81
- derivative2 = generic_file.ogg
82
- expect(derivative2).not_to be_nil
83
- expect(derivative2.size).to eq(generic_file.original_file.size)
84
- expect(derivative2.mime_type).to eq('audio/ogg')
85
- end
86
- end
87
- end
88
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CurationConcerns::GenericWorkBehavior do
4
- before do
5
- class EssentialWork < ActiveFedora::Base
6
- include CurationConcerns::GenericWorkBehavior
7
- end
8
- end
9
- after do
10
- Object.send(:remove_const, :EssentialWork)
11
- end
12
-
13
- subject { EssentialWork.new }
14
-
15
- it "should mix together all the goodness" do
16
- [::CurationConcerns::WithGenericFiles, ::CurationConcerns::HumanReadableType, CurationConcerns::Noid, CurationConcerns::Serializers, Hydra::WithDepositor, Hydra::AccessControls::Embargoable, Solrizer::Common].each do |mixin|
17
- expect(subject.class.ancestors).to include(mixin)
18
- end
19
- end
20
-
21
- describe "human_readable_type" do
22
- it "has a default" do
23
- expect(subject.human_readable_type).to eq 'Essential Work'
24
- end
25
- it "should be settable" do
26
- EssentialWork.human_readable_type = 'Custom Type'
27
- expect(subject.human_readable_type).to eq 'Custom Type'
28
- end
29
- end
30
-
31
- it "inherits (and extends) to_solr behaviors from superclass" do
32
- expect(subject.to_solr.keys).to include(:id)
33
- expect(subject.to_solr.keys).to include("has_model_ssim")
34
- end
35
- end
@@ -1,127 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FitsDatastream, type: :model, unless: $in_travis do
4
- describe "image" do
5
- before(:all) do
6
- @file = GenericFile.create { |gf| gf.apply_depositor_metadata('blah') }
7
- Hydra::Works::AddFileToGenericFile.call(@file, File.open(fixture_file_path('world.png')), :original_file)
8
- CurationConcerns::CharacterizationService.run(@file)
9
- end
10
- it "has a format label" do
11
- expect(@file.format_label).to eq ["Portable Network Graphics"]
12
- end
13
- it "has a mime type" do
14
- expect(@file.mime_type).to eq "image/png"
15
- end
16
- it "has a file size" do
17
- expect(@file.file_size).to eq ["4218"]
18
- end
19
- it "has a last modified timestamp" do
20
- expect(@file.last_modified).to_not be_empty
21
- end
22
- it "has a filename" do
23
- expect(@file.filename).to_not be_empty
24
- end
25
- it "has a checksum" do
26
- expect(@file.original_checksum).to eq ["28da6259ae5707c68708192a40b3e85c"]
27
- end
28
- it "has a height" do
29
- expect(@file.height).to eq ["50"]
30
- end
31
- it "has a width" do
32
- expect(@file.width).to eq ["50"]
33
- end
34
-
35
- let(:datastream) { @file.characterization }
36
- let(:xml) { datastream.ng_xml }
37
- let(:namespace) { {'ns'=>'http://hul.harvard.edu/ois/xml/ns/fits/fits_output'} }
38
-
39
- it "should make the fits XML" do
40
- expect(xml.xpath('//ns:imageWidth/text()', namespace).inner_text).to eq '50'
41
- end
42
- end
43
-
44
- describe "video" do
45
- before(:all) do
46
- @file = GenericFile.create { |gf| gf.apply_depositor_metadata('blah') }
47
- Hydra::Works::AddFileToGenericFile.call(@file, File.open(fixture_file_path('sample_mpeg4.mp4')), :original_file)
48
- CurationConcerns::CharacterizationService.run(@file)
49
- end
50
- it "has a format label" do
51
- expect(@file.format_label).to eq ["ISO Media, MPEG v4 system, version 2"]
52
- end
53
- it "has a mime type" do
54
- expect(@file.mime_type).to eq "video/mp4"
55
- end
56
- it "has a file size" do
57
- expect(@file.file_size).to eq ["245779"]
58
- end
59
- it "has a last modified timestamp" do
60
- expect(@file.last_modified).to_not be_empty
61
- end
62
- it "has a filename" do
63
- expect(@file.filename).to_not be_empty
64
- end
65
- it "has a checksum" do
66
- expect(@file.original_checksum).to eq ["dc77a8de8c091c19d86df74280f6feb7"]
67
- end
68
- it "has a width" do
69
- expect(@file.width).to eq ["190"]
70
- end
71
- it "has a height" do
72
- expect(@file.height).to eq ["240"]
73
- end
74
- it "has a sample_rate" do
75
- expect(@file.sample_rate).to eq ["32000"]
76
- end
77
- it "has a duration" do
78
- expect(@file.duration).to eq ["4.97 s"]
79
- end
80
- it "has a frame_rate" do
81
- expect(@file.frame_rate.count).to eq 1
82
- expect(@file.frame_rate[0].to_f).to eq 30.0
83
- end
84
- end
85
-
86
- describe "pdf" do
87
- before do
88
- @myfile = GenericFile.create { |gf| gf.apply_depositor_metadata('blah') }
89
- Hydra::Works::AddFileToGenericFile.call(@myfile, File.open(fixture_file_path('test4.pdf')), :original_file)
90
- # characterize method saves
91
- CurationConcerns::CharacterizationService.run(@myfile)
92
- end
93
-
94
- it "returns expected results after a save" do
95
- expect(@myfile.file_size).to eq ['218882']
96
- expect(@myfile.original_checksum).to eq ['5a2d761cab7c15b2b3bb3465ce64586d']
97
-
98
- expect(@myfile.characterization_terms[:format_label]).to eq ["Portable Document Format"]
99
- expect(@myfile.characterization_terms[:mime_type]).to eq "application/pdf"
100
- expect(@myfile.characterization_terms[:file_size]).to eq ["218882"]
101
- expect(@myfile.characterization_terms[:original_checksum]).to eq ["5a2d761cab7c15b2b3bb3465ce64586d"]
102
- expect(@myfile.characterization_terms.keys).to include(:last_modified, :filename)
103
-
104
- expect(@myfile.title).to include("Microsoft Word - sample.pdf.docx")
105
- expect(@myfile.filename).to eq 'test4.pdf'
106
-
107
- expect(@myfile.format_label).to eq ["Portable Document Format"]
108
- expect(@myfile.title).to include("Microsoft Word - sample.pdf.docx")
109
- expect(@myfile.extracted_text.content).to eq("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMicrosoft Word - sample.pdf.docx\n\n\n \n \n\n \n\n \n\n \n\nThis PDF file was created using CutePDF. \n\nwww.cutepdf.com")
110
- end
111
- end
112
-
113
- describe "m4a" do
114
- before do
115
- @myfile = GenericFile.create { |gf| gf.apply_depositor_metadata('blah') }
116
- Hydra::Works::AddFileToGenericFile.call(@myfile, File.open(fixture_file_path('spoken-text.m4a')), :original_file)
117
- # characterize method saves
118
- CurationConcerns::CharacterizationService.run(@myfile)
119
- end
120
-
121
- it "returns expected content for full text" do
122
- expect(@myfile.extracted_text.content).to eq("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLavf56.15.102")
123
- end
124
- end
125
-
126
-
127
- end