sufia 4.0.1 → 4.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.
- checksums.yaml +4 -4
- data/History.md +247 -215
- data/README.md +7 -3
- data/SUFIA_VERSION +1 -1
- data/app/assets/javascripts/sufia.js +5 -2
- data/app/assets/javascripts/sufia/proxy_rights.js +68 -0
- data/app/assets/javascripts/sufia/transfers.js +3 -0
- data/app/assets/javascripts/sufia/user_search.js +31 -0
- data/app/assets/stylesheets/jquery-ui.css +17 -17
- data/app/assets/stylesheets/sufia.css.scss +3 -2
- data/app/assets/stylesheets/sufia/_proxy-rights.scss +10 -0
- data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +22 -23
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +41 -0
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +1 -0
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +76 -0
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +9 -11
- data/app/controllers/depositors_controller.rb +3 -0
- data/app/controllers/transfers_controller.rb +3 -0
- data/app/helpers/sufia/dashboard_helper_behavior.rb +15 -0
- data/app/helpers/sufia/sufia_helper_behavior.rb +24 -2
- data/app/jobs/content_depositor_change_event_job.rb +50 -0
- data/app/views/dashboard/_index_partials/_contents.html.erb +18 -0
- data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +23 -0
- data/app/views/dashboard/_index_partials/_transfers.html.erb +14 -0
- data/app/views/generic_files/proxy.html.erb +5 -0
- data/app/views/generic_files/upload/_form.html.erb +7 -2
- data/app/views/my/_action_menu.html.erb +3 -1
- data/app/views/records/edit_fields/_default.html.erb +1 -1
- data/app/views/transfers/_received.html.erb +58 -0
- data/app/views/transfers/_sent.html.erb +38 -0
- data/app/views/transfers/index.html.erb +7 -0
- data/app/views/transfers/new.html.erb +23 -0
- data/app/views/users/_proxies.html.erb +8 -0
- data/app/views/users/_user_util_links_extra.html.erb +1 -0
- data/app/views/users/edit.html.erb +6 -1
- data/config/locales/sufia.en.yml +9 -4
- data/config/routes.rb +14 -3
- data/lib/sufia.rb +7 -5
- data/lib/sufia/version.rb +1 -1
- data/spec/controllers/authorities_controller_spec.rb +6 -6
- data/spec/controllers/batch_controller_spec.rb +29 -29
- data/spec/controllers/batch_edits_controller_spec.rb +7 -7
- data/spec/controllers/catalog_controller_spec.rb +9 -9
- data/spec/controllers/collections_controller_spec.rb +28 -28
- data/spec/controllers/content_blocks_controller_spec.rb +3 -3
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/depositors_controller_spec.rb +50 -0
- data/spec/controllers/downloads_controller_spec.rb +22 -22
- data/spec/controllers/featured_work_lists_controller_spec.rb +1 -1
- data/spec/controllers/featured_works_controller_spec.rb +1 -1
- data/spec/controllers/generic_files_controller_spec.rb +98 -90
- data/spec/controllers/homepage_controller_spec.rb +1 -1
- data/spec/controllers/mailbox_controller_spec.rb +10 -10
- data/spec/controllers/my/collections_controller_spec.rb +1 -1
- data/spec/controllers/my/files_controller_spec.rb +1 -1
- data/spec/controllers/my/highlights_controller_spec.rb +1 -1
- data/spec/controllers/my/shares_controller_spec.rb +1 -1
- data/spec/controllers/my_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/single_use_links_controller_spec.rb +46 -50
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +16 -16
- data/spec/controllers/static_controller_spec.rb +9 -9
- data/spec/controllers/tinymce_assets_controller_spec.rb +1 -1
- data/spec/controllers/transfers_controller_spec.rb +212 -0
- data/spec/controllers/users_controller_spec.rb +1 -1
- data/spec/factories/generic_files.rb +4 -4
- data/spec/factories/proxy_deposit_requests.rb +6 -0
- data/spec/features/browse_dashboard_files_spec.rb +25 -36
- data/spec/features/browse_files_spec.rb +18 -13
- data/spec/features/catalog_search_spec.rb +3 -6
- data/spec/features/cloud_upload_spec.rb +5 -7
- data/spec/features/collection_spec.rb +28 -35
- data/spec/features/contact_form_spec.rb +24 -24
- data/spec/features/display_dashboard_spec.rb +11 -11
- data/spec/features/ingest_upload_files_spec.rb +10 -10
- data/spec/features/notifications_spec.rb +11 -11
- data/spec/features/ownership_transfer_spec.rb +111 -0
- data/spec/features/proxy_spec.rb +52 -0
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/single_use_links_spec.rb +28 -18
- data/spec/features/users_spec.rb +3 -3
- data/spec/helpers/batch_edits_helper_spec.rb +1 -1
- data/spec/helpers/content_block_helper_spec.rb +1 -1
- data/spec/helpers/dashboard_helper_spec.rb +1 -1
- data/spec/helpers/generic_file_helper_spec.rb +1 -1
- data/spec/helpers/records_helper_spec.rb +1 -1
- data/spec/helpers/sufia_helper_spec.rb +8 -8
- data/spec/helpers/trophy_helper_spec.rb +1 -1
- data/spec/jobs/audit_job_spec.rb +5 -5
- data/spec/jobs/batch_update_job_spec.rb +14 -14
- data/spec/jobs/content_depositor_change_event_job_spec.rb +22 -0
- data/spec/jobs/event_jobs_spec.rb +104 -104
- data/spec/jobs/import_url_job_spec.rb +2 -2
- data/spec/jobs/ingest_local_file_job_spec.rb +1 -1
- data/spec/lib/sufia/breadcrumbs_spec.rb +3 -3
- data/spec/lib/sufia/id_service_spec.rb +1 -1
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +4 -4
- data/spec/models/ability_spec.rb +59 -15
- data/spec/models/batch_spec.rb +16 -16
- data/spec/models/characterization_spec.rb +1 -1
- data/spec/models/checksum_audit_log_spec.rb +34 -26
- data/spec/models/collection_spec.rb +1 -1
- data/spec/models/download_spec.rb +1 -1
- data/spec/models/featured_work_list_spec.rb +1 -1
- data/spec/models/featured_work_spec.rb +15 -4
- data/spec/models/file_content_datastream_spec.rb +14 -14
- data/spec/models/file_usage_spec.rb +1 -1
- data/spec/models/fits_datastream_spec.rb +1 -1
- data/spec/models/generic_file/reload_on_save_spec.rb +4 -4
- data/spec/models/generic_file/visibility_spec.rb +1 -1
- data/spec/models/generic_file/web_form_spec.rb +6 -5
- data/spec/models/generic_file_rdf_datastream_spec.rb +1 -1
- data/spec/models/generic_file_spec.rb +254 -220
- data/spec/models/geo_names_resource_spec.rb +2 -2
- data/spec/models/local_authority_spec.rb +60 -59
- data/spec/models/pageview_spec.rb +1 -1
- data/spec/models/properties_datastream_spec.rb +29 -10
- data/spec/models/proxy_deposit_request_spec.rb +107 -0
- data/spec/models/single_use_link_spec.rb +13 -13
- data/spec/models/solr_document_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +6 -6
- data/spec/models/user_spec.rb +38 -22
- data/spec/routing/featured_works_route_spec.rb +1 -1
- data/spec/routing/ownership_transfers_route_spec.rb +45 -0
- data/spec/routing/route_spec.rb +42 -42
- data/spec/services/noid_spec.rb +2 -2
- data/spec/spec_helper.rb +10 -5
- data/spec/support/cleaner.rb +12 -0
- data/spec/support/features.rb +5 -0
- data/spec/support/features/session_helpers.rb +3 -17
- data/spec/support/locations.rb +36 -0
- data/spec/support/poltergeist.rb +11 -0
- data/spec/support/proxies.rb +14 -0
- data/spec/support/selectors.rb +122 -0
- data/spec/views/batch/edit.html.erb_spec.rb +1 -1
- data/spec/views/batch_edits/check_all_spec.rb +4 -4
- data/spec/views/catalog/index.html.erb_spec.rb +1 -1
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +1 -1
- data/spec/views/collections/_form.html.erb_spec.rb +3 -1
- data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
- data/spec/views/dashboard/index_spec.rb +3 -6
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
- data/spec/views/my/facet.html.erb_spec.rb +2 -2
- data/spec/views/users/_follower_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_following_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_notify_number.html.erb_spec.rb +1 -1
- data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
- data/spec/views/users/index.html.erb_spec.rb +2 -2
- data/spec/views/users/show.html.erb_spec.rb +2 -2
- data/sufia-models/app/models/concerns/sufia/ability.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +1 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
- data/sufia-models/app/models/concerns/sufia/user.rb +9 -0
- data/sufia-models/app/models/proxy_deposit_request.rb +85 -0
- data/sufia-models/app/models/proxy_deposit_rights.rb +4 -0
- data/sufia-models/app/models/sufia/avatar_uploader.rb +2 -3
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +9 -1
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +53 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
- data/sufia-models/lib/sufia/models/engine.rb +1 -1
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia.gemspec +2 -1
- data/tasks/sufia-dev.rake +5 -0
- metadata +82 -6
- data/tasks/sufia-db.rake +0 -21
data/spec/models/ability_spec.rb
CHANGED
|
@@ -1,31 +1,75 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
require 'cancan/matchers'
|
|
3
3
|
|
|
4
|
-
describe Sufia::Ability do
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
describe Sufia::Ability, :type => :model do
|
|
7
5
|
describe "a user with no roles" do
|
|
8
6
|
let(:user) { nil }
|
|
9
7
|
subject { Ability.new(user) }
|
|
10
|
-
it {
|
|
11
|
-
it {
|
|
12
|
-
it {
|
|
8
|
+
it { is_expected.not_to be_able_to(:create, GenericFile) }
|
|
9
|
+
it { is_expected.not_to be_able_to(:create, TinymceAsset) }
|
|
10
|
+
it { is_expected.not_to be_able_to(:update, ContentBlock) }
|
|
13
11
|
end
|
|
14
12
|
|
|
15
13
|
describe "a registered user" do
|
|
16
|
-
let(:user) { FactoryGirl.
|
|
14
|
+
let(:user) { FactoryGirl.find_or_create(:archivist) }
|
|
17
15
|
subject { Ability.new(user) }
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
16
|
+
it { is_expected.to be_able_to(:create, GenericFile) }
|
|
17
|
+
it { is_expected.not_to be_able_to(:create, TinymceAsset) }
|
|
18
|
+
it { is_expected.not_to be_able_to(:update, ContentBlock) }
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
describe "a user in the admin group" do
|
|
24
|
-
let(:user) { FactoryGirl.
|
|
25
|
-
before { user.
|
|
22
|
+
let(:user) { FactoryGirl.find_or_create(:archivist) }
|
|
23
|
+
before { allow(user).to receive_messages(groups: ['admin', 'registered']) }
|
|
24
|
+
subject { Ability.new(user) }
|
|
25
|
+
it { is_expected.to be_able_to(:create, GenericFile) }
|
|
26
|
+
it { is_expected.to be_able_to(:create, TinymceAsset) }
|
|
27
|
+
it { is_expected.to be_able_to(:update, ContentBlock) }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "proxies and transfers" do
|
|
31
|
+
let(:sender) { FactoryGirl.find_or_create(:jill) }
|
|
32
|
+
let(:user) { FactoryGirl.find_or_create(:archivist) }
|
|
33
|
+
let(:file) do
|
|
34
|
+
GenericFile.new.tap do|file|
|
|
35
|
+
file.apply_depositor_metadata(sender.user_key)
|
|
36
|
+
file.save!
|
|
37
|
+
end
|
|
38
|
+
end
|
|
26
39
|
subject { Ability.new(user) }
|
|
27
|
-
it {
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
it { is_expected.not_to be_able_to(:transfer, file.pid) }
|
|
41
|
+
|
|
42
|
+
context "with a ProxyDepositRequest for a file they have deposited" do
|
|
43
|
+
subject { Ability.new(sender) }
|
|
44
|
+
it { is_expected.to be_able_to(:transfer, file.pid) }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "with a ProxyDepositRequest that they receive" do
|
|
48
|
+
let(:request) { ProxyDepositRequest.create!(pid: file.pid, receiving_user: user, sending_user: sender) }
|
|
49
|
+
it { is_expected.to be_able_to(:accept, request) }
|
|
50
|
+
it { is_expected.to be_able_to(:reject, request) }
|
|
51
|
+
it { is_expected.not_to be_able_to(:destroy, request) }
|
|
52
|
+
|
|
53
|
+
context "and the request has already been accepted" do
|
|
54
|
+
let(:request) { ProxyDepositRequest.create!(pid: file.pid, receiving_user: user, sending_user: sender, status: 'accepted') }
|
|
55
|
+
it { is_expected.not_to be_able_to(:accept, request) }
|
|
56
|
+
it { is_expected.not_to be_able_to(:reject, request) }
|
|
57
|
+
it { is_expected.not_to be_able_to(:destroy, request) }
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "with a ProxyDepositRequest they are the sender of" do
|
|
62
|
+
let(:request) { ProxyDepositRequest.create!(pid: file.pid, receiving_user: sender, sending_user: user) }
|
|
63
|
+
it { is_expected.not_to be_able_to(:accept, request) }
|
|
64
|
+
it { is_expected.not_to be_able_to(:reject, request) }
|
|
65
|
+
it { is_expected.to be_able_to(:destroy, request) }
|
|
66
|
+
|
|
67
|
+
context "and the request has already been accepted" do
|
|
68
|
+
let(:request) { ProxyDepositRequest.create!(pid: file.pid, receiving_user: sender, sending_user: user, status: 'accepted') }
|
|
69
|
+
it { is_expected.not_to be_able_to(:accept, request) }
|
|
70
|
+
it { is_expected.not_to be_able_to(:reject, request) }
|
|
71
|
+
it { is_expected.not_to be_able_to(:destroy, request) }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
30
74
|
end
|
|
31
75
|
end
|
data/spec/models/batch_spec.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Batch do
|
|
3
|
+
describe Batch, :type => :model do
|
|
4
4
|
before(:all) do
|
|
5
5
|
@user = FactoryGirl.find_or_create(:jill)
|
|
6
6
|
@file = GenericFile.new
|
|
@@ -16,22 +16,22 @@ describe Batch do
|
|
|
16
16
|
@batch.delete
|
|
17
17
|
end
|
|
18
18
|
it "should have rightsMetadata" do
|
|
19
|
-
@batch.rightsMetadata.
|
|
19
|
+
expect(@batch.rightsMetadata).to be_instance_of Hydra::Datastream::RightsMetadata
|
|
20
20
|
end
|
|
21
21
|
it "should have dc desc metadata" do
|
|
22
|
-
@batch.descMetadata.
|
|
22
|
+
expect(@batch.descMetadata).to be_kind_of BatchRdfDatastream
|
|
23
23
|
end
|
|
24
24
|
it "should belong to testuser" do
|
|
25
|
-
@batch.creator.
|
|
25
|
+
expect(@batch.creator).to eq([@user.user_key])
|
|
26
26
|
end
|
|
27
27
|
it "should be titled 'test collection'" do
|
|
28
|
-
@batch.title.
|
|
28
|
+
expect(@batch.title).to eq(["test collection"])
|
|
29
29
|
end
|
|
30
30
|
it "should have generic_files defined" do
|
|
31
|
-
@batch.
|
|
31
|
+
expect(@batch).to respond_to(:generic_files)
|
|
32
32
|
end
|
|
33
33
|
it "should contain one generic file" do
|
|
34
|
-
@batch.part.
|
|
34
|
+
expect(@batch.part).to eq([@file.pid])
|
|
35
35
|
end
|
|
36
36
|
it "should be able to have more than one file" do
|
|
37
37
|
gf = GenericFile.new
|
|
@@ -39,28 +39,28 @@ describe Batch do
|
|
|
39
39
|
gf.save
|
|
40
40
|
@batch.part << gf.pid
|
|
41
41
|
@batch.save
|
|
42
|
-
@batch.part.
|
|
42
|
+
expect(@batch.part).to eq([@file.pid, gf.pid])
|
|
43
43
|
gf.delete
|
|
44
44
|
end
|
|
45
45
|
it "should support to_solr" do
|
|
46
|
-
@batch.to_solr.
|
|
47
|
-
@batch.to_solr["batch__part_t"].
|
|
48
|
-
@batch.to_solr["batch__title_t"].
|
|
49
|
-
@batch.to_solr["batch__creator_t"].
|
|
46
|
+
expect(@batch.to_solr).not_to be_nil
|
|
47
|
+
expect(@batch.to_solr["batch__part_t"]).to be_nil
|
|
48
|
+
expect(@batch.to_solr["batch__title_t"]).to be_nil
|
|
49
|
+
expect(@batch.to_solr["batch__creator_t"]).to be_nil
|
|
50
50
|
end
|
|
51
51
|
describe "find_or_create" do
|
|
52
52
|
describe "when the object exists" do
|
|
53
53
|
it "should find batch instead of creating" do
|
|
54
|
-
Batch.
|
|
54
|
+
expect(Batch).to receive(:create).never
|
|
55
55
|
@b2 = Batch.find_or_create( @batch.pid)
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
describe "when the object does not exist" do
|
|
59
59
|
it "should create" do
|
|
60
|
-
|
|
61
|
-
Batch.
|
|
60
|
+
expect {Batch.find("batch:123")}.to raise_error(ActiveFedora::ObjectNotFoundError)
|
|
61
|
+
expect(Batch).to receive(:create).once.and_return("the batch")
|
|
62
62
|
@b2 = Batch.find_or_create( "batch:123")
|
|
63
|
-
@b2.
|
|
63
|
+
expect(@b2).to eq("the batch")
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -1,35 +1,43 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe ChecksumAuditLog do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
describe ChecksumAuditLog, :type => :model do
|
|
4
|
+
let(:f) do
|
|
5
|
+
GenericFile.new.tap do |gf|
|
|
6
|
+
gf.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
|
|
7
|
+
gf.apply_depositor_metadata('mjg36')
|
|
8
|
+
gf.save!
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
let(:version) { f.datastreams['content'].versions.first }
|
|
12
|
+
let(:old) do
|
|
13
|
+
ChecksumAuditLog.create(pid: f.pid, dsid: version.dsid, version: version.versionID, pass: 1, created_at: 2.minutes.ago)
|
|
14
|
+
end
|
|
15
|
+
let(:new) do
|
|
16
|
+
ChecksumAuditLog.create(pid: f.pid, dsid: version.dsid, version: version.versionID, pass: 0, created_at: 1.minute.ago)
|
|
12
17
|
end
|
|
13
18
|
after(:all) do
|
|
14
|
-
|
|
15
|
-
ChecksumAuditLog.all.each(&:delete)
|
|
19
|
+
ChecksumAuditLog.destroy_all
|
|
16
20
|
end
|
|
17
|
-
before
|
|
18
|
-
GenericFile.
|
|
21
|
+
before do
|
|
22
|
+
allow_any_instance_of(GenericFile).to receive(:characterize).and_return(true) # stub out characterization so it does not get audited
|
|
19
23
|
end
|
|
20
|
-
it "
|
|
21
|
-
|
|
24
|
+
it "returns a list of logs for this datastream sorted by date descending" do
|
|
25
|
+
expect(f.logs(version.dsid)).to eq [new, old]
|
|
22
26
|
end
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
describe "history pruning" do
|
|
28
|
+
before do
|
|
29
|
+
@success1 = ChecksumAuditLog.create(pid: f.pid, dsid: version.dsid, version: version.versionID, pass: 1)
|
|
30
|
+
ChecksumAuditLog.prune_history(version)
|
|
31
|
+
@success2 = ChecksumAuditLog.create(pid: f.pid, dsid: version.dsid, version: version.versionID, pass: 1)
|
|
32
|
+
ChecksumAuditLog.prune_history(version)
|
|
33
|
+
@success3 = ChecksumAuditLog.create(pid: f.pid, dsid: version.dsid, version: version.versionID, pass: 1)
|
|
34
|
+
ChecksumAuditLog.prune_history(version)
|
|
35
|
+
end
|
|
36
|
+
it "prunes history for a datastream" do
|
|
37
|
+
expect { ChecksumAuditLog.find(@success2.id)}.to raise_exception ActiveRecord::RecordNotFound
|
|
38
|
+
expect { ChecksumAuditLog.find(@success3.id)}.to raise_exception ActiveRecord::RecordNotFound
|
|
39
|
+
expect(ChecksumAuditLog.find(@success1.id)).not_to be_nil
|
|
40
|
+
expect(f.logs(version.dsid)).to eq [@success1, new, old]
|
|
41
|
+
end
|
|
34
42
|
end
|
|
35
43
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe FeaturedWork do
|
|
3
|
+
describe FeaturedWork, :type => :model do
|
|
4
4
|
let(:feature) { FeaturedWork.create(generic_file_id:"99") }
|
|
5
5
|
|
|
6
6
|
it "should have a file" do
|
|
@@ -21,7 +21,10 @@ describe FeaturedWork do
|
|
|
21
21
|
describe "can_create_another?" do
|
|
22
22
|
subject { FeaturedWork }
|
|
23
23
|
context "when none exist" do
|
|
24
|
-
|
|
24
|
+
describe '#can_create_another?' do
|
|
25
|
+
subject { super().can_create_another? }
|
|
26
|
+
it { is_expected.to be true }
|
|
27
|
+
end
|
|
25
28
|
end
|
|
26
29
|
context "when five exist" do
|
|
27
30
|
before do
|
|
@@ -29,13 +32,21 @@ describe FeaturedWork do
|
|
|
29
32
|
FeaturedWork.create(generic_file_id:n.to_s)
|
|
30
33
|
end
|
|
31
34
|
end
|
|
32
|
-
|
|
35
|
+
|
|
36
|
+
describe '#can_create_another?' do
|
|
37
|
+
subject { super().can_create_another? }
|
|
38
|
+
it { is_expected.to be false }
|
|
39
|
+
end
|
|
33
40
|
end
|
|
34
41
|
end
|
|
35
42
|
|
|
36
43
|
describe "#order" do
|
|
37
44
|
subject { FeaturedWork.new(order: 5) }
|
|
38
|
-
|
|
45
|
+
|
|
46
|
+
describe '#order' do
|
|
47
|
+
subject { super().order }
|
|
48
|
+
it {is_expected.to eq 5 }
|
|
49
|
+
end
|
|
39
50
|
end
|
|
40
51
|
end
|
|
41
52
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe FileContentDatastream do
|
|
3
|
+
describe FileContentDatastream, :type => :model do
|
|
4
4
|
describe "version control" do
|
|
5
5
|
before do
|
|
6
6
|
f = GenericFile.new
|
|
@@ -16,16 +16,16 @@ describe FileContentDatastream do
|
|
|
16
16
|
@file.content.versions.count == 1
|
|
17
17
|
end
|
|
18
18
|
it "should return the expected version ID" do
|
|
19
|
-
@file.content.versions.first.versionID.
|
|
19
|
+
expect(@file.content.versions.first.versionID).to eq("content.0")
|
|
20
20
|
end
|
|
21
21
|
it "should support latest_version" do
|
|
22
|
-
@file.content.latest_version.versionID.
|
|
22
|
+
expect(@file.content.latest_version.versionID).to eq("content.0")
|
|
23
23
|
end
|
|
24
24
|
it "should return the same version via get_version" do
|
|
25
|
-
@file.content.get_version("content.0").versionID.
|
|
25
|
+
expect(@file.content.get_version("content.0").versionID).to eq(@file.content.latest_version.versionID)
|
|
26
26
|
end
|
|
27
27
|
it "should not barf when a garbage ID is provided to get_version" do
|
|
28
|
-
@file.content.get_version("foobar").
|
|
28
|
+
expect(@file.content.get_version("foobar")).to be_nil
|
|
29
29
|
end
|
|
30
30
|
describe "add a version" do
|
|
31
31
|
before do
|
|
@@ -36,36 +36,36 @@ describe FileContentDatastream do
|
|
|
36
36
|
@file.content.versions.count == 2
|
|
37
37
|
end
|
|
38
38
|
it "should return the newer version via latest_version" do
|
|
39
|
-
@file.content.versions.first.versionID.
|
|
39
|
+
expect(@file.content.versions.first.versionID).to eq("content.1")
|
|
40
40
|
end
|
|
41
41
|
it "should return the same version via get_version" do
|
|
42
|
-
@file.content.get_version("content.1").versionID.
|
|
42
|
+
expect(@file.content.get_version("content.1").versionID).to eq(@file.content.latest_version.versionID)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
describe "extract_metadata" do
|
|
47
47
|
before do
|
|
48
48
|
@subject = FileContentDatastream.new(nil, 'content')
|
|
49
|
-
@subject.
|
|
50
|
-
@subject.
|
|
49
|
+
allow(@subject).to receive_messages(pid: 'my_pid')
|
|
50
|
+
allow(@subject).to receive_messages(dsVersionID: 'content.7')
|
|
51
51
|
end
|
|
52
52
|
it "should return an xml document", unless: $in_travis do
|
|
53
53
|
f = File.new(fixture_path + '/world.png', 'rb')
|
|
54
54
|
@subject.content = f.read
|
|
55
55
|
xml = @subject.extract_metadata
|
|
56
56
|
doc = Nokogiri::XML.parse(xml)
|
|
57
|
-
doc.root.xpath('//ns:imageWidth/text()', {'ns'=>'http://hul.harvard.edu/ois/xml/ns/fits/fits_output'}).inner_text.
|
|
57
|
+
expect(doc.root.xpath('//ns:imageWidth/text()', {'ns'=>'http://hul.harvard.edu/ois/xml/ns/fits/fits_output'}).inner_text).to eq('50')
|
|
58
58
|
end
|
|
59
59
|
it "should return expected results when invoked via HTTP", unless: $in_travis do
|
|
60
60
|
f = ActionDispatch::Http::UploadedFile.new(tempfile: File.new(fixture_path + '/world.png'),
|
|
61
61
|
filename: 'world.png')
|
|
62
62
|
content = double("file")
|
|
63
|
-
content.
|
|
64
|
-
content.
|
|
65
|
-
@subject.
|
|
63
|
+
allow(content).to receive_messages(read: f.read)
|
|
64
|
+
allow(content).to receive_messages(rewind: f.rewind)
|
|
65
|
+
allow(@subject).to receive(:content).and_return(f)
|
|
66
66
|
xml = @subject.extract_metadata
|
|
67
67
|
doc = Nokogiri::XML.parse(xml)
|
|
68
|
-
doc.root.xpath('//ns:identity/@mimetype', {'ns'=>'http://hul.harvard.edu/ois/xml/ns/fits/fits_output'}).first.value.
|
|
68
|
+
expect(doc.root.xpath('//ns:identity/@mimetype', {'ns'=>'http://hul.harvard.edu/ois/xml/ns/fits/fits_output'}).first.value).to eq('image/png')
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
describe "changed?" do
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Sufia::GenericFile::ReloadOnSave do
|
|
3
|
+
describe Sufia::GenericFile::ReloadOnSave, :type => :model do
|
|
4
4
|
let(:user) { FactoryGirl.find_or_create(:jill) }
|
|
5
5
|
let(:file) { GenericFile.new.tap { |f| f.apply_depositor_metadata(user); f.save! } }
|
|
6
6
|
|
|
7
7
|
it 'defaults to not call reload' do
|
|
8
|
-
file.
|
|
8
|
+
expect(file).not_to receive(:reload)
|
|
9
9
|
file.save
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
it 'can be set to call reload' do
|
|
13
13
|
file.reload_on_save = true
|
|
14
|
-
file.
|
|
14
|
+
expect(file).to receive(:reload)
|
|
15
15
|
file.save
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it 'allows reload to be turned off and on' do
|
|
19
19
|
file.reload_on_save = true
|
|
20
|
-
file.
|
|
20
|
+
expect(file).to receive(:reload).once
|
|
21
21
|
file.save
|
|
22
22
|
file.reload_on_save = false
|
|
23
23
|
file.save
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe GenericFile do
|
|
3
|
+
describe GenericFile, :type => :model do
|
|
4
4
|
before do
|
|
5
5
|
subject.apply_depositor_metadata('jcoyne')
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
describe "terms_for_editing" do
|
|
9
9
|
it "should return a list" do
|
|
10
|
-
subject.terms_for_editing.
|
|
11
|
-
:rights, :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url]
|
|
10
|
+
expect(subject.terms_for_editing).to eq([:resource_type, :title, :creator, :contributor, :description, :tag,
|
|
11
|
+
:rights, :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url])
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
describe "terms_for_display" do
|
|
@@ -22,13 +22,14 @@ describe GenericFile do
|
|
|
22
22
|
|
|
23
23
|
describe "accessible_attributes" do
|
|
24
24
|
it "should have a list" do
|
|
25
|
-
subject.accessible_attributes.
|
|
25
|
+
expect(subject.accessible_attributes).to include(:part_of, :resource_type, :title, :creator, :contributor, :description,
|
|
26
26
|
:tag, :rights, :publisher, :date_created, :subject, :language, :identifier, :based_near, :related_url, :permissions)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it "should sanitize them" do
|
|
30
|
-
subject.sanitize_attributes({'part_of' => 'A book', 'something_crazy' => "get's thrown out"}).
|
|
30
|
+
expect(subject.sanitize_attributes({'part_of' => 'A book', 'something_crazy' => "get's thrown out"})).to eq(
|
|
31
31
|
{'part_of' => 'A book'}
|
|
32
|
+
)
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
end
|