sufia 5.0.0 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -8
  3. data/Gemfile +3 -12
  4. data/History.md +0 -36
  5. data/LICENSE.md +14 -0
  6. data/README.md +4 -8
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/javascripts/sufia.js +1 -17
  9. data/app/assets/javascripts/sufia/batch_edit.js +43 -28
  10. data/app/assets/javascripts/sufia/edit_metadata.js +9 -14
  11. data/app/assets/javascripts/sufia/multiForm.js +67 -0
  12. data/app/assets/javascripts/sufia/permissions.js +92 -35
  13. data/app/assets/stylesheets/sufia.css.scss +1 -6
  14. data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -8
  15. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -15
  16. data/app/assets/stylesheets/sufia/_file-listing.scss +1 -1
  17. data/app/assets/stylesheets/sufia/_settings.scss +0 -1
  18. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +3 -10
  19. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -8
  20. data/app/controllers/concerns/sufia/catalog.rb +1 -1
  21. data/app/controllers/concerns/sufia/controller.rb +3 -1
  22. data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +1 -1
  23. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  24. data/app/controllers/concerns/sufia/files_controller_behavior.rb +16 -4
  25. data/app/controllers/concerns/sufia/homepage_controller.rb +1 -1
  26. data/app/controllers/concerns/sufia/my_controller_behavior.rb +2 -2
  27. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +3 -4
  28. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -7
  29. data/app/controllers/my/collections_controller.rb +3 -4
  30. data/app/controllers/my/highlights_controller.rb +2 -2
  31. data/app/controllers/my/shares_controller.rb +3 -3
  32. data/app/controllers/single_use_links_controller.rb +5 -9
  33. data/app/controllers/single_use_links_viewer_controller.rb +4 -4
  34. data/app/helpers/generic_file_helper.rb +9 -0
  35. data/app/helpers/sufia/records_helper_behavior.rb +16 -0
  36. data/app/helpers/sufia/sufia_helper_behavior.rb +0 -11
  37. data/app/jobs/content_depositor_change_event_job.rb +1 -1
  38. data/app/jobs/ingest_local_file_job.rb +2 -1
  39. data/app/models/concerns/sufia/solr_document_behavior.rb +10 -10
  40. data/app/models/featured_work_list.rb +7 -9
  41. data/app/presenters/sufia/version_list_presenter.rb +15 -0
  42. data/app/presenters/sufia/version_presenter.rb +30 -0
  43. data/app/views/batch/_metadata.html.erb +51 -29
  44. data/app/views/batch/_more_metadata.html.erb +1 -1
  45. data/app/views/batch/edit.html.erb +10 -8
  46. data/app/views/batch_edits/edit.html.erb +13 -9
  47. data/app/views/collections/_edit_descriptions.html.erb +1 -1
  48. data/app/views/collections/_form.html.erb +4 -4
  49. data/app/views/collections/_form_for_select_collection.html.erb +1 -1
  50. data/app/views/collections/_show_document_list_menu.html.erb +7 -5
  51. data/app/views/collections/_show_document_list_row.html.erb +2 -2
  52. data/app/views/collections/edit.html.erb +0 -1
  53. data/app/views/collections/edit_fields/_description.html.erb +4 -0
  54. data/app/views/collections/edit_fields/_title.html.erb +3 -0
  55. data/app/views/collections/show.html.erb +0 -1
  56. data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
  57. data/app/views/generic_files/_descriptions.html.erb +9 -9
  58. data/app/views/generic_files/_field_form.html.erb +11 -25
  59. data/app/views/generic_files/_permission.html.erb +6 -4
  60. data/app/views/generic_files/_permission_form.html.erb +15 -17
  61. data/app/views/generic_files/_show_details.html.erb +1 -11
  62. data/app/views/generic_files/_versioning.html.erb +5 -5
  63. data/app/views/generic_files/edit.html.erb +5 -4
  64. data/app/views/generic_files/show.html.erb +6 -6
  65. data/app/views/homepage/_featured_fields.html.erb +2 -2
  66. data/app/views/homepage/_recent_document.html.erb +1 -1
  67. data/app/views/layouts/_head_tag_content.html.erb +0 -2
  68. data/app/views/layouts/error.html.erb +0 -1
  69. data/app/views/my/_index_partials/_default_group.html.erb +1 -1
  70. data/app/views/my/_index_partials/_list_files.html.erb +1 -1
  71. data/app/views/my/index.html.erb +2 -2
  72. data/app/views/records/_edit_field.html.erb +17 -19
  73. data/app/views/records/edit_fields/_default.html.erb +10 -12
  74. data/app/views/records/edit_fields/_description.html.erb +10 -3
  75. data/app/views/records/edit_fields/_resource_type.html.erb +4 -5
  76. data/app/views/records/edit_fields/_rights.html.erb +9 -2
  77. data/app/views/records/edit_fields/_suffix.html.erb +10 -0
  78. data/app/views/records/edit_fields/_type.html.erb +8 -2
  79. data/app/views/records/show_fields/_based_near.html.erb +1 -1
  80. data/app/views/records/show_fields/_creator.html.erb +1 -1
  81. data/app/views/records/show_fields/_language.html.erb +1 -1
  82. data/app/views/records/show_fields/_publisher.html.erb +1 -1
  83. data/app/views/records/show_fields/_resource_type.html.erb +1 -1
  84. data/app/views/records/show_fields/_subject.html.erb +1 -1
  85. data/app/views/records/show_fields/_tag.html.erb +1 -1
  86. data/app/views/single_use_links/new_download.html.erb +2 -2
  87. data/app/views/users/_profile.html.erb +2 -1
  88. data/app/views/users/_social_media_info.html.erb +20 -0
  89. data/app/views/users/_user_info.html.erb +3 -20
  90. data/app/views/users/edit.html.erb +2 -11
  91. data/app/views/users/show.html.erb +1 -1
  92. data/bin/audit_repository +1 -1
  93. data/config/initializers/sufia_events.rb +4 -4
  94. data/config/locales/sufia.en.yml +0 -5
  95. data/config/routes.rb +1 -1
  96. data/lib/generators/sufia/install_generator.rb +0 -4
  97. data/lib/generators/sufia/templates/catalog_controller.rb +59 -59
  98. data/lib/sufia.rb +1 -4
  99. data/lib/sufia/version.rb +1 -1
  100. data/spec/actors/generic_file/actor_spec.rb +67 -8
  101. data/spec/controllers/batch_controller_spec.rb +72 -86
  102. data/spec/controllers/batch_edits_controller_spec.rb +17 -19
  103. data/spec/controllers/catalog_controller_spec.rb +16 -24
  104. data/spec/controllers/collections_controller_spec.rb +47 -74
  105. data/spec/controllers/downloads_controller_spec.rb +40 -35
  106. data/spec/controllers/generic_files_controller_spec.rb +363 -428
  107. data/spec/controllers/homepage_controller_spec.rb +12 -9
  108. data/spec/controllers/mailbox_controller_spec.rb +1 -4
  109. data/spec/controllers/my/files_controller_spec.rb +0 -10
  110. data/spec/controllers/single_use_links_controller_spec.rb +28 -35
  111. data/spec/controllers/single_use_links_viewer_controller_spec.rb +27 -41
  112. data/spec/controllers/transfers_controller_spec.rb +6 -6
  113. data/spec/controllers/users_controller_spec.rb +121 -124
  114. data/spec/factories/generic_files.rb +9 -17
  115. data/spec/features/browse_dashboard_files_spec.rb +8 -10
  116. data/spec/features/browse_files_spec.rb +12 -25
  117. data/spec/features/catalog_search_spec.rb +49 -49
  118. data/spec/features/collection_spec.rb +18 -24
  119. data/spec/features/contact_form_spec.rb +26 -20
  120. data/spec/features/ingest_upload_files_spec.rb +8 -6
  121. data/spec/features/ownership_transfer_spec.rb +2 -6
  122. data/spec/features/proxy_spec.rb +1 -1
  123. data/spec/features/search_spec.rb +2 -3
  124. data/spec/features/single_use_links_spec.rb +1 -1
  125. data/spec/features/users_spec.rb +1 -1
  126. data/spec/helpers/records_helper_spec.rb +24 -10
  127. data/spec/jobs/active_fedora_pid_based_job_spec.rb +1 -5
  128. data/spec/jobs/audit_job_spec.rb +66 -21
  129. data/spec/jobs/batch_update_job_spec.rb +49 -36
  130. data/spec/jobs/content_depositor_change_event_job_spec.rb +2 -4
  131. data/spec/jobs/create_derivatives_job_spec.rb +18 -19
  132. data/spec/jobs/event_jobs_spec.rb +17 -21
  133. data/spec/jobs/import_url_job_spec.rb +1 -6
  134. data/spec/jobs/ingest_local_file_job_spec.rb +0 -4
  135. data/spec/lib/sufia/breadcrumbs_spec.rb +8 -46
  136. data/spec/lib/sufia/id_service_spec.rb +8 -3
  137. data/spec/lib/sufia/user_stat_importer_spec.rb +18 -25
  138. data/spec/lib/sufia/writable_permissions_spec.rb +0 -4
  139. data/spec/models/ability_spec.rb +25 -18
  140. data/spec/models/batch_spec.rb +16 -45
  141. data/spec/models/characterization_spec.rb +1 -1
  142. data/spec/models/checksum_audit_log_spec.rb +51 -29
  143. data/spec/models/collection_spec.rb +0 -5
  144. data/spec/models/featured_work_list_spec.rb +2 -4
  145. data/spec/models/file_content_datastream_spec.rb +27 -60
  146. data/spec/models/file_usage_spec.rb +16 -21
  147. data/spec/models/fits_datastream_spec.rb +47 -2
  148. data/spec/models/generic_file/web_form_spec.rb +1 -1
  149. data/spec/models/generic_file_spec.rb +238 -735
  150. data/spec/models/local_authority_spec.rb +8 -13
  151. data/spec/models/proxy_deposit_request_spec.rb +3 -7
  152. data/spec/models/single_use_link_spec.rb +12 -16
  153. data/spec/models/solr_document_spec.rb +1 -1
  154. data/spec/models/trophy_spec.rb +1 -3
  155. data/spec/models/user_spec.rb +47 -75
  156. data/spec/presenters/sufia/version_list_presenter_spec.rb +22 -0
  157. data/spec/presenters/sufia/version_presenter_spec.rb +51 -0
  158. data/spec/services/generic_file_audit_service_spec.rb +85 -0
  159. data/spec/services/repository_audit_service_spec.rb +18 -0
  160. data/spec/spec_helper.rb +26 -7
  161. data/spec/support/fixture_helpers.rb +2 -4
  162. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -4
  163. data/spec/views/batch/edit.html.erb_spec.rb +17 -7
  164. data/spec/views/catalog/index.html.erb_spec.rb +8 -6
  165. data/spec/views/collections/_form.html.erb_spec.rb +4 -2
  166. data/spec/views/collections/_show_document_list.erb_spec.rb +31 -0
  167. data/spec/views/dashboard/index_spec.rb +2 -2
  168. data/spec/views/generic_file/edit.html.erb_spec.rb +20 -6
  169. data/spec/views/generic_file/show.html.erb_spec.rb +3 -3
  170. data/spec/views/users/show.html.erb_spec.rb +1 -1
  171. data/sufia-models/app/actors/sufia/generic_file/actor.rb +8 -10
  172. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +2 -3
  173. data/sufia-models/app/jobs/audit_job.rb +46 -32
  174. data/sufia-models/app/jobs/batch_update_job.rb +9 -8
  175. data/sufia-models/app/jobs/import_url_job.rb +2 -2
  176. data/sufia-models/app/models/batch.rb +11 -12
  177. data/sufia-models/app/models/checksum_audit_log.rb +12 -10
  178. data/sufia-models/app/models/concerns/sufia/ability.rb +4 -6
  179. data/sufia-models/app/models/concerns/sufia/collection.rb +4 -5
  180. data/sufia-models/app/models/concerns/sufia/generic_file.rb +3 -86
  181. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +29 -0
  182. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
  183. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +13 -0
  184. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
  185. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +4 -0
  186. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
  187. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
  188. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
  189. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
  190. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +4 -4
  191. data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
  192. data/sufia-models/app/models/concerns/sufia/model_methods.rb +11 -9
  193. data/sufia-models/app/models/concerns/sufia/user.rb +11 -33
  194. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -1
  195. data/sufia-models/app/models/datastreams/fits_datastream.rb +1 -1
  196. data/sufia-models/app/models/file_usage.rb +3 -3
  197. data/sufia-models/app/models/local_authority.rb +2 -2
  198. data/sufia-models/app/models/proxy_deposit_request.rb +1 -1
  199. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +83 -0
  200. data/sufia-models/app/services/sufia/id_service.rb +5 -5
  201. data/sufia-models/app/services/sufia/noid.rb +10 -7
  202. data/sufia-models/app/services/sufia/repository_audit_service.rb +9 -0
  203. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
  204. data/sufia-models/lib/generators/sufia/models/install_generator.rb +31 -11
  205. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +31 -2
  206. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
  207. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
  208. data/sufia-models/lib/sufia/models/engine.rb +13 -4
  209. data/sufia-models/lib/sufia/models/file_content/versions.rb +9 -11
  210. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +5 -9
  211. data/sufia-models/lib/sufia/models/version.rb +1 -1
  212. data/sufia-models/lib/sufia/permissions/writable.rb +34 -16
  213. data/sufia-models/sufia-models.gemspec +4 -2
  214. data/sufia.gemspec +4 -5
  215. data/tasks/jetty.rake +0 -26
  216. data/tasks/sufia-dev.rake +14 -2
  217. metadata +49 -64
  218. data/LICENSE +0 -15
  219. data/app/assets/images/orcid.png +0 -0
  220. data/app/assets/javascripts/sufia/manage_repeating_fields.js +0 -74
  221. data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +0 -67
  222. data/app/inputs/multi_value_input.rb +0 -84
  223. data/app/views/records/_rights_modal.html.erb +0 -1
  224. data/config/initializers/simple_form.rb +0 -167
  225. data/config/initializers/simple_form_bootstrap.rb +0 -137
  226. data/config/locales/simple_form.en.yml +0 -31
  227. data/fedora_conf/conf/development/fedora.fcfg +0 -946
  228. data/fedora_conf/conf/test/fedora.fcfg +0 -946
  229. data/spec/models/generic_file/reload_on_save_spec.rb +0 -25
  230. data/spec/models/generic_file_rdf_datastream_spec.rb +0 -12
  231. data/spec/models/properties_datastream_spec.rb +0 -41
  232. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +0 -19
  233. data/sufia-models/app/models/concerns/sufia/generic_file/audit.rb +0 -116
  234. data/sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
  235. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
  236. data/sufia-models/app/models/datastreams/batch_rdf_datastream.rb +0 -6
  237. data/sufia-models/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
  238. data/sufia-models/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
  239. data/sufia-models/app/models/datastreams/properties_datastream.rb +0 -4
  240. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -8
  241. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  242. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  244. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
