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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +247 -215
  3. data/README.md +7 -3
  4. data/SUFIA_VERSION +1 -1
  5. data/app/assets/javascripts/sufia.js +5 -2
  6. data/app/assets/javascripts/sufia/proxy_rights.js +68 -0
  7. data/app/assets/javascripts/sufia/transfers.js +3 -0
  8. data/app/assets/javascripts/sufia/user_search.js +31 -0
  9. data/app/assets/stylesheets/jquery-ui.css +17 -17
  10. data/app/assets/stylesheets/sufia.css.scss +3 -2
  11. data/app/assets/stylesheets/sufia/_proxy-rights.scss +10 -0
  12. data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +22 -23
  13. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +41 -0
  14. data/app/controllers/concerns/sufia/files_controller_behavior.rb +1 -0
  15. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +76 -0
  16. data/app/controllers/concerns/sufia/users_controller_behavior.rb +9 -11
  17. data/app/controllers/depositors_controller.rb +3 -0
  18. data/app/controllers/transfers_controller.rb +3 -0
  19. data/app/helpers/sufia/dashboard_helper_behavior.rb +15 -0
  20. data/app/helpers/sufia/sufia_helper_behavior.rb +24 -2
  21. data/app/jobs/content_depositor_change_event_job.rb +50 -0
  22. data/app/views/dashboard/_index_partials/_contents.html.erb +18 -0
  23. data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +23 -0
  24. data/app/views/dashboard/_index_partials/_transfers.html.erb +14 -0
  25. data/app/views/generic_files/proxy.html.erb +5 -0
  26. data/app/views/generic_files/upload/_form.html.erb +7 -2
  27. data/app/views/my/_action_menu.html.erb +3 -1
  28. data/app/views/records/edit_fields/_default.html.erb +1 -1
  29. data/app/views/transfers/_received.html.erb +58 -0
  30. data/app/views/transfers/_sent.html.erb +38 -0
  31. data/app/views/transfers/index.html.erb +7 -0
  32. data/app/views/transfers/new.html.erb +23 -0
  33. data/app/views/users/_proxies.html.erb +8 -0
  34. data/app/views/users/_user_util_links_extra.html.erb +1 -0
  35. data/app/views/users/edit.html.erb +6 -1
  36. data/config/locales/sufia.en.yml +9 -4
  37. data/config/routes.rb +14 -3
  38. data/lib/sufia.rb +7 -5
  39. data/lib/sufia/version.rb +1 -1
  40. data/spec/controllers/authorities_controller_spec.rb +6 -6
  41. data/spec/controllers/batch_controller_spec.rb +29 -29
  42. data/spec/controllers/batch_edits_controller_spec.rb +7 -7
  43. data/spec/controllers/catalog_controller_spec.rb +9 -9
  44. data/spec/controllers/collections_controller_spec.rb +28 -28
  45. data/spec/controllers/content_blocks_controller_spec.rb +3 -3
  46. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  47. data/spec/controllers/depositors_controller_spec.rb +50 -0
  48. data/spec/controllers/downloads_controller_spec.rb +22 -22
  49. data/spec/controllers/featured_work_lists_controller_spec.rb +1 -1
  50. data/spec/controllers/featured_works_controller_spec.rb +1 -1
  51. data/spec/controllers/generic_files_controller_spec.rb +98 -90
  52. data/spec/controllers/homepage_controller_spec.rb +1 -1
  53. data/spec/controllers/mailbox_controller_spec.rb +10 -10
  54. data/spec/controllers/my/collections_controller_spec.rb +1 -1
  55. data/spec/controllers/my/files_controller_spec.rb +1 -1
  56. data/spec/controllers/my/highlights_controller_spec.rb +1 -1
  57. data/spec/controllers/my/shares_controller_spec.rb +1 -1
  58. data/spec/controllers/my_controller_spec.rb +1 -1
  59. data/spec/controllers/pages_controller_spec.rb +1 -1
  60. data/spec/controllers/single_use_links_controller_spec.rb +46 -50
  61. data/spec/controllers/single_use_links_viewer_controller_spec.rb +16 -16
  62. data/spec/controllers/static_controller_spec.rb +9 -9
  63. data/spec/controllers/tinymce_assets_controller_spec.rb +1 -1
  64. data/spec/controllers/transfers_controller_spec.rb +212 -0
  65. data/spec/controllers/users_controller_spec.rb +1 -1
  66. data/spec/factories/generic_files.rb +4 -4
  67. data/spec/factories/proxy_deposit_requests.rb +6 -0
  68. data/spec/features/browse_dashboard_files_spec.rb +25 -36
  69. data/spec/features/browse_files_spec.rb +18 -13
  70. data/spec/features/catalog_search_spec.rb +3 -6
  71. data/spec/features/cloud_upload_spec.rb +5 -7
  72. data/spec/features/collection_spec.rb +28 -35
  73. data/spec/features/contact_form_spec.rb +24 -24
  74. data/spec/features/display_dashboard_spec.rb +11 -11
  75. data/spec/features/ingest_upload_files_spec.rb +10 -10
  76. data/spec/features/notifications_spec.rb +11 -11
  77. data/spec/features/ownership_transfer_spec.rb +111 -0
  78. data/spec/features/proxy_spec.rb +52 -0
  79. data/spec/features/search_spec.rb +1 -1
  80. data/spec/features/single_use_links_spec.rb +28 -18
  81. data/spec/features/users_spec.rb +3 -3
  82. data/spec/helpers/batch_edits_helper_spec.rb +1 -1
  83. data/spec/helpers/content_block_helper_spec.rb +1 -1
  84. data/spec/helpers/dashboard_helper_spec.rb +1 -1
  85. data/spec/helpers/generic_file_helper_spec.rb +1 -1
  86. data/spec/helpers/records_helper_spec.rb +1 -1
  87. data/spec/helpers/sufia_helper_spec.rb +8 -8
  88. data/spec/helpers/trophy_helper_spec.rb +1 -1
  89. data/spec/jobs/audit_job_spec.rb +5 -5
  90. data/spec/jobs/batch_update_job_spec.rb +14 -14
  91. data/spec/jobs/content_depositor_change_event_job_spec.rb +22 -0
  92. data/spec/jobs/event_jobs_spec.rb +104 -104
  93. data/spec/jobs/import_url_job_spec.rb +2 -2
  94. data/spec/jobs/ingest_local_file_job_spec.rb +1 -1
  95. data/spec/lib/sufia/breadcrumbs_spec.rb +3 -3
  96. data/spec/lib/sufia/id_service_spec.rb +1 -1
  97. data/spec/lib/sufia/upload_complete_behavior_spec.rb +4 -4
  98. data/spec/models/ability_spec.rb +59 -15
  99. data/spec/models/batch_spec.rb +16 -16
  100. data/spec/models/characterization_spec.rb +1 -1
  101. data/spec/models/checksum_audit_log_spec.rb +34 -26
  102. data/spec/models/collection_spec.rb +1 -1
  103. data/spec/models/download_spec.rb +1 -1
  104. data/spec/models/featured_work_list_spec.rb +1 -1
  105. data/spec/models/featured_work_spec.rb +15 -4
  106. data/spec/models/file_content_datastream_spec.rb +14 -14
  107. data/spec/models/file_usage_spec.rb +1 -1
  108. data/spec/models/fits_datastream_spec.rb +1 -1
  109. data/spec/models/generic_file/reload_on_save_spec.rb +4 -4
  110. data/spec/models/generic_file/visibility_spec.rb +1 -1
  111. data/spec/models/generic_file/web_form_spec.rb +6 -5
  112. data/spec/models/generic_file_rdf_datastream_spec.rb +1 -1
  113. data/spec/models/generic_file_spec.rb +254 -220
  114. data/spec/models/geo_names_resource_spec.rb +2 -2
  115. data/spec/models/local_authority_spec.rb +60 -59
  116. data/spec/models/pageview_spec.rb +1 -1
  117. data/spec/models/properties_datastream_spec.rb +29 -10
  118. data/spec/models/proxy_deposit_request_spec.rb +107 -0
  119. data/spec/models/single_use_link_spec.rb +13 -13
  120. data/spec/models/solr_document_spec.rb +1 -1
  121. data/spec/models/trophy_spec.rb +6 -6
  122. data/spec/models/user_spec.rb +38 -22
  123. data/spec/routing/featured_works_route_spec.rb +1 -1
  124. data/spec/routing/ownership_transfers_route_spec.rb +45 -0
  125. data/spec/routing/route_spec.rb +42 -42
  126. data/spec/services/noid_spec.rb +2 -2
  127. data/spec/spec_helper.rb +10 -5
  128. data/spec/support/cleaner.rb +12 -0
  129. data/spec/support/features.rb +5 -0
  130. data/spec/support/features/session_helpers.rb +3 -17
  131. data/spec/support/locations.rb +36 -0
  132. data/spec/support/poltergeist.rb +11 -0
  133. data/spec/support/proxies.rb +14 -0
  134. data/spec/support/selectors.rb +122 -0
  135. data/spec/views/batch/edit.html.erb_spec.rb +1 -1
  136. data/spec/views/batch_edits/check_all_spec.rb +4 -4
  137. data/spec/views/catalog/index.html.erb_spec.rb +1 -1
  138. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +1 -1
  139. data/spec/views/collections/_form.html.erb_spec.rb +3 -1
  140. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
  141. data/spec/views/dashboard/index_spec.rb +3 -6
  142. data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
  143. data/spec/views/generic_file/show.html.erb_spec.rb +1 -1
  144. data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
  145. data/spec/views/my/facet.html.erb_spec.rb +2 -2
  146. data/spec/views/users/_follower_modal.html.erb_spec.rb +1 -1
  147. data/spec/views/users/_following_modal.html.erb_spec.rb +1 -1
  148. data/spec/views/users/_notify_number.html.erb_spec.rb +1 -1
  149. data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
  150. data/spec/views/users/index.html.erb_spec.rb +2 -2
  151. data/spec/views/users/show.html.erb_spec.rb +2 -2
  152. data/sufia-models/app/models/concerns/sufia/ability.rb +22 -0
  153. data/sufia-models/app/models/concerns/sufia/generic_file.rb +1 -0
  154. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
  155. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
  156. data/sufia-models/app/models/concerns/sufia/user.rb +9 -0
  157. data/sufia-models/app/models/proxy_deposit_request.rb +85 -0
  158. data/sufia-models/app/models/proxy_deposit_rights.rb +4 -0
  159. data/sufia-models/app/models/sufia/avatar_uploader.rb +2 -3
  160. data/sufia-models/lib/generators/sufia/models/install_generator.rb +9 -1
  161. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +53 -0
  162. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
  163. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
  164. data/sufia-models/lib/sufia/models/engine.rb +1 -1
  165. data/sufia-models/lib/sufia/models/version.rb +1 -1
  166. data/sufia.gemspec +2 -1
  167. data/tasks/sufia-dev.rake +5 -0
  168. metadata +82 -6
  169. data/tasks/sufia-db.rake +0 -21
