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,15 +13,11 @@ describe LocalAuthority, :type => :model do
|
|
13
13
|
before :all do
|
14
14
|
class MyTestRdfDatastream; end
|
15
15
|
end
|
16
|
+
|
16
17
|
after :all do
|
17
18
|
Object.send(:remove_const, :MyTestRdfDatastream)
|
18
19
|
end
|
19
|
-
|
20
|
-
DomainTerm.destroy_all
|
21
|
-
LocalAuthority.destroy_all
|
22
|
-
LocalAuthorityEntry.destroy_all
|
23
|
-
end
|
24
|
-
|
20
|
+
|
25
21
|
it "should harvest an ntriples RDF vocab" do
|
26
22
|
harvest_nt
|
27
23
|
expect(LocalAuthority.count).to eq(1)
|
@@ -30,7 +26,7 @@ describe LocalAuthority, :type => :model do
|
|
30
26
|
it "should harvest an RDF/XML vocab (w/ an alt predicate)" do
|
31
27
|
LocalAuthority.harvest_rdf("langs", [fixture_path + '/lexvo.rdf'],
|
32
28
|
format: 'rdfxml',
|
33
|
-
predicate: RDF::URI("http://www.w3.org/2008/05/skos#prefLabel"))
|
29
|
+
predicate: ::RDF::URI("http://www.w3.org/2008/05/skos#prefLabel"))
|
34
30
|
expect(LocalAuthority.count).to eq(1)
|
35
31
|
expect(LocalAuthorityEntry.count).to eq(35)
|
36
32
|
end
|
@@ -41,9 +37,9 @@ describe LocalAuthority, :type => :model do
|
|
41
37
|
expect(LocalAuthorityEntry.where(local_authority_id: auth.id).first.uri).to start_with('http://sws.geonames.org/')
|
42
38
|
expect(LocalAuthorityEntry.count).to eq(149)
|
43
39
|
end
|
44
|
-
|
40
|
+
|
45
41
|
describe "when vocabs are harvested" do
|
46
|
-
|
42
|
+
|
47
43
|
let(:num_auths) { LocalAuthority.count }
|
48
44
|
let(:num_entries) { LocalAuthorityEntry.count }
|
49
45
|
|
@@ -70,9 +66,9 @@ describe LocalAuthority, :type => :model do
|
|
70
66
|
LocalAuthority.register_vocabulary(MyTestRdfDatastream, "geographic", "geo")
|
71
67
|
expect(DomainTerm.count).to eq(1)
|
72
68
|
end
|
73
|
-
|
69
|
+
|
74
70
|
describe "when vocabs are registered" do
|
75
|
-
|
71
|
+
|
76
72
|
before do
|
77
73
|
LocalAuthority.register_vocabulary(MyTestRdfDatastream, "geographic", "geo")
|
78
74
|
LocalAuthority.register_vocabulary(MyTestRdfDatastream, "genre", "genres")
|
@@ -81,7 +77,7 @@ describe LocalAuthority, :type => :model do
|
|
81
77
|
it "should have some doamin terms" do
|
82
78
|
expect(DomainTerm.count).to eq(2)
|
83
79
|
end
|
84
|
-
|
80
|
+
|
85
81
|
it "should return nil for empty queries" do
|
86
82
|
expect(LocalAuthority.entries_by_term("my_test", "geographic", "")).to be_nil
|
87
83
|
end
|
@@ -97,7 +93,6 @@ describe LocalAuthority, :type => :model do
|
|
97
93
|
hits = LocalAuthorityEntry.where("local_authority_id in (?)", authorities).where("label like ?", "A%").select("label, uri").limit(25)
|
98
94
|
expect(LocalAuthority.entries_by_term("my_tests", "genre", "A").count).to eq(6)
|
99
95
|
end
|
100
|
-
|
101
96
|
end
|
102
97
|
end
|
103
98
|
end
|
@@ -13,14 +13,10 @@ describe ProxyDepositRequest, type: :model do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
subject do
|
16
|
-
ProxyDepositRequest.new(pid: file.
|
16
|
+
ProxyDepositRequest.new(pid: file.id, sending_user: sender,
|
17
17
|
receiving_user: receiver, sender_comment: "please take this")
|
18
18
|
end
|
19
19
|
|
20
|
-
after do
|
21
|
-
subject.destroy if subject.persisted?
|
22
|
-
end
|
23
|
-
|
24
20
|
its(:status) { is_expected.to eq 'pending' }
|
25
21
|
it { is_expected.to be_pending }
|
26
22
|
its(:fulfillment_date) { is_expected.to be_nil }
|
@@ -82,7 +78,7 @@ describe ProxyDepositRequest, type: :model do
|
|
82
78
|
subject.transfer_to = receiver.user_key
|
83
79
|
subject.save!
|
84
80
|
proxy_request = receiver.proxy_deposit_requests.first
|
85
|
-
expect(proxy_request.pid).to eq(file.
|
81
|
+
expect(proxy_request.pid).to eq(file.id)
|
86
82
|
expect(proxy_request.sending_user).to eq(sender)
|
87
83
|
end
|
88
84
|
end
|
@@ -98,7 +94,7 @@ describe ProxyDepositRequest, type: :model do
|
|
98
94
|
context 'when the file is already being transferred' do
|
99
95
|
it 'raises an error' do
|
100
96
|
subject.save!
|
101
|
-
subject2 = ProxyDepositRequest.new(pid: file.
|
97
|
+
subject2 = ProxyDepositRequest.new(pid: file.id, sending_user: sender, receiving_user: receiver2, sender_comment: 'please take this')
|
102
98
|
expect(subject2).not_to be_valid
|
103
99
|
expect(subject2.errors[:open_transfer]).to eq(['must close open transfer on the file before creating a new one'])
|
104
100
|
end
|
@@ -1,16 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe SingleUseLink
|
4
|
-
before
|
3
|
+
describe SingleUseLink do
|
4
|
+
before do
|
5
5
|
@file = GenericFile.new
|
6
6
|
@file.apply_depositor_metadata('mjg36')
|
7
7
|
@file.save
|
8
8
|
end
|
9
9
|
|
10
|
-
after(:all) do
|
11
|
-
@file.destroy
|
12
|
-
end
|
13
|
-
|
14
10
|
let(:file) { @file }
|
15
11
|
|
16
12
|
describe "create" do
|
@@ -21,32 +17,32 @@ describe SingleUseLink, :type => :model do
|
|
21
17
|
expect(Digest::SHA2).to receive(:new).and_return(@hash)
|
22
18
|
end
|
23
19
|
it "should create show link" do
|
24
|
-
su = SingleUseLink.create itemId: file.
|
20
|
+
su = SingleUseLink.create itemId: file.id, path: Sufia::Engine.routes.url_helpers.generic_file_path(file.id)
|
25
21
|
expect(su.downloadKey).to eq(@hash)
|
26
|
-
expect(su.itemId).to eq(file.
|
27
|
-
expect(su.path).to eq(Sufia::Engine.routes.url_helpers.generic_file_path(file.
|
22
|
+
expect(su.itemId).to eq(file.id)
|
23
|
+
expect(su.path).to eq(Sufia::Engine.routes.url_helpers.generic_file_path(file.id))
|
28
24
|
su.delete
|
29
25
|
end
|
30
26
|
it "should create show download link" do
|
31
|
-
su = SingleUseLink.create itemId: file.
|
27
|
+
su = SingleUseLink.create itemId: file.id, path: Sufia::Engine.routes.url_helpers.download_path(file.id)
|
32
28
|
expect(su.downloadKey).to eq(@hash)
|
33
|
-
expect(su.itemId).to eq(file.
|
34
|
-
expect(su.path).to eq(Sufia::Engine.routes.url_helpers.download_path(file.
|
29
|
+
expect(su.itemId).to eq(file.id)
|
30
|
+
expect(su.path).to eq(Sufia::Engine.routes.url_helpers.download_path(file.id))
|
35
31
|
su.delete
|
36
32
|
end
|
37
33
|
end
|
38
34
|
describe "find" do
|
39
35
|
describe "not expired" do
|
40
36
|
before do
|
41
|
-
@su = SingleUseLink.create(downloadKey: 'sha2hashb', itemId: file.
|
37
|
+
@su = SingleUseLink.create(downloadKey: 'sha2hashb', itemId: file.id, path: Sufia::Engine.routes.url_helpers.download_path(file.noid), expires: DateTime.now.advance(hours: 1))
|
42
38
|
end
|
43
39
|
it "should retrieve link" do
|
44
40
|
link = SingleUseLink.where(downloadKey: 'sha2hashb').first
|
45
|
-
expect(link.itemId).to eq(file.
|
41
|
+
expect(link.itemId).to eq(file.id)
|
46
42
|
end
|
47
43
|
it "should retrieve link with find_by" do
|
48
44
|
link = SingleUseLink.find_by_downloadKey('sha2hashb')
|
49
|
-
expect(link.itemId).to eq(file.
|
45
|
+
expect(link.itemId).to eq(file.id)
|
50
46
|
end
|
51
47
|
it "should expire link" do
|
52
48
|
link = SingleUseLink.where(downloadKey: 'sha2hashb').first
|
@@ -55,7 +51,7 @@ describe SingleUseLink, :type => :model do
|
|
55
51
|
end
|
56
52
|
describe "expired" do
|
57
53
|
before do
|
58
|
-
@su = SingleUseLink.create!(downloadKey: 'sha2hashb', itemId:file.
|
54
|
+
@su = SingleUseLink.create!(downloadKey: 'sha2hashb', itemId:file.id, path:Sufia::Engine.routes.url_helpers.download_path(file.noid))
|
59
55
|
|
60
56
|
@su.update_attribute :expires, DateTime.now.advance(hours: -1)
|
61
57
|
end
|
@@ -4,7 +4,7 @@ describe SolrDocument, :type => :model do
|
|
4
4
|
|
5
5
|
describe "date_uploaded" do
|
6
6
|
before do
|
7
|
-
subject['
|
7
|
+
subject['date_uploaded_dtsi'] = '2013-03-14T00:00:00Z'
|
8
8
|
end
|
9
9
|
it "should be a date" do
|
10
10
|
expect(subject.date_uploaded).to eq '03/14/2013'
|
data/spec/models/trophy_spec.rb
CHANGED
@@ -4,14 +4,12 @@ describe Trophy, :type => :model do
|
|
4
4
|
before(:all) do
|
5
5
|
@trophy = Trophy.create(user_id:99,generic_file_id:"99")
|
6
6
|
end
|
7
|
-
after(:all) do
|
8
|
-
@trophy.delete
|
9
|
-
end
|
10
7
|
|
11
8
|
it "should have a user" do
|
12
9
|
expect(@trophy).to respond_to(:user_id)
|
13
10
|
expect(@trophy.user_id).to eq(99)
|
14
11
|
end
|
12
|
+
|
15
13
|
it "should have a file" do
|
16
14
|
expect(@trophy).to respond_to(:generic_file_id)
|
17
15
|
expect(@trophy.generic_file_id).to eq("99")
|
data/spec/models/user_spec.rb
CHANGED
@@ -1,92 +1,67 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe User, :type => :model do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
after(:all) do
|
9
|
-
@user.destroy
|
10
|
-
@another_user.destroy
|
11
|
-
end
|
4
|
+
let(:user) { FactoryGirl.build(:user) }
|
5
|
+
let(:another_user) { FactoryGirl.build(:user) }
|
6
|
+
|
12
7
|
it "should have an email" do
|
13
|
-
expect(
|
8
|
+
expect(user.user_key).to be_kind_of String
|
14
9
|
end
|
15
10
|
it "should have activity stream-related methods defined" do
|
16
|
-
expect(
|
17
|
-
expect(
|
18
|
-
expect(
|
19
|
-
expect(
|
20
|
-
expect(
|
21
|
-
expect(
|
11
|
+
expect(user).to respond_to(:stream)
|
12
|
+
expect(user).to respond_to(:events)
|
13
|
+
expect(user).to respond_to(:profile_events)
|
14
|
+
expect(user).to respond_to(:create_event)
|
15
|
+
expect(user).to respond_to(:log_event)
|
16
|
+
expect(user).to respond_to(:log_profile_event)
|
22
17
|
end
|
23
18
|
it "should have social attributes" do
|
24
|
-
expect(
|
25
|
-
expect(
|
26
|
-
expect(
|
27
|
-
expect(
|
28
|
-
expect(@user).to respond_to(:orcid)
|
19
|
+
expect(user).to respond_to(:twitter_handle)
|
20
|
+
expect(user).to respond_to(:facebook_handle)
|
21
|
+
expect(user).to respond_to(:googleplus_handle)
|
22
|
+
expect(user).to respond_to(:linkedin_handle)
|
29
23
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
it 'saves when a valid ORCID URI is supplied' do
|
37
|
-
@user.orcid = 'http://orcid.org/0000-0000-1111-2222'
|
38
|
-
expect(@user).to be_valid
|
39
|
-
expect(@user.save).to be true
|
40
|
-
end
|
41
|
-
it 'normalizes bare ORCIDs to URIs' do
|
42
|
-
@user.orcid = '0000-0000-1111-2222'
|
43
|
-
@user.save
|
44
|
-
expect(@user.orcid).to eq 'http://orcid.org/0000-0000-1111-2222'
|
45
|
-
end
|
46
|
-
it 'marks bad ORCIDs as invalid' do
|
47
|
-
@user.orcid = '000-000-111-222'
|
48
|
-
expect(@user).not_to be_valid
|
49
|
-
expect(@user.save).to be false
|
24
|
+
|
25
|
+
describe "#to_param" do
|
26
|
+
let(:user) { User.new(email: 'jilluser@example.com') }
|
27
|
+
|
28
|
+
it "should override to_param to make keys more recognizable in redis (and useable within Rails URLs)" do
|
29
|
+
expect(user.to_param).to eq("jilluser@example-dot-com")
|
50
30
|
end
|
51
31
|
end
|
52
|
-
|
53
|
-
expect(@user.to_param).to eq("jilluser@example-dot-com")
|
54
|
-
end
|
32
|
+
|
55
33
|
it "should have a cancan ability defined" do
|
56
|
-
expect(
|
34
|
+
expect(user).to respond_to(:can?)
|
57
35
|
end
|
58
36
|
it "should not have any followers" do
|
59
|
-
expect(
|
60
|
-
expect(
|
37
|
+
expect(user.followers_count).to eq(0)
|
38
|
+
expect(another_user.follow_count).to eq(0)
|
61
39
|
end
|
62
40
|
describe "follow/unfollow" do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
after do
|
69
|
-
@user.delete
|
70
|
-
@another_user.delete
|
41
|
+
let(:user) { FactoryGirl.create(:user) }
|
42
|
+
let(:another_user) { FactoryGirl.create(:user) }
|
43
|
+
before do
|
44
|
+
user.follow(another_user)
|
71
45
|
end
|
46
|
+
|
72
47
|
it "should be able to follow another user" do
|
73
|
-
expect(
|
74
|
-
expect(
|
75
|
-
expect(
|
76
|
-
expect(
|
48
|
+
expect(user).to be_following(another_user)
|
49
|
+
expect(another_user).to_not be_following(user)
|
50
|
+
expect(another_user).to be_followed_by(user)
|
51
|
+
expect(user).to_not be_followed_by(another_user)
|
77
52
|
end
|
78
53
|
it "should be able to unfollow another user" do
|
79
|
-
|
80
|
-
expect(
|
81
|
-
expect(
|
54
|
+
user.stop_following(another_user)
|
55
|
+
expect(user).to_not be_following(another_user)
|
56
|
+
expect(another_user).to_not be_followed_by(user)
|
82
57
|
end
|
83
58
|
end
|
84
59
|
|
85
60
|
describe "trophy_files" do
|
86
|
-
let(:user) {
|
87
|
-
let(:file1) { GenericFile.
|
88
|
-
let(:file2) { GenericFile.
|
89
|
-
let(:file3) { GenericFile.
|
61
|
+
let(:user) { FactoryGirl.create(:user) }
|
62
|
+
let(:file1) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
63
|
+
let(:file2) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
64
|
+
let(:file3) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
90
65
|
let!(:trophy1) { user.trophies.create!(generic_file_id: file1.noid) }
|
91
66
|
let!(:trophy2) { user.trophies.create!(generic_file_id: file2.noid) }
|
92
67
|
let!(:trophy3) { user.trophies.create!(generic_file_id: file3.noid) }
|
@@ -98,8 +73,7 @@ describe User, :type => :model do
|
|
98
73
|
end
|
99
74
|
|
100
75
|
describe "activity streams" do
|
101
|
-
let(:now){DateTime.now.to_i}
|
102
|
-
let(:user) { @user }
|
76
|
+
let(:now) { DateTime.now.to_i }
|
103
77
|
let(:activities) {
|
104
78
|
[{ action: 'so and so edited their profile', timestamp: now },
|
105
79
|
{ action: 'so and so uploaded a file', timestamp: (now - 360 ) }]
|
@@ -124,19 +98,17 @@ describe User, :type => :model do
|
|
124
98
|
describe "proxy_deposit_rights" do
|
125
99
|
before do
|
126
100
|
@subject = FactoryGirl.create :curator
|
127
|
-
@
|
128
|
-
@
|
129
|
-
@subject.can_receive_deposits_from << @user1
|
130
|
-
@subject.can_make_deposits_for << @user2
|
101
|
+
@subject.can_receive_deposits_from << user
|
102
|
+
@subject.can_make_deposits_for << another_user
|
131
103
|
@subject.save!
|
132
104
|
end
|
133
105
|
it "can_receive_deposits_from" do
|
134
|
-
expect(@subject.can_receive_deposits_from.to_a).to eq [
|
135
|
-
expect(
|
106
|
+
expect(@subject.can_receive_deposits_from.to_a).to eq [user]
|
107
|
+
expect(user.can_make_deposits_for.to_a).to eq [@subject]
|
136
108
|
end
|
137
109
|
it "can_make_deposits_for" do
|
138
|
-
expect(@subject.can_make_deposits_for.to_a).to eq [
|
139
|
-
expect(
|
110
|
+
expect(@subject.can_make_deposits_for.to_a).to eq [another_user]
|
111
|
+
expect(another_user.can_receive_deposits_from.to_a).to eq [@subject]
|
140
112
|
end
|
141
113
|
end
|
142
114
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sufia::VersionListPresenter, :no_clean do
|
4
|
+
let(:resource_version) do
|
5
|
+
ActiveFedora::VersionsGraph::ResourceVersion.new.tap do |v|
|
6
|
+
v.uri = 'http://example.com/version1'
|
7
|
+
v.label = 'version1'
|
8
|
+
v.created = '2014-12-09T02:03:18.296Z'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { Sufia::VersionListPresenter.new([resource_version]) }
|
13
|
+
|
14
|
+
describe "#each" do
|
15
|
+
it "should yield version_presenters" do
|
16
|
+
subject.each do |v|
|
17
|
+
expect(v).to be_kind_of Sufia::VersionPresenter
|
18
|
+
expect(v.label).to eq 'version1'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sufia::VersionPresenter, :no_clean do
|
4
|
+
let(:resource_version) do
|
5
|
+
ActiveFedora::VersionsGraph::ResourceVersion.new.tap do |v|
|
6
|
+
v.uri = 'http://example.com/version1'
|
7
|
+
v.label = 'version1'
|
8
|
+
v.created = '2014-12-09T02:03:18.296Z'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:presenter) { Sufia::VersionPresenter.new(resource_version) }
|
13
|
+
|
14
|
+
describe "#label" do
|
15
|
+
subject { presenter.label }
|
16
|
+
it { is_expected.to eq 'version1' }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#uri" do
|
20
|
+
subject { presenter.uri }
|
21
|
+
it { is_expected.to eq 'http://example.com/version1' }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#created" do
|
25
|
+
before do
|
26
|
+
# Stub out the local timezone to (+08:00)
|
27
|
+
t2 = Time.new(2014, 12, 8, 18, 3, 18, 8)
|
28
|
+
allow_any_instance_of(Time).to receive(:getlocal).and_return(t2)
|
29
|
+
end
|
30
|
+
subject { presenter.created }
|
31
|
+
it { is_expected.to eq "December 8th, 2014 18:03" }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#current?" do
|
35
|
+
subject { presenter.current? }
|
36
|
+
it { is_expected.to be false }
|
37
|
+
|
38
|
+
context "when current! is set" do
|
39
|
+
before { presenter.current! }
|
40
|
+
it { is_expected.to be true }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#committer" do
|
45
|
+
before do
|
46
|
+
VersionCommitter.create(version_id: resource_version.uri, committer_login: 'jill')
|
47
|
+
end
|
48
|
+
subject { presenter.committer }
|
49
|
+
it { is_expected.to eq 'jill' }
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sufia::GenericFileAuditService do
|
4
|
+
let(:f) do
|
5
|
+
GenericFile.create do |f|
|
6
|
+
f.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
|
7
|
+
f.apply_depositor_metadata('mjg36')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:service) { Sufia::GenericFileAuditService.new(f) }
|
12
|
+
|
13
|
+
describe "#audit" do
|
14
|
+
before do
|
15
|
+
# force a second version
|
16
|
+
gf = GenericFile.find(f.id)
|
17
|
+
gf.add_file('hello two', 'content', 'hello2.txt')
|
18
|
+
gf.save!
|
19
|
+
end
|
20
|
+
|
21
|
+
context "force an audit on a file with two versions" do
|
22
|
+
subject { service.audit }
|
23
|
+
specify "should return two log results" do
|
24
|
+
expect(subject.length).to eq(2)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#audit_file" do
|
30
|
+
before do
|
31
|
+
# force a second version
|
32
|
+
gf = GenericFile.find(f.id)
|
33
|
+
gf.add_file('hello two', 'content', 'hello2.txt')
|
34
|
+
gf.save!
|
35
|
+
end
|
36
|
+
|
37
|
+
context "force an audit on a specific version" do
|
38
|
+
subject { service.send(:audit_file, "content", f.content.versions.first.uri) }
|
39
|
+
specify "should return a single log result" do
|
40
|
+
expect(subject).to_not be_nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#audit_stat" do
|
46
|
+
subject { service.send(:audit_stat) }
|
47
|
+
context "when no audits have been run" do
|
48
|
+
it "should report that audits have not been run" do
|
49
|
+
expect(subject).to eq "Audits have not yet been run on this file."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when no audit is pasing" do
|
54
|
+
before do
|
55
|
+
ChecksumAuditLog.create!(pass: 1, pid: f.id, version: f.content.versions.first.label, dsid: 'content')
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should report that audits have not been run" do
|
59
|
+
expect(subject).to eq 1
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#human_readable_audit_status" do
|
65
|
+
subject do
|
66
|
+
expect(service).to receive(:audit_stat).and_return(audit_stat)
|
67
|
+
service.human_readable_audit_status
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when audit_stat is 0" do
|
71
|
+
let(:audit_stat) { 0 }
|
72
|
+
it { is_expected.to eq 'failing' }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "when audit_stat is 1" do
|
76
|
+
let(:audit_stat) { 1 }
|
77
|
+
it { is_expected.to eq 'passing' }
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when audit_stat is something else" do
|
81
|
+
let(:audit_stat) { 'something else' }
|
82
|
+
it { is_expected.to eq 'something else' }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|