@@ -13,12 +13,14 @@ describe "Uploading files via web form", :type => :feature do
13
13
  expect(page).to have_xpath '//input[@type="file"]'
14
14
  end
15
15
 
16
- it "should require checking the terms of service" do
17
- attach_file("files[]", File.dirname(__FILE__)+"/../../spec/fixtures/image.jp2")
18
- attach_file("files[]", File.dirname(__FILE__)+"/../../spec/fixtures/jp2_fits.xml")
19
- expect(page).to have_css("button#main_upload_start[disabled]")
20
- find('#main_upload_start_span').hover do
21
- expect(page).to have_content "Please accept Deposit Agreement before you can upload."
16
+ context "the terms of service", :js do
17
+ it "should be required to be checked" do
18
+ attach_file("files[]", File.dirname(__FILE__)+"/../../spec/fixtures/image.jp2")
19
+ attach_file("files[]", File.dirname(__FILE__)+"/../../spec/fixtures/jp2_fits.xml")
20
+ expect(page).to have_css("button#main_upload_start[disabled]")
21
+ find('#main_upload_start_span').hover do
22
+ expect(page).to have_content "Please accept Deposit Agreement before you can upload."
23
+ end
22
24
  end
23
25
  end
24
26
  end
@@ -24,11 +24,7 @@ describe 'Transferring file ownership:', :type => :feature do
24
24
  go_to_dashboard_files