@@ -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 { should_not be_able_to(:create, GenericFile) }
11
- it { should_not be_able_to(:create, TinymceAsset) }
12
- it { should_not be_able_to(:update, ContentBlock) }
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.create(:user) }
14
+ let(:user) { FactoryGirl.find_or_create(:archivist) }
17
15
  subject { Ability.new(user) }
18
- it { should be_able_to(:create, GenericFile) }
19
- it { should_not be_able_to(:create, TinymceAsset) }
20
- it { should_not be_able_to(:update, ContentBlock) }
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.create(:user) }
25
- before { user.stub(groups: ['admin', 'registered']) }
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 { should be_able_to(:create, GenericFile) }
28
- it { should be_able_to(:create, TinymceAsset) }
29
- it { should be_able_to(:update, ContentBlock) }
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
@@ -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.should be_instance_of Hydra::Datastream::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.should be_kind_of BatchRdfDatastream
22
+ expect(@batch.descMetadata).to be_kind_of BatchRdfDatastream
23
23
  end
24
24
  it "should belong to testuser" do
25
- @batch.creator.should == [@user.user_key]
25
+ expect(@batch.creator).to eq([@user.user_key])
26
26
  end
27
27
  it "should be titled 'test collection'" do
28
- @batch.title.should == ["test collection"]
28
+ expect(@batch.title).to eq(["test collection"])
29
29
  end
