curation_concerns 0.1.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 (424) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +15 -0
  7. data/README.md +46 -0
  8. data/RELEASING.md +2 -0
  9. data/Rakefile +26 -0
  10. data/VERSION +1 -0
  11. data/app/assets/images/default.png +0 -0
  12. data/app/assets/images/nope.png +0 -0
  13. data/app/assets/javascripts/.gitkeep +0 -0
  14. data/app/assets/javascripts/curation_concerns/.gitkeep +0 -0
  15. data/app/assets/javascripts/curation_concerns/application.js +18 -0
  16. data/app/assets/javascripts/curation_concerns/browse_everything_implement.js +7 -0
  17. data/app/assets/javascripts/curation_concerns/curation_concerns.js +28 -0
  18. data/app/assets/javascripts/curation_concerns/embargoes.js +17 -0
  19. data/app/assets/javascripts/curation_concerns/facet_mine.js +22 -0
  20. data/app/assets/javascripts/curation_concerns/help_modal.js +36 -0
  21. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +123 -0
  22. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +126 -0
  23. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +95 -0
  24. data/app/assets/javascripts/curation_concerns/proxy_submission.js +23 -0
  25. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +20 -0
  26. data/app/assets/javascripts/modernizr.js +3 -0
  27. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +9 -0
  28. data/app/assets/stylesheets/curation_concerns/_global-variables.scss +5 -0
  29. data/app/assets/stylesheets/curation_concerns/_modules.scss +13 -0
  30. data/app/assets/stylesheets/curation_concerns/_positioning.scss +138 -0
  31. data/app/assets/stylesheets/curation_concerns/_theme.scss +46 -0
  32. data/app/assets/stylesheets/curation_concerns/_typography.scss +137 -0
  33. data/app/assets/stylesheets/curation_concerns/_variables_bootstrap.scss +7 -0
  34. data/app/assets/stylesheets/curation_concerns/downloads.scss +3 -0
  35. data/app/assets/stylesheets/curation_concerns/help_requests.scss +3 -0
  36. data/app/assets/stylesheets/curation_concerns/modules/accessibility.scss +50 -0
  37. data/app/assets/stylesheets/curation_concerns/modules/accordion.scss +33 -0
  38. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +31 -0
  39. data/app/assets/stylesheets/curation_concerns/modules/classify_work.scss +100 -0
  40. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +15 -0
  41. data/app/assets/stylesheets/curation_concerns/modules/emphatic_action_area.scss +14 -0
  42. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +116 -0
  43. data/app/assets/stylesheets/curation_concerns/modules/multi_value_fields.scss +52 -0
  44. data/app/assets/stylesheets/curation_concerns/modules/pagination.scss +4 -0
  45. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +55 -0
  46. data/app/assets/stylesheets/curation_concerns/modules/site_actions.scss +53 -0
  47. data/app/assets/stylesheets/curation_concerns/modules/site_search.scss +46 -0
  48. data/app/controllers/catalog_controller.rb +3 -0
  49. data/app/controllers/collections_controller.rb +3 -0
  50. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +28 -0
  51. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +321 -0
  52. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +76 -0
  53. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +125 -0
  54. data/app/controllers/concerns/curation_concerns/download_behavior.rb +60 -0
  55. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +44 -0
  56. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +149 -0
  57. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +36 -0
  58. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +26 -0
  59. data/app/controllers/concerns/curation_concerns/parent_container.rb +33 -0
  60. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +31 -0
  61. data/app/controllers/concerns/curation_concerns/without_namespace.rb +15 -0
  62. data/app/controllers/curation_concerns/application_controller.rb +7 -0
  63. data/app/controllers/curation_concerns/classify_concerns_controller.rb +35 -0
  64. data/app/controllers/curation_concerns/generic_files_controller.rb +13 -0
  65. data/app/controllers/curation_concerns/permissions_controller.rb +19 -0
  66. data/app/controllers/downloads_controller.rb +4 -0
  67. data/app/controllers/embargoes_controller.rb +5 -0
  68. data/app/controllers/leases_controller.rb +5 -0
  69. data/app/controllers/registrations_controller.rb +20 -0
  70. data/app/controllers/sessions_controller.rb +4 -0
  71. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +57 -0
  72. data/app/datastreams/generic_work_metadata.rb +3 -0
  73. data/app/forms/curation_concerns/forms/collection_edit_form.rb +17 -0
  74. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +15 -0
  75. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +9 -0
  76. data/app/helpers/curation_concerns/ability_helper.rb +46 -0
  77. data/app/helpers/curation_concerns/attribute_helper.rb +67 -0
  78. data/app/helpers/curation_concerns/catalog_helper.rb +38 -0
  79. data/app/helpers/curation_concerns/collections_helper.rb +63 -0
  80. data/app/helpers/curation_concerns/embargo_helper.rb +17 -0
  81. data/app/helpers/curation_concerns/generic_file_helper.rb +19 -0
  82. data/app/helpers/curation_concerns/lease_helper.rb +18 -0
  83. data/app/helpers/curation_concerns/main_app_helpers.rb +13 -0
  84. data/app/helpers/curation_concerns/render_constraints_helper.rb +42 -0
  85. data/app/helpers/curation_concerns/search_paths_helper.rb +13 -0
  86. data/app/helpers/curation_concerns/thumbnail_helper.rb +11 -0
  87. data/app/helpers/curation_concerns/title_helper.rb +23 -0
  88. data/app/helpers/curation_concerns/url_helper.rb +29 -0
  89. data/app/presenters/curation_concerns/collection_presenter.rb +40 -0
  90. data/app/presenters/curation_concerns/generic_file_presenter.rb +14 -0
  91. data/app/presenters/curation_concerns/generic_work_presenter.rb +13 -0
  92. data/app/search_builders/curation_concerns/search_builder.rb +49 -0
  93. data/app/services/curation_concerns/curation_concern.rb +14 -0
  94. data/app/services/curation_concerns/embargo_service.rb +26 -0
  95. data/app/services/curation_concerns/lease_service.rb +23 -0
  96. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  97. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  98. data/app/views/catalog/_document.html.erb +3 -0
  99. data/app/views/catalog/_document_list.html.erb +5 -0
  100. data/app/views/catalog/_home_text.html.erb +8 -0
  101. data/app/views/catalog/_index_default.html.erb +17 -0
  102. data/app/views/catalog/_index_header_list_default.html.erb +8 -0
  103. data/app/views/catalog/_navbar.html.erb +12 -0
  104. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  105. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  106. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  107. data/app/views/catalog/index.html.erb +47 -0
  108. data/app/views/collections/_add_to_collection_modal.html.erb +15 -0
  109. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  110. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  111. data/app/views/collections/_collection.html.erb +1 -0
  112. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  113. data/app/views/collections/_document_list.html.erb +7 -0
  114. data/app/views/collections/_edit_actions.html.erb +5 -0
  115. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  116. data/app/views/collections/_form.html.erb +26 -0
  117. data/app/views/collections/_form_additional_information.html.erb +6 -0
  118. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  119. data/app/views/collections/_form_permission.html.erb +36 -0
  120. data/app/views/collections/_form_representative_image.html.erb +13 -0
  121. data/app/views/collections/_form_required_information.html.erb +11 -0
  122. data/app/views/collections/_form_to_add_member.html.erb +21 -0
  123. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  124. data/app/views/collections/_media_display.html.erb +1 -0
  125. data/app/views/collections/_paginate.html.erb +6 -0
  126. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  127. data/app/views/collections/_show_actions.html.erb +8 -0
  128. data/app/views/collections/_show_descriptions.html.erb +10 -0
  129. data/app/views/collections/_show_fields.html.erb +0 -0
  130. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  131. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  132. data/app/views/collections/_view_type_group.html.erb +13 -0
  133. data/app/views/collections/edit.html.erb +17 -0
  134. data/app/views/collections/show.html.erb +24 -0
  135. data/app/views/curation_concerns/base/_attributes.html.erb +25 -0
  136. data/app/views/curation_concerns/base/_collections.html.erb +26 -0
  137. data/app/views/curation_concerns/base/_form.html.erb +25 -0
  138. data/app/views/curation_concerns/base/_form_additional_information.html.erb +7 -0
  139. data/app/views/curation_concerns/base/_form_content_license.html.erb +16 -0
  140. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +11 -0
  141. data/app/views/curation_concerns/base/_form_editors.html.erb +15 -0
  142. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +23 -0
  143. data/app/views/curation_concerns/base/_form_permission.html.erb +52 -0
  144. data/app/views/curation_concerns/base/_form_permission_embargo.html.erb +6 -0
  145. data/app/views/curation_concerns/base/_form_permission_lease.html.erb +6 -0
  146. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +16 -0
  147. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +18 -0
  148. data/app/views/curation_concerns/base/_form_representative_image.html.erb +13 -0
  149. data/app/views/curation_concerns/base/_form_required_information.html.erb +11 -0
  150. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +15 -0
  151. data/app/views/curation_concerns/base/_legally_binding_text.html.erb +33 -0
  152. data/app/views/curation_concerns/base/_related_files.html.erb +24 -0
  153. data/app/views/curation_concerns/base/_representative_media.html.erb +8 -0
  154. data/app/views/curation_concerns/base/edit.html.erb +13 -0
  155. data/app/views/curation_concerns/base/new.html.erb +12 -0
  156. data/app/views/curation_concerns/base/show.html.erb +21 -0
  157. data/app/views/curation_concerns/base/unauthorized.html.erb +3 -0
  158. data/app/views/curation_concerns/classify_concerns/new.html.erb +25 -0
  159. data/app/views/curation_concerns/collections/_form_additional_information.html.erb +6 -0
  160. data/app/views/curation_concerns/generic_files/_actions.html.erb +16 -0
  161. data/app/views/curation_concerns/generic_files/_form.html.erb +35 -0
  162. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +12 -0
  163. data/app/views/curation_concerns/generic_files/_media_display.html.erb +19 -0
  164. data/app/views/curation_concerns/generic_files/edit.html.erb +5 -0
  165. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +8 -0
  166. data/app/views/curation_concerns/generic_files/show.html.erb +15 -0
  167. data/app/views/curation_concerns/permissions/confirm.html.erb +21 -0
  168. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  169. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  170. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  171. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  172. data/app/views/embargoes/edit.html.erb +43 -0
  173. data/app/views/embargoes/index.html.erb +18 -0
  174. data/app/views/layouts/boilerplate.html.erb +22 -0
  175. data/app/views/layouts/curation_concerns/1_column.html.erb +11 -0
  176. data/app/views/layouts/curation_concerns/catalog.html.erb +37 -0
  177. data/app/views/layouts/curation_concerns.html.erb +22 -0
  178. data/app/views/leases/_lease_history.html.erb +7 -0
  179. data/app/views/leases/_list_active_leases.html.erb +16 -0
  180. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  181. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  182. data/app/views/leases/edit.html.erb +43 -0
  183. data/app/views/leases/index.html.erb +18 -0
  184. data/app/views/shared/_add_content.html.erb +32 -0
  185. data/app/views/shared/_brand_bar.html.erb +10 -0
  186. data/app/views/shared/_flash_message.html.erb +17 -0
  187. data/app/views/shared/_footer.html.erb +10 -0
  188. data/app/views/shared/_ga.html.erb +6 -0
  189. data/app/views/shared/_header.html.erb +12 -0
  190. data/app/views/shared/_my_actions.html.erb +21 -0
  191. data/app/views/shared/_site_actions.html.erb +7 -0
  192. data/app/views/shared/_site_search.html.erb +12 -0
  193. data/app/views/shared/_title_bar.html.erb +16 -0
  194. data/app/workers/visibility_copy_worker.rb +30 -0
  195. data/config/initializers/simple_form.rb +31 -0
  196. data/config/locales/curation_concerns.en.yml +96 -0
  197. data/config/routes.rb +4 -0
  198. data/curation_concerns-models/.gitignore +17 -0
  199. data/curation_concerns-models/Gemfile +4 -0
  200. data/curation_concerns-models/LICENSE.md +177 -0
  201. data/curation_concerns-models/README.md +42 -0
  202. data/curation_concerns-models/Rakefile +1 -0
  203. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +99 -0
  204. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +90 -0
  205. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +150 -0
  206. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +88 -0
  207. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +22 -0
  208. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +6 -0
  209. data/curation_concerns-models/app/jobs/audit_job.rb +58 -0
  210. data/curation_concerns-models/app/jobs/characterize_job.rb +11 -0
  211. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +24 -0
  212. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +15 -0
  213. data/curation_concerns-models/app/jobs/import_url_job.rb +56 -0
  214. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +48 -0
  215. data/curation_concerns-models/app/jobs/resolrize_job.rb +9 -0
  216. data/curation_concerns-models/app/models/checksum_audit_log.rb +21 -0
  217. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +34 -0
  218. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +87 -0
  219. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +47 -0
  220. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +53 -0
  221. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +89 -0
  222. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +8 -0
  223. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +343 -0
  224. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +12 -0
  225. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +14 -0
  226. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +16 -0
  227. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +5 -0
  228. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +44 -0
  229. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +38 -0
  230. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +14 -0
  231. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +23 -0
  232. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +19 -0
  233. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +75 -0
  234. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +7 -0
  235. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +15 -0
  236. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +135 -0
  237. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +65 -0
  238. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +98 -0
  239. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +29 -0
  240. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +47 -0
  241. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +31 -0
  242. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +148 -0
  243. data/curation_concerns-models/app/models/version_committer.rb +2 -0
  244. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +71 -0
  245. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +38 -0
  246. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +85 -0
  247. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +14 -0
  248. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +16 -0
  249. data/curation_concerns-models/app/services/curation_concerns/noid.rb +23 -0
  250. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +9 -0
  251. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +27 -0
  252. data/curation_concerns-models/config/locales/curation_concerns.en.yml +6 -0
  253. data/curation_concerns-models/curation_concerns-models.gemspec +34 -0
  254. data/curation_concerns-models/lib/curation_concerns/messages.rb +66 -0
  255. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +61 -0
  256. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +36 -0
  257. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +22 -0
  258. data/curation_concerns-models/lib/curation_concerns/models/version.rb +5 -0
  259. data/curation_concerns-models/lib/curation_concerns/models.rb +32 -0
  260. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +30 -0
  261. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +19 -0
  262. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +28 -0
  263. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +70 -0
  264. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +4 -0
  265. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +4 -0
  266. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +1 -0
  267. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +123 -0
  268. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +6 -0
  269. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +9 -0
  270. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +32 -0
  271. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +1 -0
  272. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +10 -0
  273. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +5 -0
  274. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +19 -0
  275. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +15 -0
  276. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +75 -0
  277. data/curation_concerns-models/lib/tasks/migrate.rake +13 -0
  278. data/curation_concerns-models/lib/tasks/resque.rake +13 -0
  279. data/curation_concerns-models/lib/tasks/solr_reindex.rake +8 -0
  280. data/curation_concerns.gemspec +46 -0
  281. data/lib/curation_concerns/configuration.rb +74 -0
  282. data/lib/curation_concerns/controller_resource.rb +10 -0
  283. data/lib/curation_concerns/engine.rb +20 -0
  284. data/lib/curation_concerns/rails/routes.rb +76 -0
  285. data/lib/curation_concerns/spec_support.rb +10 -0
  286. data/lib/curation_concerns/version.rb +3 -0
  287. data/lib/curation_concerns.rb +8 -0
  288. data/lib/generators/curation_concerns/install_generator.rb +103 -0
  289. data/lib/generators/curation_concerns/templates/curation_concerns.css.scss +3 -0
  290. data/lib/generators/curation_concerns/templates/curation_concerns.js +1 -0
  291. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +2 -0
  292. data/lib/generators/curation_concerns/templates/curation_concerns_helper.rb +4 -0
  293. data/lib/generators/curation_concerns/work/USAGE +19 -0
  294. data/lib/generators/curation_concerns/work/templates/README +13 -0
  295. data/lib/generators/curation_concerns/work/templates/actor.rb.erb +7 -0
  296. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +9 -0
  297. data/lib/generators/curation_concerns/work/templates/controller.rb.erb +7 -0
  298. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +9 -0
  299. data/lib/generators/curation_concerns/work/templates/model.rb.erb +7 -0
  300. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +9 -0
  301. data/lib/generators/curation_concerns/work/work_generator.rb +78 -0
  302. data/solr_conf/conf/solrconfig.xml +223 -0
  303. data/spec/abilities/collection_abilities_spec.rb +48 -0
  304. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  305. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  306. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +116 -0
  307. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +95 -0
  308. data/spec/actors/curation_concerns/work_actor_spec.rb +203 -0
  309. data/spec/controllers/catalog_controller_spec.rb +115 -0
  310. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +43 -0
  311. data/spec/controllers/curation_concerns/collections_controller_spec.rb +171 -0
  312. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +251 -0
  313. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +167 -0
  314. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +29 -0
  315. data/spec/controllers/downloads_controller_spec.rb +51 -0
  316. data/spec/controllers/embargoes_controller_spec.rb +114 -0
  317. data/spec/controllers/leases_controller_spec.rb +94 -0
  318. data/spec/factories/collections.rb +15 -0
  319. data/spec/factories/create_curation_concern.rb +3 -0
  320. data/spec/factories/generic_files.rb +31 -0
  321. data/spec/factories/generic_works.rb +54 -0
  322. data/spec/factories/users.rb +28 -0
  323. data/spec/features/add_file_spec.rb +30 -0
  324. data/spec/features/collection_spec.rb +222 -0
  325. data/spec/features/create_work_spec.rb +43 -0
  326. data/spec/features/embargo_spec.rb +51 -0
  327. data/spec/features/lease_spec.rb +49 -0
  328. data/spec/features/update_file_spec.rb +32 -0
  329. data/spec/features/work_generator_spec.rb +58 -0
  330. data/spec/fixtures/Example.ogg +0 -0
  331. data/spec/fixtures/charter.docx +0 -0
  332. data/spec/fixtures/countdown.avi +0 -0
  333. data/spec/fixtures/curation_concerns_generic_stub.txt +1 -0
  334. data/spec/fixtures/files/image.png +0 -0
  335. data/spec/fixtures/image.jp2 +0 -0
  336. data/spec/fixtures/image.jpg +0 -0
  337. data/spec/fixtures/piano_note.wav +0 -0
  338. data/spec/fixtures/sample_mpeg4.mp4 +0 -0
  339. data/spec/fixtures/small_file.txt +1 -0
  340. data/spec/fixtures/spoken-text.m4a +0 -0
  341. data/spec/fixtures/test4.pdf +0 -0
  342. data/spec/fixtures/test5.mp3 +0 -0
  343. data/spec/fixtures/world.png +0 -0
  344. data/spec/forms/collection_edit_form_spec.rb +20 -0
  345. data/spec/forms/generic_file_edit_form_spec.rb +33 -0
  346. data/spec/helpers/catalog_helper_spec.rb +58 -0
  347. data/spec/helpers/configuration_helper_spec.rb +13 -0
  348. data/spec/helpers/curation_concerns/.keep +0 -0
  349. data/spec/helpers/curation_concerns/collections_helper_spec.rb +49 -0
  350. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  351. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  352. data/spec/helpers/url_helper_spec.rb +22 -0
  353. data/spec/jobs/active_fedora_id_based_job_spec.rb +14 -0
  354. data/spec/jobs/audit_job_spec.rb +53 -0
  355. data/spec/jobs/characterize_job_spec.rb +23 -0
  356. data/spec/jobs/copy_permissions_job_spec.rb +49 -0
  357. data/spec/jobs/create_derivatives_job_spec.rb +23 -0
  358. data/spec/jobs/curation_concerns_resque_queue_spec.rb +49 -0
  359. data/spec/jobs/import_url_job_spec.rb +45 -0
  360. data/spec/jobs/ingest_local_file_job_spec.rb +25 -0
  361. data/spec/lib/curation_concerns/messages_spec.rb +70 -0
  362. data/spec/lib/curation_concerns/readable_permissions_spec.rb +56 -0
  363. data/spec/lib/curation_concerns/writable_permissions_spec.rb +16 -0
  364. data/spec/matchers/metadata_field_matchers.rb +28 -0
  365. data/spec/matchers/response_matchers.rb +7 -0
  366. data/spec/matchers.rb +24 -0
  367. data/spec/models/checksum_audit_log_spec.rb +66 -0
  368. data/spec/models/curation_concerns/collection_behavior_spec.rb +107 -0
  369. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +88 -0
  370. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +35 -0
  371. data/spec/models/fits_datastream_spec.rb +127 -0
  372. data/spec/models/generic_file_spec.rb +619 -0
  373. data/spec/models/generic_work_spec.rb +43 -0
  374. data/spec/models/user_spec.rb +23 -0
  375. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +34 -0
  376. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +16 -0
  377. data/spec/routing/curation_concerns/routes_spec.rb +36 -0
  378. data/spec/routing/route_spec.rb +86 -0
  379. data/spec/services/characterization_service_spec.rb +30 -0
  380. data/spec/services/embargo_service_spec.rb +38 -0
  381. data/spec/services/full_text_extraction_service_spec.rb +5 -0
  382. data/spec/services/generic_file_audit_service_spec.rb +71 -0
  383. data/spec/services/generic_file_indexing_service_spec.rb +57 -0
  384. data/spec/services/generic_work_indexing_service_spec.rb +18 -0
  385. data/spec/services/lease_service_spec.rb +53 -0
  386. data/spec/services/repository_audit_service_spec.rb +18 -0
  387. data/spec/services/versioning_service_spec.rb +32 -0
  388. data/spec/spec_helper.rb +94 -0
  389. data/spec/support/controllers/engine_helpers.rb +7 -0
  390. data/spec/support/curation_concerns/factory_helpers.rb +14 -0
  391. data/spec/support/features/fixture_file_upload.rb +14 -0
  392. data/spec/support/features/session_helpers.rb +41 -0
  393. data/spec/support/features.rb +19 -0
  394. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  395. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  396. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  397. data/spec/tasks/rake_spec.rb +24 -0
  398. data/spec/test_app_templates/Gemfile.extra +1 -0
  399. data/spec/test_app_templates/lib/generators/test_app_generator.rb +55 -0
  400. data/spec/views/catalog/index.html.erb_spec.rb +59 -0
  401. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +25 -0
  402. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +29 -0
  403. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +33 -0
  404. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  405. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  406. data/spec/workers/visibility_copy_worker_spec.rb +70 -0
  407. data/tasks/jetty.rake +15 -0
  408. data/tasks/release.rake +93 -0
  409. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  410. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  411. data/vendor/assets/javascripts/handlebars.js +2278 -0
  412. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  413. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  414. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  415. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  416. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  417. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  418. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  419. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  420. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  421. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  422. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  423. data/vendor/assets/stylesheets/token-input.css +127 -0
  424. metadata +888 -0
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+
3
+ describe EmbargoesController do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let(:a_work) { FactoryGirl.create(:generic_work, user: user) }
6
+ let(:not_my_work) { FactoryGirl.create(:generic_work) }
7
+
8
+ before { sign_in user }
9
+
10
+ describe "#index" do
11
+ context "when I am NOT a repository manager" do
12
+ it "should redirect" do
13
+ get :index
14
+ expect(response).to redirect_to root_path
15
+ end
16
+ end
17
+ context "when I am a repository manager" do
18
+ before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
19
+ it "should show me the page" do
20
+ get :index
21
+ expect(response).to be_success
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "#edit" do
27
+ context "when I do not have edit permissions for the object" do
28
+ it "should redirect" do
29
+ get :edit, id: not_my_work
30
+ expect(response.status).to eq 302
31
+ expect(flash[:alert]).to eq 'You are not authorized to access this page.'
32
+ end
33
+ end
34
+ context "when I have permission to edit the object" do
35
+ it "should show me the page" do
36
+ get :edit, id: a_work
37
+ expect(response).to be_success
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+
44
+ describe "#destroy" do
45
+ context "when I do not have edit permissions for the object" do
46
+ it "should deny access" do
47
+ get :destroy, id: not_my_work
48
+ expect(response).to fail_redirect_and_flash(root_path, 'You are not authorized to access this page.')
49
+ end
50
+ end
51
+
52
+ context "when I have permission to edit the object" do
53
+ before do
54
+ expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
55
+ a_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
56
+ a_work.visibility_during_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
57
+ a_work.visibility_after_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
58
+ a_work.embargo_release_date = release_date.to_s
59
+ a_work.save(validate: false)
60
+ get :destroy, id: a_work
61
+ end
62
+
63
+ context "with an active embargo" do
64
+ let(:release_date) { Date.today+2 }
65
+
66
+ it "should deactivate embargo without updating visibility and redirect" do
67
+ expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
68
+ expect(response).to redirect_to edit_embargo_path(a_work)
69
+ end
70
+ end
71
+
72
+ context "with an expired embargo" do
73
+ let(:release_date) { Date.today-2 }
74
+
75
+ it "should deactivate embargo, update the visibility and redirect" do
76
+ expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
77
+ expect(response).to redirect_to confirm_curation_concerns_permission_path(a_work)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ describe "#update" do
84
+ context "when I have permission to edit the object" do
85
+ let(:a_file) { FactoryGirl.create(:generic_file, visibility: Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED) }
86
+ let(:release_date) { Date.today+2 }
87
+ before do
88
+ a_work.generic_files << a_file
89
+ a_work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
90
+ a_work.visibility_during_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
91
+ a_work.visibility_after_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
92
+ a_work.embargo_release_date = release_date.to_s
93
+ a_work.embargo.save(validate: false)
94
+ a_work.save(validate: false)
95
+ end
96
+
97
+ it "should copy visibility from curation_concern to all of the identified files" do
98
+ pending "Is this ever used? If so, write this test!"
99
+ fail
100
+ patch :update, batch_document_ids: [a_work.id], embargoes: { "0" => { copy_visibility: a_work.id} }
101
+ end
102
+
103
+ context "with an expired embargo" do
104
+ let(:release_date) { Date.today-2 }
105
+ it "should deactivate embargo, update the visibility and redirect" do
106
+ patch :update, batch_document_ids: [a_work.id], embargoes: { "0" => { copy_visibility: a_work.id} }
107
+ expect(a_work.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
108
+ expect(a_file.reload.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
109
+ expect(response).to redirect_to embargoes_path
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe LeasesController do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let(:a_work) { FactoryGirl.create(:generic_work, user: user) }
6
+ let(:not_my_work) { FactoryGirl.create(:generic_work) }
7
+
8
+ before { sign_in user }
9
+
10
+ describe "#index" do
11
+ context "when I am NOT a repository manager" do
12
+ it "should redirect" do
13
+ get :index
14
+ expect(response).to redirect_to root_path
15
+ end
16
+ end
17
+ context "when I am a repository manager" do
18
+ before { allow_any_instance_of(User).to receive(:groups).and_return(['admin']) }
19
+ it "should show me the page" do
20
+ get :index
21
+ expect(response).to be_success
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "#edit" do
27
+ context "when I do not have edit permissions for the object" do
28
+ it "should redirect" do
29
+ get :edit, id: not_my_work
30
+ expect(response.status).to eq 302
31
+ expect(flash[:alert]).to eq 'You are not authorized to access this page.'
32
+ end
33
+ end
34
+ context "when I have permission to edit the object" do
35
+ it "should show me the page" do
36
+ get :edit, id: a_work
37
+ expect(response).to be_success
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+
44
+ describe "#destroy" do
45
+ context "when I do not have edit permissions for the object" do
46
+ it "should deny access" do
47
+ get :destroy, id: not_my_work
48
+ expect(response).to fail_redirect_and_flash(root_path, 'You are not authorized to access this page.')
49
+ end
50
+ end
51
+
52
+ context "when I have permission to edit the object" do
53
+ before do
54
+ expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
55
+ a_work.visibility_during_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
56
+ a_work.visibility_after_lease = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
57
+ a_work.lease_expiration_date = release_date.to_s
58
+ expect(CurationConcerns.queue).to receive(:push).with(an_instance_of(VisibilityCopyWorker))
59
+ get :destroy, id: a_work
60
+ end
61
+
62
+ context "with an active lease" do
63
+ let(:release_date) { Date.today+2 }
64
+ it "should deactivate the lease without updating visibility and redirect" do
65
+ expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
66
+ expect(response).to redirect_to edit_lease_path(a_work)
67
+ end
68
+ end
69
+
70
+ context "with an expired lease" do
71
+ let(:release_date) { Date.today-2 }
72
+
73
+ it "should deactivate the lease, update the visibility and redirect" do
74
+ expect(a_work.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
75
+ expect(response).to redirect_to edit_lease_path(a_work)
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#update" do
82
+ context "when I have permission to edit the object" do
83
+ before do
84
+ expect(ActiveFedora::Base).to receive(:find).with(a_work.id).and_return(a_work)
85
+ end
86
+ it "should deactivate lease and redirect" do
87
+ expect(a_work).to receive(:deactivate_lease!)
88
+ expect(a_work).to receive(:save)
89
+ patch :update, batch_document_ids: [a_work.id]
90
+ expect(response).to redirect_to leases_path
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,15 @@
1
+ FactoryGirl.define do
2
+ # The ::Collection model is defined in spec/internal/app/models by the
3
+ # curation_concerns:install generator.
4
+ factory :collection do
5
+ transient do
6
+ user { FactoryGirl.create(:user) }
7
+ end
8
+
9
+ title "Test collection title"
10
+
11
+ after(:build) do |collection, evaluator|
12
+ collection.apply_depositor_metadata(evaluator.user.user_key)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ def FactoryGirl.create_curation_concern(factory_name, user, override_attributes = {})
2
+ FactoryGirl.create(factory_name, override_attributes.merge(user: user))
3
+ end
@@ -0,0 +1,31 @@
1
+ FactoryGirl.define do
2
+ # The ::GenericFile model is defined in spec/internal/app/models by the
3
+ # curation_concerns:install generator.
4
+ factory :generic_file, class: GenericFile do
5
+ transient do
6
+ user { FactoryGirl.create(:user) }
7
+ content nil
8
+ end
9
+
10
+ after(:create) do |file, evaluator|
11
+ if evaluator.content
12
+ Hydra::Works::UploadFileToGenericFile.call(file, evaluator.content)
13
+ end
14
+ end
15
+
16
+ factory :file_with_work do
17
+ after(:build) do |file, evaluator|
18
+ file.title = ['testfile']
19
+ end
20
+ after(:create) do |file, evaluator|
21
+ if evaluator.content
22
+ Hydra::Works::UploadFileToGenericFile.call(file, evaluator.content)
23
+ end
24
+ FactoryGirl.create(:generic_work, user: evaluator.user).generic_files << file
25
+ end
26
+ end
27
+ after(:build) do |file, evaluator|
28
+ file.apply_depositor_metadata(evaluator.user.user_key)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,54 @@
1
+ FactoryGirl.define do
2
+ # The ::GenericWork model is defined in spec/internal/app/models by the
3
+ # curation_concerns:install generator.
4
+ factory :generic_work, aliases: [:work, :private_generic_work], class: GenericWork do
5
+ transient do
6
+ user { FactoryGirl.create(:user) }
7
+ end
8
+
9
+ title ["Test title"]
10
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
11
+
12
+ after(:build) do |work, evaluator|
13
+ work.apply_depositor_metadata(evaluator.user.user_key)
14
+ end
15
+
16
+
17
+ factory :public_generic_work do
18
+ visibility Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
19
+ end
20
+
21
+ factory :work_with_one_file do
22
+ before(:create) do |work, evaluator|
23
+ work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user, title:['A Contained Generic File'], filename:['filename.pdf'])
24
+ end
25
+ end
26
+
27
+ factory :work_with_files do
28
+ before(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
29
+ end
30
+
31
+ factory :with_embargo_date do
32
+ transient do
33
+ embargo_date { Date.tomorrow.to_s }
34
+ end
35
+ factory :embargoed_work do
36
+ after(:build) { |work, evaluator| work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
37
+ end
38
+
39
+ factory :embargoed_work_with_files do
40
+ after(:build) { |work, evaluator| work.apply_embargo(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }
41
+ after(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
42
+ end
43
+
44
+ factory :leased_work do
45
+ after(:build) { |work, evaluator| work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
46
+ end
47
+
48
+ factory :leased_work_with_files do
49
+ after(:build) { |work, evaluator| work.apply_lease(evaluator.embargo_date, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE) }
50
+ after(:create) { |work, evaluator| 2.times { work.generic_files << FactoryGirl.create(:generic_file, user: evaluator.user) } }
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,28 @@
1
+ FactoryGirl.define do
2
+ factory :user do
3
+ sequence(:email) {|n| "email-#{srand}@test.com" }
4
+ password 'a password'
5
+ password_confirmation 'a password'
6
+ factory :admin do
7
+ after(:build) do |user|
8
+ def user.groups
9
+ ["admin"]
10
+ end
11
+ end
12
+ end
13
+
14
+ factory :jill do
15
+ email 'jilluser@example.com'
16
+ end
17
+
18
+ factory :archivist, aliases: [:user_with_fixtures] do
19
+ email 'archivist1@example.com'
20
+ end
21
+
22
+ factory :curator do
23
+ email 'curator1@example.com'
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Add an attached file" do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let!(:work) { FactoryGirl.create(:work, user: user) }
6
+
7
+ before do
8
+ sign_in user
9
+ # stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
10
+ s2 = double('resque message')
11
+ expect(CharacterizeJob).to receive(:new).and_return(s2)
12
+ expect(CurationConcerns.queue).to receive(:push).with(s2).once
13
+ end
14
+
15
+ it "should update the file" do
16
+ visit "/concern/generic_works/#{work.id}"
17
+ click_link 'Attach a File'
18
+
19
+ within("form.new_generic_file") do
20
+ fill_in("Title", with: 'image.png')
21
+ attach_file("Upload a file", fixture_file_path('files/image.png'))
22
+ click_on("Attach to Generic Work")
23
+ end
24
+
25
+ visit "/concern/generic_works/#{work.id}"
26
+ within '.related_files' do
27
+ expect(page).to have_link "image.png"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,222 @@
1
+ require 'spec_helper'
2
+ include CurationConcerns::SearchPathsHelper
3
+
4
+ describe 'collection' do
5
+ def create_collection(title, description)
6
+ click_link 'Add a Collection'
7
+ fill_in('Title', with: title)
8
+ fill_in('collection_description', with: description)
9
+ click_button("Create Collection")
10
+ expect(page).to have_content 'Items in this Collection'
11
+ expect(page).to have_content title
12
+ expect(page).to have_content description
13
+ end
14
+
15
+ let(:title1) {"Test Collection 1"}
16
+ let(:description1) {"Description for collection 1 we are testing."}
17
+ let(:title2) {"Test Collection 2"}
18
+ let(:description2) {"Description for collection 2 we are testing."}
19
+
20
+ let(:user) { FactoryGirl.create(:user, email: 'user1@example.com') }
21
+ let(:user_key) { user.user_key }
22
+ let(:generic_works) do
23
+ (0..12).map do |x|
24
+ GenericWork.new.tap do |f|
25
+ f.title = ["title #{x}"]
26
+ f.apply_depositor_metadata('user1@example.com')
27
+ f.save!
28
+ end
29
+ end
30
+ end
31
+ let(:gw1) { generic_works[0]}
32
+ let(:gw2) { generic_works[1]}
33
+
34
+ before(:all) do
35
+ @old_resque_inline_value = Resque.inline
36
+ Resque.inline = true
37
+ end
38
+
39
+ after(:all) do
40
+ Resque.inline = @old_resque_inline_value
41
+ GenericWork.destroy_all
42
+ Collection.destroy_all
43
+ end
44
+
45
+ describe 'create collection' do
46
+ before do
47
+ sign_in user
48
+ visit search_path_for_my_collections
49
+ end
50
+ it "should create a collection" do
51
+ title = "Genealogies of the American West"
52
+ description = "All about Genealogies of the American West"
53
+ click_link 'Add a Collection'
54
+ fill_in('Title', with: title)
55
+ fill_in('collection_description', with: description)
56
+ click_button("Create Collection")
57
+ expect(page).to have_content 'Items in this Collection'
58
+ expect(page).to have_content title
59
+ expect(page).to have_content description
60
+ end
61
+ end
62
+
63
+ describe 'delete collection' do
64
+ before (:each) do
65
+ @collection = Collection.new title:'collection title'
66
+ @collection.description = 'collection description'
67
+ @collection.apply_depositor_metadata(user_key)
68
+ @collection.save
69
+ sign_in user
70
+ visit main_app.catalog_index_path(:'f[generic_type_sim][]' => 'Collection', works: 'mine')
71
+ end
72
+
73
+ it "should delete a collection" do
74
+ expect(page).to have_content(@collection.title)
75
+ within("#document_#{@collection.id}") do
76
+ first(".itemtrash").click
77
+ end
78
+ expect(page).to_not have_content(@collection.title)
79
+ expect(page).to have_content("Collection was successfully deleted.")
80
+ end
81
+ end
82
+
83
+ describe 'show collection' do
84
+ before do
85
+ @collection = FactoryGirl.create(:collection, user:user, title: 'collection title', description:'collection description')
86
+ # @collection = Collection.new title: 'collection title'
87
+ # @collection.description = ['collection description']
88
+ # @collection.apply_depositor_metadata(user_key)
89
+ @collection.members = [gw1,gw2]
90
+ @collection.save
91
+ sign_in user
92
+ visit search_path_for_my_collections
93
+ end
94
+
95
+ it "should show a collection with a listing of Descriptive Metadata and catalog-style search results" do
96
+ expect(page).to have_content(@collection.title)
97
+ within('#document_'+@collection.id) do
98
+ click_link("collection title")
99
+ end
100
+ expect(page).to have_content(@collection.title)
101
+ expect(page).to have_content(@collection.description)
102
+ # Should have search results / contents listing
103
+ expect(page).to have_content(gw1.title.first)
104
+ expect(page).to have_content(gw2.title.first)
105
+ expect(page).to_not have_css(".pager")
106
+
107
+ end
108
+
109
+ it "should hide collection descriptive metadata when searching a collection" do
110
+ expect(page).to have_content(@collection.title)
111
+ within("#document_#{@collection.id}") do
112
+ click_link("collection title")
113
+ end
114
+ expect(page).to have_content(@collection.title)
115
+ expect(page).to have_content(@collection.description)
116
+ expect(page).to have_content(gw1.title.first)
117
+ expect(page).to have_content(gw2.title.first)
118
+ fill_in('collection_search', with: gw1.title.first)
119
+ click_button('collection_submit')
120
+ # Should not have Collection Descriptive metadata table
121
+ expect(page).to_not have_content("Descriptions")
122
+ expect(page).to have_content(@collection.title)
123
+ expect(page).to have_content(@collection.description)
124
+ # Should have search results / contents listing
125
+ expect(page).to have_content(gw1.title.first)
126
+ expect(page).to_not have_content(gw2.title.first)
127
+ # Should not have Dashboard content in contents listing
128
+ expect(page).to_not have_content("Visibility")
129
+ end
130
+ end
131
+
132
+ describe 'edit collection' do
133
+ before (:each) do
134
+ @collection = Collection.new(title: 'Awesome Title')
135
+ @collection.description = 'collection description'
136
+ @collection.apply_depositor_metadata(user_key)
137
+ @collection.members = [gw1, gw2]
138
+ @collection.save
139
+ sign_in user
140
+ visit search_path_for_my_collections
141
+ end
142
+
143
+ it "should edit and update collection metadata" do
144
+ expect(page).to have_content(@collection.title)
145
+ within("#document_#{@collection.id}") do
146
+ click_link('Edit Collection')
147
+ end
148
+ expect(page).to have_field('collection_title', with: @collection.title)
149
+ expect(page).to have_field('collection_description', with: @collection.description)
150
+ new_title = "Altered Title"
151
+ new_description = "Completely new Description text."
152
+ creators = ["Dorje Trollo", "Vajrayogini"]
153
+ fill_in('Title', with: new_title)
154
+ fill_in('collection_description', with: new_description)
155
+ fill_in('Creator', with: creators.first)
156
+ #within('.form-actions') do
157
+ click_button('Update Collection')
158
+ #end
159
+ expect(page).to_not have_content(@collection.title)
160
+ expect(page).to_not have_content(@collection.description)
161
+ expect(page).to have_content(new_title)
162
+ expect(page).to have_content(new_description)
163
+ expect(page).to have_content(creators.first)
164
+ end
165
+
166
+ it "should remove a work from a collection" do
167
+ expect(page).to have_content(@collection.title)
168
+ within("#document_#{@collection.id}") do
169
+ click_link('Edit Collection')
170
+ end
171
+ expect(page).to have_field('collection_title', with: @collection.title)
172
+ expect(page).to have_field('collection_description', with: @collection.description)
173
+ expect(page).to have_content(gw1.title.first)
174
+ expect(page).to have_content(gw2.title.first)
175
+ within("#document_#{gw1.id}") do
176
+ click_link('Remove From Collection')
177
+ end
178
+ expect(page).to have_content(@collection.title)
179
+ expect(page).to have_content(@collection.description)
180
+ expect(page).to_not have_content(gw1.title.first)
181
+ expect(page).to have_content(gw2.title.first)
182
+ end
183
+
184
+ it "should remove all works from a collection" do
185
+ skip "This is from Sufia, not sure if it should be here."
186
+ expect(page).to have_content(@collection.title)
187
+ within('#document_'+@collection.id) do
188
+ click_link('Edit Collection')
189
+ end
190
+ expect(page).to have_field('collection_title', with: @collection.title)
191
+ expect(page).to have_field('collection_description', with: @collection.description)
192
+ expect(page).to have_content(gw1.title.first)
193
+ expect(page).to have_content(gw2.title.first)
194
+ first('input#check_all').click
195
+ click_link('Remove From Collection')
196
+ expect(page).to have_content(@collection.title)
197
+ expect(page).to have_content(@collection.description)
198
+ expect(page).to_not have_content(gw1.title.first)
199
+ expect(page).to_not have_content(gw2.title.first)
200
+ end
201
+ end
202
+
203
+ describe 'show pages of a collection' do
204
+ before (:each) do
205
+ @collection = Collection.new title:'collection title'
206
+ @collection.description = 'collection description'
207
+ @collection.apply_depositor_metadata(user_key)
208
+ @collection.members = generic_works
209
+ @collection.save!
210
+ sign_in user
211
+ visit search_path_for_my_collections
212
+ end
213
+
214
+ it "should show a collection with a listing of Descriptive Metadata and catalog-style search results" do
215
+ expect(page).to have_content(@collection.title)
216
+ within('#document_'+@collection.id) do
217
+ click_link("collection title")
218
+ end
219
+ expect(page).to have_css(".pager")
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Creating a new Work" do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+
6
+ before do
7
+ sign_in user
8
+
9
+ # stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
10
+ s2 = double('resque message')
11
+ expect(CharacterizeJob).to receive(:new).and_return(s2)
12
+ expect(CurationConcerns.queue).to receive(:push).with(s2).once
13
+ end
14
+
15
+ it "should create the work and allow you to attach a file" do
16
+ visit "/concern/generic_works/new"
17
+ work_title = 'My Test Work'
18
+ within("form.new_generic_work") do
19
+ fill_in("Title", with: work_title)
20
+ attach_file("Upload a file", fixture_file_path('files/image.png'))
21
+ choose("visibility_open")
22
+ click_on("Create Generic work")
23
+ end
24
+ within '.related_files' do
25
+ expect(page).to have_link "image.png"
26
+ end
27
+
28
+ title = "Genealogies of the American West"
29
+ click_link 'Add a Collection'
30
+ fill_in('Title', with: title)
31
+ click_button("Create Collection")
32
+ click_on("Add files from your dashboard")
33
+ find("#facet-human_readable_type_sim").click_link('Generic Work')
34
+
35
+ # Works can be added to collections
36
+ within(".modal.fade", :match => :first) do
37
+ select title, :from => "id"
38
+ click_on("Add to collection")
39
+ end
40
+ expect(page).to have_content('Collection was successfully updated.')
41
+ expect(page).to have_content(work_title)
42
+ end
43
+ end