25
25
  end
26
26
 
27
- after do
28
- ActiveFedora::Base.destroy_all
29
- end
30
-
31
- describe 'When I request a file transfer:' do
27
+ describe 'When I request a file transfer:', :js do
32
28
  context 'For a file I do not own' do
33
29
  pending 'The transfer option is not available' do
34
30
  fail
@@ -70,7 +66,7 @@ describe 'Transferring file ownership:', :type => :feature do
70
66
  end
71
67
  end
72
68
 
73
- describe 'When someone requests a file transfer to me' do
69
+ describe 'When someone requests a file transfer to me', :js do
74
70
  before do
75
71
  # As the original_owner, transfer a file to the new_owner
76
72
  transfer_ownership_of_file file, new_owner
@@ -4,7 +4,7 @@ describe 'proxy', :type => :feature do
4
4
  let(:user) { FactoryGirl.find_or_create(:archivist) }
5
5
  let(:second_user) { FactoryGirl.find_or_create(:jill) }
6
6
 
7
- describe 'add proxy in profile' do
7
+ describe 'add proxy in profile', :js do
8
8
  it "creates a proxy" do
9
9
  sign_in user
10
10
  visit "/"
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'searching', :type => :feature do
4
- before { GenericFile.destroy_all }
5
- let!(:file) { FactoryGirl.create(:public_file, title: "Toothbrush") }
3
+ describe 'searching' do
4
+ let!(:file) { FactoryGirl.create(:public_file, title: ["Toothbrush"]) }
6
5
 