30
30
  it "should have generic_files defined" do
31
- @batch.should respond_to(:generic_files)
31
+ expect(@batch).to respond_to(:generic_files)
32
32
  end
33
33
  it "should contain one generic file" do
34
- @batch.part.should == [@file.pid]
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.should == [@file.pid, gf.pid]
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.should_not be_nil
47
- @batch.to_solr["batch__part_t"].should be_nil
48
- @batch.to_solr["batch__title_t"].should be_nil
49
- @batch.to_solr["batch__creator_t"].should be_nil
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.should_receive(:create).never
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
- lambda {Batch.find("batch:123")}.should raise_error(ActiveFedora::ObjectNotFoundError)
61
- Batch.should_receive(:create).once.and_return("the 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.should == "the batch"
63
+ expect(@b2).to eq("the batch")
64
64
  end
65
65
  end
66
66
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sufia::GenericFile::Characterization do
3
+ describe Sufia::GenericFile::Characterization, :type => :model do
4
4
  before do
5
5
  class TestClass < ActiveFedora::Base
6
6
  include Sufia::GenericFile::Characterization
@@ -1,35 +1,43 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ChecksumAuditLog do
4
- before(:all) do
5
- @f = GenericFile.new
6
- @f.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
7
- @f.apply_depositor_metadata('mjg36')
8
- @f.save!
9
- @version = @f.datastreams['content'].versions.first
10
- @old = ChecksumAuditLog.create(pid: @f.pid, dsid: @version.dsid, version: @version.versionID, pass: 1, created_at: 2.minutes.ago)
11
- @new = ChecksumAuditLog.create(pid: @f.pid, dsid: @version.dsid, version: @version.versionID, pass: 0)
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
- @f.delete
15
- ChecksumAuditLog.all.each(&:delete)
19
+ ChecksumAuditLog.destroy_all
16
20
  end
17
- before(:each) do
18
- GenericFile.any_instance.stub(:characterize).and_return(true) # stub out characterization so it does not get audited
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 "should return a list of logs for this datastream sorted by date descending" do
21
- @f.logs(@version.dsid).should == [@new, @old]
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
- it "should prune history for a datastream" do
24
- success1 = ChecksumAuditLog.create(pid: @f.pid, dsid: @version.dsid, version: @version.versionID, pass: 1)
25
- ChecksumAuditLog.prune_history(@version)
26
- success2 = ChecksumAuditLog.create(pid: @f.pid, dsid: @version.dsid, version: @version.versionID, pass: 1)
27
- ChecksumAuditLog.prune_history(@version)
28
- success3 = ChecksumAuditLog.create(pid: @f.pid, dsid: @version.dsid, version: @version.versionID, pass: 1)
29
- ChecksumAuditLog.prune_history(@version)
30
- lambda { ChecksumAuditLog.find(success2.id)}.should raise_exception ActiveRecord::RecordNotFound
31
- lambda { ChecksumAuditLog.find(success3.id)}.should raise_exception ActiveRecord::RecordNotFound
32
- ChecksumAuditLog.find(success1.id).should_not be_nil
33
- @f.logs(@version.dsid).should == [success1, @new, @old]
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 Collection do
3
+ describe Collection, :type => :model do
4
4
  before do
5
5
  @user = FactoryGirl.create(:user)
6
6
  @collection = Collection.new(title: "test collection").tap do |c|
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sufia::Download do
3
+ describe Sufia::Download, :type => :model do
4
4
 
5
5
  before do
6
6
  @download = Sufia::Download
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FeaturedWorkList do
3
+ describe FeaturedWorkList, :type => :model do
4
4
  let(:file1) { FactoryGirl.create(:generic_file) }
5
5
  let(:file2) { FactoryGirl.create(:generic_file) }
6
6
 
@@ -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
- its(:can_create_another?) { should be true }
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
- its(:can_create_another?) { should be false }
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
- its(:order) {should eq 5 }
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.should == "content.0"
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.should == "content.0"
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.should == @file.content.latest_version.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").should be_nil
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.should == "content.1"
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.should == @file.content.latest_version.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.stub(pid: 'my_pid')
50
- @subject.stub(dsVersionID: 'content.7')
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.should == '50'
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.stub(read: f.read)
64
- content.stub(rewind: f.rewind)
65
- @subject.stub(:content).and_return(f)
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.should == 'image/png'
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,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FileUsage do
3
+ describe FileUsage, :type => :model do
4
4
 
5
5
  before :all do
6
6
  @file = GenericFile.new
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FitsDatastream, unless: $in_travis do
3
+ describe FitsDatastream, type: :model, unless: $in_travis do
4
4
  describe "image" do
5
5
  before(:all) do
6
6
  @file = GenericFile.new
@@ -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.should_not_receive(:reload)
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.should_receive(:reload)
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.should_receive(:reload).once
20
+ expect(file).to receive(:reload).once
21
21
  file.save
22
22
  file.reload_on_save = false
23
23
  file.save
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sufia::GenericFile do
3
+ describe Sufia::GenericFile, :type => :model do
4
4
  module VisibilityOverride
5
5
  extend ActiveSupport::Concern
6
6
  include Sufia::GenericFile::Permissions
@@ -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.should == [:resource_type, :title, :creator, :contributor, :description, :tag,
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.should include(:part_of, :resource_type, :title, :creator, :contributor, :description,
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"}).should ==
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