sufia 4.0.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
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