7
6
  context "as a public user" do
8
7
  it "should find the file and have a gallery" do
@@ -40,7 +40,7 @@ describe "Create and use single-use links", :type => :feature do
40
40
  visit generate_download_single_use_link_path(id: file)
41
41
  expect(page).to have_css '.download-link'
42
42
  find('.download-link').click
43
- expected_content = ActiveFedora::Base.find(file.pid, cast: true).content.content
43
+ expected_content = ActiveFedora::Base.find(file.id).content.content
44
44
  expect(page.source).to eq expected_content
45
45
  end
46
46
  end
@@ -30,7 +30,7 @@ describe "User Profile", :type => :feature do
30
30
  click_button 'Save Profile'
31
31
  expect(page).to have_content 'Your profile has been updated'
32
32
  click_link 'Profile'
33
- expect(page).to have_link('curatorOfData', href: 'http://twitter.com/curatorOfData')
33
+ expect(page).to have_content 'http://twitter.com/curatorOfData'
34
34
  end
35
35
  end
36
36
 
@@ -1,6 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RecordsHelper, :type => :helper do
3
+ describe RecordsHelper do
4
+
5
+ describe "#add_field" do
6
+ let(:expected) {
7
+ "<span class=\"input-group-btn field-controls\"><button class=\"adder btn\" id=\"additional_test_submit\" name=\"additional_test\"><span aria-hidden=\"true\"><i class=\"glyphicon glyphicon-plus\"></i></span><span class=\"sr-only\">add another test</span></button></span>"
8
+ }
9
+
10
+ subject { helper.add_field(:test) }
11
+ it { is_expected.to eq expected }
12
+ end
13
+
14
+ describe "#subtract_field" do
15
+ let(:expected) {
16
+ "<span class=\"input-group-btn field-controls\"><button class=\"remover btn\" id=\"additional_test_submit\" name=\"additional_test\"><span aria-hidden=\"true\"><i class=\"glyphicon glyphicon-remove\"></i></span><span class=\"sr-only\">add another test</span></button></span>"
17
+ }
18
+
19
+ subject { helper.subtract_field(:test) }
20
+ it { is_expected.to eq expected }
21
+ end
4
22
 
