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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -8
- data/Gemfile +3 -12
- data/History.md +0 -36
- data/LICENSE.md +14 -0
- data/README.md +4 -8
- data/SUFIA_VERSION +1 -1
- data/app/assets/javascripts/sufia.js +1 -17
- data/app/assets/javascripts/sufia/batch_edit.js +43 -28
- data/app/assets/javascripts/sufia/edit_metadata.js +9 -14
- data/app/assets/javascripts/sufia/multiForm.js +67 -0
- data/app/assets/javascripts/sufia/permissions.js +92 -35
- data/app/assets/stylesheets/sufia.css.scss +1 -6
- data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -8
- data/app/assets/stylesheets/sufia/_dashboard.scss +1 -15
- data/app/assets/stylesheets/sufia/_file-listing.scss +1 -1
- data/app/assets/stylesheets/sufia/_settings.scss +0 -1
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +3 -10
- data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -8
- data/app/controllers/concerns/sufia/catalog.rb +1 -1
- data/app/controllers/concerns/sufia/controller.rb +3 -1
- data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +16 -4
- data/app/controllers/concerns/sufia/homepage_controller.rb +1 -1
- data/app/controllers/concerns/sufia/my_controller_behavior.rb +2 -2
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +3 -4
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -7
- data/app/controllers/my/collections_controller.rb +3 -4
- data/app/controllers/my/highlights_controller.rb +2 -2
- data/app/controllers/my/shares_controller.rb +3 -3
- data/app/controllers/single_use_links_controller.rb +5 -9
- data/app/controllers/single_use_links_viewer_controller.rb +4 -4
- data/app/helpers/generic_file_helper.rb +9 -0
- data/app/helpers/sufia/records_helper_behavior.rb +16 -0
- data/app/helpers/sufia/sufia_helper_behavior.rb +0 -11
- data/app/jobs/content_depositor_change_event_job.rb +1 -1
- data/app/jobs/ingest_local_file_job.rb +2 -1
- data/app/models/concerns/sufia/solr_document_behavior.rb +10 -10
- data/app/models/featured_work_list.rb +7 -9
- data/app/presenters/sufia/version_list_presenter.rb +15 -0
- data/app/presenters/sufia/version_presenter.rb +30 -0
- data/app/views/batch/_metadata.html.erb +51 -29
- data/app/views/batch/_more_metadata.html.erb +1 -1
- data/app/views/batch/edit.html.erb +10 -8
- data/app/views/batch_edits/edit.html.erb +13 -9
- data/app/views/collections/_edit_descriptions.html.erb +1 -1
- data/app/views/collections/_form.html.erb +4 -4
- data/app/views/collections/_form_for_select_collection.html.erb +1 -1
- data/app/views/collections/_show_document_list_menu.html.erb +7 -5
- data/app/views/collections/_show_document_list_row.html.erb +2 -2
- data/app/views/collections/edit.html.erb +0 -1
- data/app/views/collections/edit_fields/_description.html.erb +4 -0
- data/app/views/collections/edit_fields/_title.html.erb +3 -0
- data/app/views/collections/show.html.erb +0 -1
- data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
- data/app/views/generic_files/_descriptions.html.erb +9 -9
- data/app/views/generic_files/_field_form.html.erb +11 -25
- data/app/views/generic_files/_permission.html.erb +6 -4
- data/app/views/generic_files/_permission_form.html.erb +15 -17
- data/app/views/generic_files/_show_details.html.erb +1 -11
- data/app/views/generic_files/_versioning.html.erb +5 -5
- data/app/views/generic_files/edit.html.erb +5 -4
- data/app/views/generic_files/show.html.erb +6 -6
- data/app/views/homepage/_featured_fields.html.erb +2 -2
- data/app/views/homepage/_recent_document.html.erb +1 -1
- data/app/views/layouts/_head_tag_content.html.erb +0 -2
- data/app/views/layouts/error.html.erb +0 -1
- data/app/views/my/_index_partials/_default_group.html.erb +1 -1
- data/app/views/my/_index_partials/_list_files.html.erb +1 -1
- data/app/views/my/index.html.erb +2 -2
- data/app/views/records/_edit_field.html.erb +17 -19
- data/app/views/records/edit_fields/_default.html.erb +10 -12
- data/app/views/records/edit_fields/_description.html.erb +10 -3
- data/app/views/records/edit_fields/_resource_type.html.erb +4 -5
- data/app/views/records/edit_fields/_rights.html.erb +9 -2
- data/app/views/records/edit_fields/_suffix.html.erb +10 -0
- data/app/views/records/edit_fields/_type.html.erb +8 -2
- data/app/views/records/show_fields/_based_near.html.erb +1 -1
- data/app/views/records/show_fields/_creator.html.erb +1 -1
- data/app/views/records/show_fields/_language.html.erb +1 -1
- data/app/views/records/show_fields/_publisher.html.erb +1 -1
- data/app/views/records/show_fields/_resource_type.html.erb +1 -1
- data/app/views/records/show_fields/_subject.html.erb +1 -1
- data/app/views/records/show_fields/_tag.html.erb +1 -1
- data/app/views/single_use_links/new_download.html.erb +2 -2
- data/app/views/users/_profile.html.erb +2 -1
- data/app/views/users/_social_media_info.html.erb +20 -0
- data/app/views/users/_user_info.html.erb +3 -20
- data/app/views/users/edit.html.erb +2 -11
- data/app/views/users/show.html.erb +1 -1
- data/bin/audit_repository +1 -1
- data/config/initializers/sufia_events.rb +4 -4
- data/config/locales/sufia.en.yml +0 -5
- data/config/routes.rb +1 -1
- data/lib/generators/sufia/install_generator.rb +0 -4
- data/lib/generators/sufia/templates/catalog_controller.rb +59 -59
- data/lib/sufia.rb +1 -4
- data/lib/sufia/version.rb +1 -1
- data/spec/actors/generic_file/actor_spec.rb +67 -8
- data/spec/controllers/batch_controller_spec.rb +72 -86
- data/spec/controllers/batch_edits_controller_spec.rb +17 -19
- data/spec/controllers/catalog_controller_spec.rb +16 -24
- data/spec/controllers/collections_controller_spec.rb +47 -74
- data/spec/controllers/downloads_controller_spec.rb +40 -35
- data/spec/controllers/generic_files_controller_spec.rb +363 -428
- data/spec/controllers/homepage_controller_spec.rb +12 -9
- data/spec/controllers/mailbox_controller_spec.rb +1 -4
- data/spec/controllers/my/files_controller_spec.rb +0 -10
- data/spec/controllers/single_use_links_controller_spec.rb +28 -35
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +27 -41
- data/spec/controllers/transfers_controller_spec.rb +6 -6
- data/spec/controllers/users_controller_spec.rb +121 -124
- data/spec/factories/generic_files.rb +9 -17
- data/spec/features/browse_dashboard_files_spec.rb +8 -10
- data/spec/features/browse_files_spec.rb +12 -25
- data/spec/features/catalog_search_spec.rb +49 -49
- data/spec/features/collection_spec.rb +18 -24
- data/spec/features/contact_form_spec.rb +26 -20
- data/spec/features/ingest_upload_files_spec.rb +8 -6
- data/spec/features/ownership_transfer_spec.rb +2 -6
- data/spec/features/proxy_spec.rb +1 -1
- data/spec/features/search_spec.rb +2 -3
- data/spec/features/single_use_links_spec.rb +1 -1
- data/spec/features/users_spec.rb +1 -1
- data/spec/helpers/records_helper_spec.rb +24 -10
- data/spec/jobs/active_fedora_pid_based_job_spec.rb +1 -5
- data/spec/jobs/audit_job_spec.rb +66 -21
- data/spec/jobs/batch_update_job_spec.rb +49 -36
- data/spec/jobs/content_depositor_change_event_job_spec.rb +2 -4
- data/spec/jobs/create_derivatives_job_spec.rb +18 -19
- data/spec/jobs/event_jobs_spec.rb +17 -21
- data/spec/jobs/import_url_job_spec.rb +1 -6
- data/spec/jobs/ingest_local_file_job_spec.rb +0 -4
- data/spec/lib/sufia/breadcrumbs_spec.rb +8 -46
- data/spec/lib/sufia/id_service_spec.rb +8 -3
- data/spec/lib/sufia/user_stat_importer_spec.rb +18 -25
- data/spec/lib/sufia/writable_permissions_spec.rb +0 -4
- data/spec/models/ability_spec.rb +25 -18
- data/spec/models/batch_spec.rb +16 -45
- data/spec/models/characterization_spec.rb +1 -1
- data/spec/models/checksum_audit_log_spec.rb +51 -29
- data/spec/models/collection_spec.rb +0 -5
- data/spec/models/featured_work_list_spec.rb +2 -4
- data/spec/models/file_content_datastream_spec.rb +27 -60
- data/spec/models/file_usage_spec.rb +16 -21
- data/spec/models/fits_datastream_spec.rb +47 -2
- data/spec/models/generic_file/web_form_spec.rb +1 -1
- data/spec/models/generic_file_spec.rb +238 -735
- data/spec/models/local_authority_spec.rb +8 -13
- data/spec/models/proxy_deposit_request_spec.rb +3 -7
- data/spec/models/single_use_link_spec.rb +12 -16
- data/spec/models/solr_document_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +1 -3
- data/spec/models/user_spec.rb +47 -75
- data/spec/presenters/sufia/version_list_presenter_spec.rb +22 -0
- data/spec/presenters/sufia/version_presenter_spec.rb +51 -0
- data/spec/services/generic_file_audit_service_spec.rb +85 -0
- data/spec/services/repository_audit_service_spec.rb +18 -0
- data/spec/spec_helper.rb +26 -7
- data/spec/support/fixture_helpers.rb +2 -4
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -4
- data/spec/views/batch/edit.html.erb_spec.rb +17 -7
- data/spec/views/catalog/index.html.erb_spec.rb +8 -6
- data/spec/views/collections/_form.html.erb_spec.rb +4 -2
- data/spec/views/collections/_show_document_list.erb_spec.rb +31 -0
- data/spec/views/dashboard/index_spec.rb +2 -2
- data/spec/views/generic_file/edit.html.erb_spec.rb +20 -6
- data/spec/views/generic_file/show.html.erb_spec.rb +3 -3
- data/spec/views/users/show.html.erb_spec.rb +1 -1
- data/sufia-models/app/actors/sufia/generic_file/actor.rb +8 -10
- data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +2 -3
- data/sufia-models/app/jobs/audit_job.rb +46 -32
- data/sufia-models/app/jobs/batch_update_job.rb +9 -8
- data/sufia-models/app/jobs/import_url_job.rb +2 -2
- data/sufia-models/app/models/batch.rb +11 -12
- data/sufia-models/app/models/checksum_audit_log.rb +12 -10
- data/sufia-models/app/models/concerns/sufia/ability.rb +4 -6
- data/sufia-models/app/models/concerns/sufia/collection.rb +4 -5
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +3 -86
- data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +29 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
- data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +13 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
- data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +4 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
- data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
- data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +4 -4
- data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
- data/sufia-models/app/models/concerns/sufia/model_methods.rb +11 -9
- data/sufia-models/app/models/concerns/sufia/user.rb +11 -33
- data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -1
- data/sufia-models/app/models/datastreams/fits_datastream.rb +1 -1
- data/sufia-models/app/models/file_usage.rb +3 -3
- data/sufia-models/app/models/local_authority.rb +2 -2
- data/sufia-models/app/models/proxy_deposit_request.rb +1 -1
- data/sufia-models/app/services/sufia/generic_file_audit_service.rb +83 -0
- data/sufia-models/app/services/sufia/id_service.rb +5 -5
- data/sufia-models/app/services/sufia/noid.rb +10 -7
- data/sufia-models/app/services/sufia/repository_audit_service.rb +9 -0
- data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +31 -11
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +31 -2
- data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
- data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
- data/sufia-models/lib/sufia/models/engine.rb +13 -4
- data/sufia-models/lib/sufia/models/file_content/versions.rb +9 -11
- data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +5 -9
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia-models/lib/sufia/permissions/writable.rb +34 -16
- data/sufia-models/sufia-models.gemspec +4 -2
- data/sufia.gemspec +4 -5
- data/tasks/jetty.rake +0 -26
- data/tasks/sufia-dev.rake +14 -2
- metadata +49 -64
- data/LICENSE +0 -15
- data/app/assets/images/orcid.png +0 -0
- data/app/assets/javascripts/sufia/manage_repeating_fields.js +0 -74
- data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +0 -67
- data/app/inputs/multi_value_input.rb +0 -84
- data/app/views/records/_rights_modal.html.erb +0 -1
- data/config/initializers/simple_form.rb +0 -167
- data/config/initializers/simple_form_bootstrap.rb +0 -137
- data/config/locales/simple_form.en.yml +0 -31
- data/fedora_conf/conf/development/fedora.fcfg +0 -946
- data/fedora_conf/conf/test/fedora.fcfg +0 -946
- data/spec/models/generic_file/reload_on_save_spec.rb +0 -25
- data/spec/models/generic_file_rdf_datastream_spec.rb +0 -12
- data/spec/models/properties_datastream_spec.rb +0 -41
- data/spec/views/generic_file/_permission_form.html.erb_spec.rb +0 -19
- data/sufia-models/app/models/concerns/sufia/generic_file/audit.rb +0 -116
- data/sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
- data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
- data/sufia-models/app/models/datastreams/batch_rdf_datastream.rb +0 -6
- data/sufia-models/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
- data/sufia-models/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
- data/sufia-models/app/models/datastreams/properties_datastream.rb +0 -4
- data/sufia-models/app/models/sufia/orcid_validator.rb +0 -8
- data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
- data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
- 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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
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
|
data/spec/features/proxy_spec.rb
CHANGED
@@ -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'
|
4
|
-
|
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.
|
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
|
data/spec/features/users_spec.rb
CHANGED
@@ -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
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/spec/jobs/audit_job_spec.rb
CHANGED
@@ -1,31 +1,76 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe AuditJob do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
12
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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',
|
29
|
-
|
30
|
-
|
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,
|
38
|
-
expect_any_instance_of(User).to receive(:can?).with(:edit,
|
39
|
-
BatchUpdateJob.new(
|
40
|
-
expect(
|
41
|
-
expect(
|
42
|
-
expect(
|
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
|
-
|
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,
|
50
|
-
expect_any_instance_of(User).to receive(:can?).with(:edit,
|
51
|
-
expect(ContentUpdateEventJob).to receive(:new).with(
|
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(
|
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(
|
56
|
-
expect(
|
57
|
-
expect(
|
58
|
-
expect(
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
110
|
+
expect(derivative.mime_type).to eq('video/webm')
|
112
111
|
|
113
|
-
derivative2 = reloaded.
|
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.
|
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.
|
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.
|
132
|
+
expect(derivative.mime_type).to eq('audio/mpeg')
|
134
133
|
|
135
|
-
derivative2 = reloaded.
|
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.
|
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.
|
152
|
+
derivative = reloaded.attached_files['mp3']
|
154
153
|
expect(derivative.content.size).to eq(reloaded.content.content.size)
|
155
|
-
expect(derivative.
|
154
|
+
expect(derivative.mime_type).to eq('audio/mpeg')
|
156
155
|
|
157
|
-
derivative2 = reloaded.
|
156
|
+
derivative2 = reloaded.attached_files['ogg']
|
158
157
|
expect(derivative2.content).not_to be_nil
|
159
|
-
expect(derivative2.
|
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.
|
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.
|
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.
|
181
|
+
expect(derivative2.mime_type).to eq('audio/ogg')
|
183
182
|
end
|
184
183
|
end
|
185
184
|
end
|