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,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'redlock'
2
3
 
3
4
  describe CurationConcerns::GenericWorkActor do
4
5
  include ActionDispatch::TestProcess
@@ -6,18 +7,26 @@ describe CurationConcerns::GenericWorkActor do
6
7
  let(:user) { FactoryGirl.create(:user) }
7
8
  let(:file) { curation_concerns_fixture_file_upload('files/image.png', 'image/png') }
8
9
 
9
- subject {
10
- CurationConcerns::CurationConcern.actor(curation_concern, user, attributes)
10
+ let(:redlock_client_stub) { # stub out redis connection
11
+ client = double('redlock client')
12
+ allow(client).to receive(:lock).and_yield(true)
13
+ allow(Redlock::Client).to receive(:new).and_return(client)
14
+ client
11
15
  }
12
16
 
17
+ subject do
18
+ CurationConcerns::CurationConcern.actor(curation_concern, user, attributes)
19
+ end
20
+
13
21
  describe '#create' do
14
22
  let(:curation_concern) { GenericWork.new }
23
+ let(:xmas) { DateTime.parse('2014-12-25 11:30') }
15
24
 
16
25
  context 'failure' do
17
- let(:attributes) {{}}
26
+ let(:attributes) { {} }
18
27
 
19
28
  it 'returns false' do
20
- expect_any_instance_of(CurationConcerns::GenericWorkActor).to receive(:save).and_return(false)
29
+ expect_any_instance_of(described_class).to receive(:save).and_return(false)
21
30
  allow(subject).to receive(:attach_files).and_return(true)
22
31
  expect(subject.create).to be false
23
32
  end
@@ -27,26 +36,52 @@ describe CurationConcerns::GenericWorkActor do
27
36
  let(:visibility) { Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED }
28
37
 
29
38
  context 'with embargo' do
30
- let(:attributes) { { title: ["New embargo"], visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO,
31
- visibility_during_embargo: "authenticated", embargo_release_date: date.to_s,
32
- visibility_after_embargo: "open", visibility_during_lease: "open",
33
- lease_expiration_date: "2014-06-12", visibility_after_lease: "restricted",
34
- rights: ["http://creativecommons.org/licenses/by/3.0/us/"] } }
39
+ let(:attributes) do
40
+ { title: ['New embargo'], visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO,
41
+ visibility_during_embargo: 'authenticated', embargo_release_date: date.to_s,
42
+ visibility_after_embargo: 'open', visibility_during_lease: 'open',
43
+ lease_expiration_date: '2014-06-12', visibility_after_lease: 'restricted',
44
+ rights: ['http://creativecommons.org/licenses/by/3.0/us/'] }
45
+ end
35
46
 
36
- context "with a valid embargo date" do
47
+ context 'with a valid embargo date' do
37
48
  let(:date) { Date.today + 2 }
38
- it "should interpret and apply embargo and lease visibility settings" do
49
+ it 'interprets and apply embargo and lease visibility settings' do
39
50
  subject.create
40
51
  expect(curation_concern).to be_persisted
41
52
  expect(curation_concern.visibility_during_embargo).to eq 'authenticated'
42
53
  expect(curation_concern.visibility_after_embargo).to eq 'open'
43
54
  expect(curation_concern.visibility).to eq 'authenticated'
44
55
  end
56
+ context "with attached files" do
57
+ let(:attributes) do
58
+ { title: ['New embargo'], visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_EMBARGO,
59
+ visibility_during_embargo: 'authenticated', embargo_release_date: date.to_s,
60
+ visibility_after_embargo: 'open', visibility_during_lease: 'open',
61
+ lease_expiration_date: '2014-06-12', visibility_after_lease: 'restricted',
62
+ files: [
63
+ file
64
+ ],
65
+ rights: ['http://creativecommons.org/licenses/by/3.0/us/'] }
66
+ end
67
+
68
+ before { redlock_client_stub }
69
+
70
+ it "applies it to attached files" do
71
+ allow(CharacterizeJob).to receive(:perform_later).and_return(true)
72
+ subject.create
73
+ file = curation_concern.file_sets.first
74
+ expect(file).to be_persisted
75
+ expect(file.visibility_during_embargo).to eq 'authenticated'
76
+ expect(file.visibility_after_embargo).to eq 'open'
77
+ expect(file.visibility).to eq 'authenticated'
78
+ end
79
+ end
45
80
  end
46
81
 
47
- context "when embargo_release_date is in the past" do
48
- let(:date) { Date.today-2 }
49
- it "should set error on curation_concern and return false" do
82
+ context 'when embargo_release_date is in the past' do
83
+ let(:date) { Date.today - 2 }
84
+ it 'sets error on curation_concern and return false' do
50
85
  expect(subject.create).to be false
51
86
  expect(subject.curation_concern.errors[:embargo_release_date].first).to eq 'Must be a future date'
52
87
  end
@@ -54,15 +89,17 @@ describe CurationConcerns::GenericWorkActor do
54
89
  end
55
90
 
56
91
  context 'with lease' do
57
- let(:attributes) { { title: ["New embargo"], visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_LEASE,
58
- visibility_during_embargo: "authenticated", embargo_release_date: '2099-05-12',
59
- visibility_after_embargo: "open", visibility_during_lease: "open",
60
- lease_expiration_date: date.to_s, visibility_after_lease: "restricted",
61
- rights: ["http://creativecommons.org/licenses/by/3.0/us/"] } }
92
+ let(:attributes) do
93
+ { title: ['New embargo'], visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_LEASE,
94
+ visibility_during_embargo: 'authenticated', embargo_release_date: '2099-05-12',
95
+ visibility_after_embargo: 'open', visibility_during_lease: 'open',
96
+ lease_expiration_date: date.to_s, visibility_after_lease: 'restricted',
97
+ rights: ['http://creativecommons.org/licenses/by/3.0/us/'] }
98
+ end
62
99
 
63
- context "with a valid lease date" do
100
+ context 'with a valid lease date' do
64
101
  let(:date) { Date.today + 2 }
65
- it "should interpret and apply embargo and lease visibility settings" do
102
+ it 'interprets and apply embargo and lease visibility settings' do
66
103
  subject.create
67
104
  expect(curation_concern).to be_persisted
68
105
  expect(curation_concern.embargo_release_date).to be_nil
@@ -72,9 +109,9 @@ describe CurationConcerns::GenericWorkActor do
72
109
  end
73
110
  end
74
111
 
75
- context "when lease_expiration_date is in the past" do
76
- let(:date) { Date.today-2 }
77
- it "should set error on curation_concern and return false" do
112
+ context 'when lease_expiration_date is in the past' do
113
+ let(:date) { Date.today - 2 }
114
+ it 'sets error on curation_concern and return false' do
78
115
  expect(subject.create).to be false
79
116
  expect(subject.curation_concern.errors[:lease_expiration_date].first).to eq 'Must be a future date'
80
117
  end
@@ -82,55 +119,61 @@ describe CurationConcerns::GenericWorkActor do
82
119
  end
83
120
 
84
121
  context 'with a file' do
85
- let(:attributes) {
86
- FactoryGirl.attributes_for(:generic_work, visibility: visibility).tap {|a|
122
+ let(:attributes) do
123
+ FactoryGirl.attributes_for(:generic_work, visibility: visibility).tap do |a|
87
124
  a[:files] = file
88
- }
89
- }
125
+ end
126
+ end
90
127
 
91
128
  context 'authenticated visibility' do
92
- it 'should stamp each file with the access rights' do
93
- s2 = double('characterize job')
94
- allow(CharacterizeJob).to receive(:new).and_return(s2)
95
- expect(CurationConcerns.queue).to receive(:push).with(s2).once
129
+ before do
130
+ allow(CurationConcerns::TimeService).to receive(:time_in_utc) { xmas }
131
+ redlock_client_stub
132
+ end
133
+
134
+ it 'stamps each file with the access rights' do
135
+ expect(CharacterizeJob).to receive(:perform_later)
96
136
  expect(subject.create).to be true
97
137
  expect(curation_concern).to be_persisted
98
- expect(curation_concern.date_uploaded).to eq Date.today
99
- expect(curation_concern.date_modified).to eq Date.today
138
+ expect(curation_concern.date_uploaded).to eq xmas
139
+ expect(curation_concern.date_modified).to eq xmas
100
140
  expect(curation_concern.depositor).to eq user.user_key
101
141
  expect(curation_concern.representative).to_not be_nil
102
- expect(curation_concern.generic_files.size).to eq 1
142
+ expect(curation_concern.file_sets.size).to eq 1
103
143
  # Sanity test to make sure the file we uploaded is stored and has same permission as parent.
104
- generic_file = curation_concern.generic_files.first
144
+ file_set = curation_concern.file_sets.first
105
145
  file.rewind
106
- expect(generic_file.original_file.content).to eq file.read
146
+ expect(file_set.reload.original_file.content).to eq file.read
107
147
 
108
148
  expect(curation_concern).to be_authenticated_only_access
109
- expect(generic_file).to be_authenticated_only_access
149
+ expect(file_set).to be_authenticated_only_access
110
150
  end
111
151
  end
112
152
  end
113
153
 
114
154
  context 'with multiple files file' do
115
- let(:attributes) {
116
- FactoryGirl.attributes_for(:generic_work, visibility: visibility).tap {|a|
155
+ let(:attributes) do
156
+ FactoryGirl.attributes_for(:generic_work, visibility: visibility).tap do|a|
117
157
  a[:files] = [file, file]
118
- }
119
- }
158
+ end
159
+ end
120
160
 
121
161
  context 'authenticated visibility' do
122
- it 'should stamp each file with the access rights' do
123
- s2 = double('characterize job')
124
- allow(CharacterizeJob).to receive(:new).and_return(s2)
125
- expect(CurationConcerns.queue).to receive(:push).with(s2).twice
162
+ before do
163
+ allow(CurationConcerns::TimeService).to receive(:time_in_utc) { xmas }
164
+ redlock_client_stub
165
+ end
166
+
167
+ it 'stamps each file with the access rights' do
168
+ expect(CharacterizeJob).to receive(:perform_later).twice
126
169
 
127
170
  expect(subject.create).to be true
128
171
  expect(curation_concern).to be_persisted
129
- expect(curation_concern.date_uploaded).to eq Date.today
130
- expect(curation_concern.date_modified).to eq Date.today
172
+ expect(curation_concern.date_uploaded).to eq xmas
173
+ expect(curation_concern.date_modified).to eq xmas
131
174
  expect(curation_concern.depositor).to eq user.user_key
132
175
 
133
- expect(curation_concern.generic_files.size).to eq 2
176
+ expect(curation_concern.file_sets.size).to eq 2
134
177
  # Sanity test to make sure the file we uploaded is stored and has same permission as parent.
135
178
 
136
179
  expect(curation_concern).to be_authenticated_only_access
@@ -138,12 +181,12 @@ describe CurationConcerns::GenericWorkActor do
138
181
  end
139
182
  end
140
183
 
141
- context "with a present and a blank title" do
142
- let(:attributes) {
184
+ context 'with a present and a blank title' do
185
+ let(:attributes) do
143
186
  FactoryGirl.attributes_for(:generic_work, title: ['this is present', ''])
144
- }
187
+ end
145
188
 
146
- it 'should stamp each link with the access rights' do
189
+ it 'stamps each link with the access rights' do
147
190
  expect(subject.create).to be true
148
191
  expect(curation_concern).to be_persisted
149
192
  expect(curation_concern.title).to eq ['this is present']
@@ -153,20 +196,20 @@ describe CurationConcerns::GenericWorkActor do
153
196
  end
154
197
 
155
198
  describe '#update' do
156
- let(:curation_concern) { FactoryGirl.create(:generic_work, user: user)}
199
+ let(:curation_concern) { FactoryGirl.create(:generic_work, user: user) }
157
200
 
158
201
  context 'failure' do
159
- let(:attributes) {{}}
202
+ let(:attributes) { {} }
160
203
 
161
204
  it 'returns false' do
162
- expect_any_instance_of(CurationConcerns::GenericWorkActor).to receive(:save).and_return(false)
205
+ expect_any_instance_of(described_class).to receive(:save).and_return(false)
163
206
  expect(subject.update).to be false
164
207
  end
165
208
  end
166
209
 
167
210
  context 'valid attributes' do
168
- let(:attributes) {{}}
169
- it "should interpret and apply embargo and lease visibility settings" do
211
+ let(:attributes) { {} }
212
+ it 'interprets and apply embargo and lease visibility settings' do
170
213
  expect(subject).to receive(:interpret_lease_visibility).and_return(true)
171
214
  expect(subject).to receive(:interpret_embargo_visibility).and_return(true)
172
215
  subject.update
@@ -176,18 +219,18 @@ describe CurationConcerns::GenericWorkActor do
176
219
  context 'adding to collections' do
177
220
  let!(:collection1) { FactoryGirl.create(:collection, user: user) }
178
221
  let!(:collection2) { FactoryGirl.create(:collection, user: user) }
179
- let(:attributes) {
222
+ let(:attributes) do
180
223
  FactoryGirl.attributes_for(:generic_work, collection_ids: [collection2.id])
181
- }
224
+ end
182
225
  before do
183
226
  curation_concern.apply_depositor_metadata(user.user_key)
184
227
  curation_concern.save!
185
228
  collection1.add_member(curation_concern)
186
229
  end
187
230
 
188
- it "remove from the old collection and adds to the new collection" do
231
+ it 'remove from the old collection and adds to the new collection' do
189
232
  curation_concern.reload
190
- expect(curation_concern.parent_collections).to eq [collection1]
233
+ expect(curation_concern.in_collections).to eq [collection1]
191
234
  # before running actor.update, the work is in collection1
192
235
 
193
236
  expect(subject.update).to be true
@@ -196,7 +239,22 @@ describe CurationConcerns::GenericWorkActor do
196
239
  expect(curation_concern.identifier).to be_blank
197
240
  expect(curation_concern).to be_persisted
198
241
  # after running actor.update, the work is in collection2 and no longer in collection1
199
- expect(curation_concern.parent_collections).to eq [collection2]
242
+ expect(curation_concern.in_collections).to eq [collection2]
243
+ end
244
+ end
245
+
246
+ context 'with multiple file sets' do
247
+ let(:file_set1) { create(:file_set) }
248
+ let(:file_set2) { create(:file_set) }
249
+ let(:curation_concern) { FactoryGirl.create(:generic_work, user: user, members: [file_set1, file_set2]) }
250
+ let(:attributes) do
251
+ FactoryGirl.attributes_for(:generic_work, members: [file_set2, file_set1])
252
+ end
253
+ xit 'updates the order of file sets' do
254
+ expect(curation_concern.ordered_members).to eq [file_set1, file_set2]
255
+ expect(subject.update).to be true
256
+ curation_concern.reload
257
+ expect(curation_concern.ordered_members).to eq [file_set2, file_set1]
200
258
  end
201
259
  end
202
260
  end
@@ -5,37 +5,37 @@ describe CatalogController do
5
5
  ActiveFedora::Base.delete_all
6
6
  end
7
7
 
8
- describe "when logged in" do
8
+ describe 'when logged in' do
9
9
  let(:user) { FactoryGirl.create(:user) }
10
10
  let!(:work1) { FactoryGirl.create(:work_with_one_file, user: user) }
11
11
  let!(:work2) { FactoryGirl.create(:public_generic_work) }
12
12
  let!(:collection) { FactoryGirl.create(:collection, user: user) }
13
- let!(:file) { work1.generic_files.first }
13
+ let!(:file) { work1.file_sets.first }
14
14
  before do
15
15
  sign_in user
16
16
  end
17
17
 
18
- context "when there is private content" do
18
+ context 'when there is private content' do
19
19
  let!(:private_work) { FactoryGirl.create(:private_generic_work) }
20
20
 
21
- it "excludes it" do
21
+ it 'excludes it' do
22
22
  get 'index'
23
23
  expect(response).to be_successful
24
24
  expect(assigns(:document_list).map(&:id)).to match_array [work1.id, work2.id, collection.id]
25
25
  end
26
26
  end
27
27
 
28
- context "Searching all content" do
29
- it "should exclude linked resources" do
28
+ context 'Searching all content' do
29
+ it 'excludes linked resources' do
30
30
  get 'index'
31
31
  expect(response).to be_successful
32
32
  expect(assigns(:document_list).map(&:id)).to match_array [work1.id, work2.id, collection.id]
33
33
  end
34
34
  end
35
35
 
36
- context "Searching all works" do
37
- it "should return all the works" do
38
- get 'index', 'f' => {'generic_type_sim' => 'Work'}
36
+ context 'Searching all works' do
37
+ it 'returns all the works' do
38
+ get 'index', 'f' => { 'generic_type_sim' => 'Work' }
39
39
  expect(response).to be_successful
40
40
  expect(assigns(:document_list).count).to eq 2
41
41
  [work1.id, work2.id].each do |work_id|
@@ -44,44 +44,43 @@ describe CatalogController do
44
44
  end
45
45
  end
46
46
 
47
- context "Searching all collections" do
48
- it "should return all the works" do
49
- get 'index', 'f' => {'generic_type_sim' => 'Collection'}
47
+ context 'Searching all collections' do
48
+ it 'returns all the works' do
49
+ get 'index', 'f' => { 'generic_type_sim' => 'Collection' }
50
50
  expect(response).to be_successful
51
51
  expect(assigns(:document_list).map(&:id)).to eq [collection.id]
52
52
  end
53
53
  end
54
54
 
55
- context "searching just my works" do
56
- it "should return just my works" do
57
- get 'index', works: 'mine', 'f' => {'generic_type_sim' => 'Work'}
55
+ context 'searching just my works' do
56
+ it 'returns just my works' do
57
+ get 'index', works: 'mine', 'f' => { 'generic_type_sim' => 'Work' }
58
58
  expect(response).to be_successful
59
59
  expect(assigns(:document_list).map(&:id)).to eq [work1.id]
60
60
  end
61
61
  end
62
62
 
63
- context "searching for one kind of work" do
64
- it "returns just the specified type" do
65
- get 'index', 'f' => {'human_readable_type_sim' => 'Generic Work'}
63
+ context 'searching for one kind of work' do
64
+ it 'returns just the specified type' do
65
+ get 'index', 'f' => { 'human_readable_type_sim' => 'Generic Work' }
66
66
  expect(response).to be_successful
67
67
  expect(assigns(:document_list).map(&:id)).to include(work1.id, work2.id)
68
68
  end
69
69
  end
70
70
 
71
- context "when json is requested for autosuggest of related works" do
71
+ context 'when json is requested for autosuggest of related works' do
72
72
  let!(:work) { FactoryGirl.create(:generic_work, user: user, title: ["All my #{srand}"]) }
73
- it "should return json" do
73
+ it 'returns json' do
74
74
  xhr :get, :index, format: :json, q: work.title
75
75
  json = JSON.parse(response.body)
76
76
  # Grab the doc corresponding to work and inspect the json
77
- work_json = json["docs"].first
78
- expect(work_json).to eq("pid"=>work.id, "title"=> "#{work.title.first} (#{work.human_readable_type})")
77
+ work_json = json['docs'].first
78
+ expect(work_json).to eq('pid' => work.id, 'title' => "#{work.title.first} (#{work.human_readable_type})")
79
79
  end
80
80
  end
81
-
82
81
  end
83
82
 
84
- describe "when logged in as a repository manager" do
83
+ describe 'when logged in as a repository manager' do
85
84
  let(:creating_user) { FactoryGirl.create(:user) }
86
85
  let(:manager_user) { FactoryGirl.create(:user) }
87
86
  let!(:work1) { FactoryGirl.create(:private_generic_work, user: creating_user) }
@@ -93,23 +92,22 @@ describe CatalogController do
93
92
  sign_in manager_user
94
93
  end
95
94
 
96
- context "searching all works" do
97
- it "should return other users' private works" do
98
- get 'index', 'f' => {'generic_type_sim' => 'Work'}
95
+ context 'searching all works' do
96
+ it "returns other users' private works" do
97
+ get 'index', 'f' => { 'generic_type_sim' => 'Work' }
99
98
  expect(response).to be_successful
100
99
  expect(assigns(:document_list).map(&:id)).to include(work1.id)
101
100
  end
102
- it "should return other users' embargoed works" do
103
- get 'index', 'f' => {'generic_type_sim' => 'Work'}
101
+ it "returns other users' embargoed works" do
102
+ get 'index', 'f' => { 'generic_type_sim' => 'Work' }
104
103
  expect(response).to be_successful
105
104
  expect(assigns(:document_list).map(&:id)).to include(work2.id)
106
105
  end
107
- it "should return other users' private collections" do
108
- get 'index', 'f' => {'generic_type_sim' => 'Collection'}
106
+ it "returns other users' private collections" do
107
+ get 'index', 'f' => { 'generic_type_sim' => 'Collection' }
109
108
  expect(response).to be_successful
110
109
  expect(assigns(:document_list).map(&:id)).to include(collection.id)
111
110
  end
112
111
  end
113
-
114
112
  end
115
113
  end
@@ -31,13 +31,12 @@ describe CurationConcerns::ClassifyConcernsController do
31
31
  expect(subject).to receive(:new_polymorphic_path).with([:curation_concerns, GenericWork]).and_return(main_app.new_curation_concerns_generic_work_path)
32
32
  end
33
33
 
34
- let(:new_curation_concern_generic_work_path) { "/stub/path" }
34
+ let(:new_curation_concern_generic_work_path) { '/stub/path' }
35
35
 
36
36
  it 'requires authentication' do
37
37
  post :create, classify_concern: { curation_concern_type: 'GenericWork' }
38
38
  expect(response).to redirect_to(main_app.new_curation_concerns_generic_work_path)
39
39
  end
40
- end
41
-
40
+ end
42
41
  end
43
42
  end