5
23
  it "draws help_icon" do
6
24
  str = String.new(helper.help_icon(:tag))
@@ -24,15 +42,13 @@ describe RecordsHelper, :type => :helper do
24
42
 
25
43
  describe "download links" do
26
44
 
27
- before :all do
28
- @file = GenericFile.new(pid: "fake:1")
29
- assign :generic_file, @file
30
- end
31
-
45
+ let(:file) { GenericFile.new(id: "fake-1") }
32
46
  let(:link_text) { helper.render_download_link("Download Fake") }
33
47
  let(:icon_text) { helper.render_download_icon("Download the full-sized Fake") }
34
-
35
- describe "#render_download_link" do
48
+
49
+ before { assign :generic_file, file }
50
+
51
+ describe "#render_download_link" do
36
52
  it "has default text" do
37
53
  expect(helper.render_download_link).to have_selector("#file_download")
38
54
  expect(helper.render_download_link).to have_content("Download")
@@ -55,7 +71,6 @@ describe RecordsHelper, :type => :helper do
55
71
  expect(icon_text).to match("Download the full-sized Fake")
56
72
  end
57
73
  end
58
-
59
74
  end
60
75
 
61
76
  describe "#metadata_help" do
@@ -84,5 +99,4 @@ describe RecordsHelper, :type => :helper do
84
99
  expect(helper.get_aria_label("tag")).to eql("Usage information for keyword")
85
100
  end
86
101
  end
87
-
88
102
  end
@@ -6,13 +6,9 @@ describe ActiveFedoraPidBasedJob do
6
6
  gf.apply_depositor_metadata(user)
7
7
  gf.save!
8
8
  end}
9
- after do
10
- file.destroy
11
- user.destroy
12
- end
9
+
13
10
  it "finds object" do
14
11
  job = ActiveFedoraPidBasedJob.new(file.id)
15
12
  expect(job.generic_file).to_not be_nil
16
- expect(job.generic_file).to be_reload_on_save
17
13
  end
18
14
  end
@@ -1,31 +1,76 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe AuditJob do
4
- before do
5
- @user = FactoryGirl.find_or_create(:jill)
6
- @inbox = @user.mailbox.inbox
7
- @file = GenericFile.new
8
- @file.apply_depositor_metadata(@user)
9
- @file.save
4
+ let(:user) { FactoryGirl.create(:user) }
5
+
6
+ let(:file) do
7
+ GenericFile.create do |file|
8
+ file.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
9
+ file.apply_depositor_metadata(user)
10
+ end
11
+ end
12
+
13
+ let(:job) { AuditJob.new(file.id, 'content', uri) }
14
+
15
+ describe "audit on content" do
16
+ let(:uri) { file.content.uri }
17
+ it "should pass" do
18
+ expect(job.run).to eq(true)
19
+ end
10
20
  end
11
- after do
12
- @file.delete
21
+
22
+ describe "audit on a version of the content" do
23
+ let(:uri) { file.content.versions.first.uri }
24
+ it "should pass" do
25
+ expect(job.run).to eq(true)
26
+ end
27
+ end
28
+
29
+ describe "audit on an invalid version of the content" do
30
+ let(:uri) { file.content.versions.first.uri + "bogus" }
31
+ it "should fail" do
32
+ expect(job.run).to eq(false)
33
+ end
13
34
  end
14
- describe "passing audit" do
15
- it "should not send passing mail" do
16
- allow_any_instance_of(ActiveFedora::RelsExtDatastream).to receive(:dsChecksumValid).and_return(true)
17
- AuditJob.new(@file.pid, "RELS-EXT", @file.rels_ext.versionID).run
18
- @inbox = @user.mailbox.inbox
19
- expect(@inbox.count).to eq(0)
35
+
36
+ describe "sending mail" do
37
+ let(:uri) { file.content.uri }
38
+ let(:inbox) { user.mailbox.inbox }
39
+
40
+ before do
41
+ allow_any_instance_of(ActiveFedora::FixityService).to receive(:check).and_return(result)
42
+ job.run
43
+ end
44
+
45
+ context "when the audit passes" do
46
+ let(:result) { true }
47
+ it "should not send mail" do
48
+ expect(inbox.count).to eq(0)
49
+ end
50
+ end
51
+ context "when the audit fails" do
52
+ let(:result) { false }
53
+ it "should send failing mail" do
54
+ expect(inbox.count).to eq(1)
55
+ inbox.each { |msg| expect(msg.last_message.subject).to eq(AuditJob::FAIL) }
56
+ end
20
57
  end
21
58
  end
22
- describe "failing audit" do
23
- it "should send failing mail" do
24
- allow_any_instance_of(ActiveFedora::RelsExtDatastream).to receive(:dsChecksumValid).and_return(false)
25
- AuditJob.new(@file.pid, "RELS-EXT", @file.rels_ext.versionID).run
26
- @inbox = @user.mailbox.inbox
27
- expect(@inbox.count).to eq(1)
28
- @inbox.each { |msg| expect(msg.last_message.subject).to eq(AuditJob::FAIL) }
59
+
60
+ describe "run_audit" do
61
+ let(:uri) { file.content.versions.first.uri }
62
+ let!(:old) { ChecksumAuditLog.create(pid: file.id, dsid: 'content', version: uri, pass: 1, created_at: 2.minutes.ago) }
63
+ let!(:new) { ChecksumAuditLog.create(pid: file.id, dsid: 'content', version: uri, pass: 0) }
64
+ let(:mock_service) { double('mock fixity check service') }
65
+
66
+ before do
67
+ allow(ActiveFedora::FixityService).to receive(:new).and_return(mock_service)
68
+ allow(mock_service).to receive(:check).and_return(true, false, false, true, false)
69
+ end
70
+
71
+ it "should not prune failed audits" do
72
+ 5.times { job.send(:run_audit) }
73
+ expect(ChecksumAuditLog.logs_for(file.id, 'content').map(&:pass)).to eq [0, 1, 0, 0, 1, 0, 1]
29
74
  end
30
75
  end
31
76
  end
@@ -1,61 +1,74 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe BatchUpdateJob do
4
-
5
- before do
6
- @user = FactoryGirl.find_or_create(:jill)
7
- @batch = Batch.new
8
- @batch.save
9
- @file = GenericFile.new(batch: @batch)
10
- @file.apply_depositor_metadata(@user)
11
- @file.save
12
- @file2 = GenericFile.new(batch: @batch)
13
- @file2.apply_depositor_metadata('otherUser')
14
- @file2.save
4
+
5
+ let(:user) { FactoryGirl.find_or_create(:jill) }
6
+ let(:batch) { Batch.create }
7
+
8
+ let!(:file) do
9
+ GenericFile.new(batch: batch) do |file|
10
+ file.apply_depositor_metadata(user)
11
+ file.save!
12
+ end
15
13
  end
16
-
17
- after do
18
- @user.mailbox.inbox[0].messages[0].move_to_trash @user
19
- @batch.delete
20
- @file.delete
21
- @file2.delete
14
+
15
+ let!(:file2) do
16
+ GenericFile.new(batch: batch) do |file|
17
+ file.apply_depositor_metadata(user)
18
+ file.save!
19
+ end
22
20
  end
23
-
21
+
24
22
  describe "#run" do
25
23
  let(:params) do
26
24
  {
27
25
  generic_file: {
28
- read_groups_string: '', read_users_string: 'archivist1, archivist2', tag: ['']
29
- },
30
- id: @batch.pid,
26
+ read_groups_string: '', read_users_string: 'archivist1, archivist2',
27
+ tag: ['']
28
+ },
29
+ title: { file.id => ['File One'], file2.id => ['File Two'] },
30
+ id: batch.id,
31
31
  controller: 'batch',
32
32
  action: 'update'
33
33
  }.with_indifferent_access
34
34
  end
35
+
35
36
  context "with a failing update" do
36
37
  it "should check permissions for each file before updating" do
37
- expect_any_instance_of(User).to receive(:can?).with(:edit, @file).and_return(false)
38
- expect_any_instance_of(User).to receive(:can?).with(:edit, @file2).and_return(false)
39
- BatchUpdateJob.new(@user.user_key, params).run
40
- expect(@user.mailbox.inbox[0].messages[0].subject).to eq("Batch upload permission denied")
41
- expect(@user.mailbox.inbox[0].messages[0].body).to include("data-content")
42
- expect(@user.mailbox.inbox[0].messages[0].body).to include("These files")
38
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file).and_return(false)
39
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file2).and_return(false)
40
+ BatchUpdateJob.new(user.user_key, params).run
41
+ expect(user.mailbox.inbox[0].messages[0].subject).to eq("Batch upload permission denied")
42
+ expect(user.mailbox.inbox[0].messages[0].body).to include("data-content")
43
+ expect(user.mailbox.inbox[0].messages[0].body).to include("These files")
43
44
  end
44
45
  end
45
- context "with a passing update" do
46
+
47
+ describe "sends events" do
46
48
  let(:s1) { double('one') }
47
49
  let(:s2) { double('two') }
48
50
  it "should log a content update event" do
49
- expect_any_instance_of(User).to receive(:can?).with(:edit, @file).and_return(true)
50
- expect_any_instance_of(User).to receive(:can?).with(:edit, @file2).and_return(true)
51
- expect(ContentUpdateEventJob).to receive(:new).with(@file.pid, @user.user_key).and_return(s1)
51
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file).and_return(true)
52
+ expect_any_instance_of(User).to receive(:can?).with(:edit, file2).and_return(true)
53
+ expect(ContentUpdateEventJob).to receive(:new).with(file.id, user.user_key).and_return(s1)
52
54
  expect(Sufia.queue).to receive(:push).with(s1).once
53
- expect(ContentUpdateEventJob).to receive(:new).with(@file2.pid, @user.user_key).and_return(s2)
55
+ expect(ContentUpdateEventJob).to receive(:new).with(file2.id, user.user_key).and_return(s2)
54
56
  expect(Sufia.queue).to receive(:push).with(s2).once
55
- BatchUpdateJob.new(@user.user_key, params).run
56
- expect(@user.mailbox.inbox[0].messages[0].subject).to eq("Batch upload complete")
57
- expect(@user.mailbox.inbox[0].messages[0].body).to include("data-content")
58
- expect(@user.mailbox.inbox[0].messages[0].body).to include("These files")
57
+ BatchUpdateJob.new(user.user_key, params).run
58
+ expect(user.mailbox.inbox[0].messages[0].subject).to eq("Batch upload complete")
59
+ expect(user.mailbox.inbox[0].messages[0].body).to include("data-content")
60
+ expect(user.mailbox.inbox[0].messages[0].body).to include("These files")
61
+ end
62
+ end
63
+
64
+ describe "updates metadata" do
65
+ before do
66
+ allow(Sufia.queue).to receive(:push)
67
+ BatchUpdateJob.new(user.user_key, params).run
68
+ end
69
+
70
+ it "should update the titles" do
71
+ expect(file.reload.title).to eq ['File One']
59
72
  end
60
73
  end
61
74
  end
@@ -8,11 +8,9 @@ describe ContentDepositorChangeEventJob do
8
8
  gf.apply_depositor_metadata(@depositor.user_key)
9
9
  gf.save!
10
10
  end
11
- ContentDepositorChangeEventJob.new(@file.pid, @receiver.user_key).run
12
- end
13
- after do
14
- @file.destroy
11
+ ContentDepositorChangeEventJob.new(@file.id, @receiver.user_key).run
15
12
  end
13
+
16
14
  it "changes the depositor and records an original depositor" do
17
15
  @file.reload
18
16
  expect(@file.depositor).to eq @receiver.user_key
@@ -12,7 +12,6 @@ describe CreateDerivativesJob do
12
12
 
13
13
  after do
14
14
  Sufia.config.enable_ffmpeg = @ffmpeg_enabled
15
- @generic_file.destroy
16
15
  end
17
16
 
18
17
  subject { CreateDerivativesJob.new(@generic_file.id) }
@@ -33,7 +32,7 @@ describe CreateDerivativesJob do
33
32
  subject.run
34
33
  @generic_file.reload
35
34
  expect(@generic_file.thumbnail).to have_content
36
- expect(@generic_file.thumbnail.mimeType).to eq('image/jpeg')
35
+ expect(@generic_file.thumbnail.mime_type).to eq('image/jpeg')
37
36
  end
38
37
  end
39
38
 
@@ -70,7 +69,7 @@ describe CreateDerivativesJob do
70
69
  subject.run
71
70
  @generic_file.reload
72
71
  expect(@generic_file.thumbnail).to have_content
73
- expect(@generic_file.thumbnail.mimeType).to eq('image/jpeg')
72
+ expect(@generic_file.thumbnail.mime_type).to eq('image/jpeg')
74
73
  end
75
74
  end
76
75
 
@@ -89,7 +88,7 @@ describe CreateDerivativesJob do
89
88
  subject.run
90
89
  @generic_file.reload
91
90
  expect(@generic_file.thumbnail).to have_content
92
- expect(@generic_file.thumbnail.mimeType).to eq('image/jpeg')
91
+ expect(@generic_file.thumbnail.mime_type).to eq('image/jpeg')
93
92
  end
94
93
  end
95
94
  end
@@ -105,15 +104,15 @@ describe CreateDerivativesJob do
105
104
  it 'transcodes to webm and mp4' do
106
105
  subject.run
107
106
  reloaded = @generic_file.reload
108
- derivative = reloaded.datastreams['webm']
107
+ derivative = reloaded.attached_files['webm']
109
108
  expect(derivative).not_to be_nil
110
109
  expect(derivative.content).not_to be_nil
111
- expect(derivative.mimeType).to eq('video/webm')
110
+ expect(derivative.mime_type).to eq('video/webm')
112
111
 
113
- derivative2 = reloaded.datastreams['mp4']
112
+ derivative2 = reloaded.attached_files['mp4']
114
113
  expect(derivative2).not_to be_nil
115
114
  expect(derivative2.content).not_to be_nil
116
- expect(derivative2.mimeType).to eq('video/mp4')
115
+ expect(derivative2.mime_type).to eq('video/mp4')
117
116
  end
118
117
  end
119
118
 
@@ -127,15 +126,15 @@ describe CreateDerivativesJob do
127
126
  it 'transcodes to mp3 and ogg' do
128
127
  subject.run
129
128
  reloaded = @generic_file.reload
130
- derivative = reloaded.datastreams['mp3']
129
+ derivative = reloaded.attached_files['mp3']
131
130
  expect(derivative).not_to be_nil
132
131
  expect(derivative.content).not_to be_nil
133
- expect(derivative.mimeType).to eq('audio/mpeg')
132
+ expect(derivative.mime_type).to eq('audio/mpeg')
134
133
 
135
- derivative2 = reloaded.datastreams['ogg']
134
+ derivative2 = reloaded.attached_files['ogg']
136
135
  expect(derivative2).not_to be_nil
137
136
  expect(derivative2.content).not_to be_nil
138
- expect(derivative2.mimeType).to eq('audio/ogg')
137
+ expect(derivative2.mime_type).to eq('audio/ogg')
139
138
  end
140
139
  end
141
140
 
@@ -150,13 +149,13 @@ describe CreateDerivativesJob do
150
149
  pending 'Need a way to do this in hydra-derivatives'
151
150
  subject.run
152
151
  reloaded = @generic_file.reload
153
- derivative = reloaded.datastreams['mp3']
152
+ derivative = reloaded.attached_files['mp3']
154
153
  expect(derivative.content.size).to eq(reloaded.content.content.size)
155
- expect(derivative.mimeType).to eq('audio/mpeg')
154
+ expect(derivative.mime_type).to eq('audio/mpeg')
156
155
 
157
- derivative2 = reloaded.datastreams['ogg']
156
+ derivative2 = reloaded.attached_files['ogg']
158
157
  expect(derivative2.content).not_to be_nil
159
- expect(derivative2.mimeType).to eq('audio/ogg')
158
+ expect(derivative2.mime_type).to eq('audio/ogg')
160
159
  end
161
160
  end
162
161
 
@@ -171,15 +170,15 @@ describe CreateDerivativesJob do
171
170
  pending 'Need a way to do this in hydra-derivatives'
172
171
  subject.run
173
172
  reloaded = @generic_file.reload
174
- derivative = reloaded.datastreams['mp3']
173
+ derivative = reloaded.attached_files['mp3']
175
174
  expect(derivative).not_to be_nil
176
175
  expect(derivative.content).not_to be_nil
177
176
  expect(derivative.mimeType).to eq('audio/mpeg')
178
177
 
179
- derivative2 = reloaded.datastreams['ogg']
178
+ derivative2 = reloaded.attached_files['ogg']
180
179
  expect(derivative2).not_to be_nil
181
180
  expect(derivative2.content.size).to eq(reloaded.content.content.size)
182
- expect(derivative2.mimeType).to eq('audio/ogg')
181
+ expect(derivative2.mime_type).to eq('audio/ogg')
183
182
  end
184
183
  end
185
184
  end