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,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe HomepageController do
3
+ describe HomepageController, :type => :controller do
4
4
  routes { Rails.application.class.routes }
5
5
 
6
6
  describe "#index" do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe MailboxController do
3
+ describe MailboxController, :type => :controller do
4
4
  before(:each) do
5
5
  @user = FactoryGirl.find_or_create(:jill)
6
6
  @another_user = FactoryGirl.find_or_create(:archivist)
@@ -8,7 +8,7 @@ describe MailboxController do
8
8
  @subject = "Test Subject"
9
9
  @rec1 = @another_user.send_message(@user, @message, @subject)
10
10
  @rec2 = @user.send_message(@another_user, @message, @subject)
11
- MailboxController.any_instance.stub(:authenticate_user!).and_return(true)
11
+ allow_any_instance_of(MailboxController).to receive(:authenticate_user!).and_return(true)
12
12
  sign_in @user
13
13
  end
14
14
  after(:each) do
@@ -18,10 +18,10 @@ describe MailboxController do
18
18
  describe "#index" do
19
19
  it "should show message" do
20
20
  get :index
21
- response.should be_success
22
- assigns[:messages].first.last_message.body.should == 'Test Message'
23
- assigns[:messages].first.last_message.subject.should == 'Test Subject'
24
- @user.mailbox.inbox(unread: true).count.should == 0
21
+ expect(response).to be_success
22
+ expect(assigns[:messages].first.last_message.body).to eq('Test Message')
23
+ expect(assigns[:messages].first.last_message.subject).to eq('Test Subject')
24
+ expect(@user.mailbox.inbox(unread: true).count).to eq(0)
25
25
  end
26
26
  end
27
27
  describe "#delete" do
@@ -29,7 +29,7 @@ describe MailboxController do
29
29
  rec = @another_user.send_message(@user, 'message 2', 'subject 2')
30
30
  expect {
31
31
  delete :destroy, id: rec.conversation.id
32
- response.should redirect_to(@routes.url_helpers.notifications_path)
32
+ expect(response).to redirect_to(@routes.url_helpers.notifications_path)
33
33
  }.to change {@user.mailbox.inbox.count}.by(-1)
34
34
  end
35
35
  it "should not delete message" do
@@ -37,7 +37,7 @@ describe MailboxController do
37
37
  rec = @another_user.send_message(@curator, 'message 3', 'subject 3')
38
38
  expect {
39
39
  delete :destroy, id: rec.conversation.id
40
- response.should redirect_to(@routes.url_helpers.notifications_path)
40
+ expect(response).to redirect_to(@routes.url_helpers.notifications_path)
41
41
  }.to_not change { @curator.mailbox.inbox.count}
42
42
  end
43
43
  end
@@ -45,9 +45,9 @@ describe MailboxController do
45
45
  it "should delete message" do
46
46
  rec1 = @another_user.send_message(@user, 'message 2', 'subject 2')
47
47
  rec2 = @another_user.send_message(@user, 'message 3', 'subject 3')
48
- @user.mailbox.inbox.count.should == 3
48
+ expect(@user.mailbox.inbox.count).to eq(3)
49
49
  get :delete_all
50
- @user.mailbox.inbox.count.should == 0
50
+ expect(@user.mailbox.inbox.count).to eq(0)
51
51
  end
52
52
  end
53
53
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe My::CollectionsController do
3
+ describe My::CollectionsController, :type => :controller do
4
4
  describe "logged in user" do
5
5
  before (:each) do
6
6
  @user = FactoryGirl.find_or_create(:archivist)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe My::FilesController do
3
+ describe My::FilesController, :type => :controller do
4
4
 
5
5
  before :all do
6
6
  GenericFile.destroy_all
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe My::HighlightsController do
3
+ describe My::HighlightsController, :type => :controller do
4
4
  describe "logged in user" do
5
5
  before (:each) do
6
6
  @user = FactoryGirl.find_or_create(:archivist)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe My::SharesController do
3
+ describe My::SharesController, :type => :controller do
4
4
  describe "logged in user" do
5
5
  before (:each) do
6
6
  @user = FactoryGirl.find_or_create(:archivist)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe MyController do
3
+ describe MyController, :type => :controller do
4
4
 
5
5
  it "sets the controller name" do
6
6
  expect(controller.controller_name).to eq :my
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PagesController do
3
+ describe PagesController, :type => :controller do
4
4
  let (:page_name) {"about_page"}
5
5
  context "content exists" do
6
6
  describe "GET #show" do
@@ -1,93 +1,89 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SingleUseLinksController do
4
- before(:all) do
5
- @user = FactoryGirl.find_or_create(:jill)
6
- @file = GenericFile.new
7
- @file.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
8
- @file.apply_depositor_metadata(@user)
9
- @file.save
10
- @file2 = GenericFile.new
11
- @file2.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
12
- @file2.apply_depositor_metadata('mjg36')
13
- @file2.save
3
+ describe SingleUseLinksController, :type => :controller do
4
+ let(:user) { FactoryGirl.find_or_create(:jill) }
5
+ let(:file) do
6
+ GenericFile.new.tap do |f|
7
+ f.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
8
+ f.apply_depositor_metadata(user)
9
+ f.save
10
+ end
14
11
  end
15
- after(:all) do
16
- @file.delete
17
- @file2.delete
18
- SingleUseLink.delete_all
12
+ let(:file2) do
13
+ GenericFile.new.tap do |f|
14
+ f.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
15
+ f.apply_depositor_metadata('mjg36')
16
+ f.save
17
+ end
19
18
  end
20
19
  before do
21
- controller.stub(:has_access?).and_return(true)
22
- controller.stub(:clear_session_user) ## Don't clear out the authenticated session
20
+ allow(controller).to receive(:has_access?).and_return(true)
21
+ allow(controller).to receive(:clear_session_user) ## Don't clear out the authenticated session
22
+ end
23
+ after(:all) do
24
+ ActiveFedora::Base.destroy_all
25
+ SingleUseLink.destroy_all
23
26
  end
24
27
  describe "logged in user with edit permission" do
25
28
  before do
26
- sign_in @user
29
+ sign_in user
27
30
  @now = DateTime.now
28
- DateTime.stub(:now).and_return(@now)
29
- @hash = "some-dummy-sha2-hash"
30
- Digest::SHA2.should_receive(:new).and_return(@hash)
31
+ allow(DateTime).to receive(:now).and_return(@now)
32
+ @hash = "some-dummy-sha2-hash"
33
+ allow(Digest::SHA2).to receive(:new).and_return(@hash)
31
34
  end
32
35
 
33
- describe "GET 'download'" do
34
- it "and_return http success" do
35
- get 'new_download', id:@file.pid
36
- response.should be_success
37
- assigns[:link].should == @routes.url_helpers.download_single_use_link_path(@hash)
38
- end
39
-
36
+ it "gets the download link" do
37
+ get 'new_download', id: file.pid
38
+ expect(response).to be_success
39
+ expect(assigns[:link]).to eq @routes.url_helpers.download_single_use_link_path(@hash)
40
40
  end
41
-
42
- describe "GET 'show'" do
43
- it "and_return http success" do
44
- get 'new_show', id:@file.pid
45
- response.should be_success
46
- assigns[:link].should == @routes.url_helpers.show_single_use_link_path(@hash)
47
- end
48
41
 
49
- end
42
+ it "gets the show link" do
43
+ get 'new_show', id: file.pid
44
+ expect(response).to be_success
45
+ expect(assigns[:link]).to eq @routes.url_helpers.show_single_use_link_path(@hash)
46
+ end
50
47
  end
51
48
 
52
49
  describe "logged in user without edit permission" do
53
50
  before do
54
51
  @other_user = FactoryGirl.find_or_create(:archivist)
55
- @file.read_users << @other_user
56
- @file.save
57
52
  sign_in @other_user
53
+ file.read_users << @other_user
54
+ file.save
58
55
  end
59
56
 
60
57
  describe "GET 'download'" do
61
58
  it "and_return http success" do
62
- get 'new_download', id:@file.pid
63
- response.should_not be_success
59
+ get 'new_download', id: file.pid
60
+ expect(response).not_to be_success
64
61
  end
65
62
 
66
63
  end
67
64
 
68
65
  describe "GET 'show'" do
69
66
  it "and_return http success" do
70
- get 'new_show', id:@file.pid
71
- response.should_not be_success
67
+ get 'new_show', id: file.pid
68
+ expect(response).not_to be_success
72
69
  end
73
70
 
74
71
  end
75
72
  end
76
73
 
77
- describe "unkown user" do
74
+ describe "unknown user" do
78
75
  describe "GET 'download'" do
79
76
  it "and_return http failure" do
80
- get 'new_download', id:@file.pid
81
- response.should_not be_success
77
+ get 'new_download', id: file.pid
78
+ expect(response).not_to be_success
82
79
  end
83
80
  end
84
-
81
+
85
82
  describe "GET 'show'" do
86
83
  it "and_return http failure" do
87
- get 'new_show', id:@file.pid
88
- response.should_not be_success
84
+ get 'new_show', id: file.pid
85
+ expect(response).not_to be_success
89
86
  end
90
- end
87
+ end
91
88
  end
92
-
93
89
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SingleUseLinksViewerController do
3
+ describe SingleUseLinksViewerController, :type => :controller do
4
4
  before(:all) do
5
5
  @user = FactoryGirl.find_or_create(:jill)
6
6
  @file = GenericFile.new
@@ -18,8 +18,8 @@ describe SingleUseLinksViewerController do
18
18
  SingleUseLink.delete_all
19
19
  end
20
20
  before do
21
- controller.stub(:has_access?).and_return(true)
22
- controller.stub(:clear_session_user) ## Don't clear out the authenticated session
21
+ allow(controller).to receive(:has_access?).and_return(true)
22
+ allow(controller).to receive(:clear_session_user) ## Don't clear out the authenticated session
23
23
  end
24
24
 
25
25
  describe "retrieval links" do
@@ -44,24 +44,24 @@ describe SingleUseLinksViewerController do
44
44
  end
45
45
  describe "GET 'download'" do
46
46
  it "and_return http success" do
47
- controller.stub(:render)
47
+ allow(controller).to receive(:render)
48
48
  expected_content = ActiveFedora::Base.find(@file.pid, cast: true).content.content
49
- controller.should_receive(:send_file_headers!).with({filename: 'world.png', disposition: 'inline', type: 'image/png' })
49
+ expect(controller).to receive(:send_file_headers!).with({filename: 'world.png', disposition: 'inline', type: 'image/png' })
50
50
  get :download, id:download_link_hash
51
- response.body.should == expected_content
52
- response.should be_success
51
+ expect(response.body).to eq(expected_content)
52
+ expect(response).to be_success
53
53
  end
54
54
  it "and_return 404 on second attempt" do
55
55
  get :download, id:download_link_hash
56
- response.should be_success
56
+ expect(response).to be_success
57
57
  get :download, id:download_link_hash
58
- response.should render_template('error/single_use_error')
58
+ expect(response).to render_template('error/single_use_error')
59
59
  end
60
60
  it "and_return 404 on attempt to get download with show" do
61
61
  get :download, id:download_link_hash
62
- response.should be_success
62
+ expect(response).to be_success
63
63
  get :show, id:download_link_hash
64
- response.should render_template('error/single_use_error')
64
+ expect(response).to render_template('error/single_use_error')
65
65
  end
66
66
  end
67
67
 
@@ -69,18 +69,18 @@ describe SingleUseLinksViewerController do
69
69
  it "and_return http success" do
70
70
 
71
71
  get 'show', id:show_link_hash
72
- response.should be_success
73
- assigns[:asset].pid.should == @file.pid
72
+ expect(response).to be_success
73
+ expect(assigns[:asset].pid).to eq(@file.pid)
74
74
  end
75
75
  it "and_return 404 on second attempt" do
76
76
  get :show, id:show_link_hash
77
- response.should be_success
77
+ expect(response).to be_success
78
78
  get :show, id:show_link_hash
79
- response.should render_template('error/single_use_error')
79
+ expect(response).to render_template('error/single_use_error')
80
80
  end
81
81
  it "and_return 404 on attempt to get show path with download hash" do
82
82
  get :show, id:download_link_hash
83
- response.should render_template('error/single_use_error')
83
+ expect(response).to render_template('error/single_use_error')
84
84
  end
85
85
  end
86
86
  end
@@ -1,30 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe StaticController do
3
+ describe StaticController, :type => :controller do
4
4
  routes { Sufia::Engine.routes }
5
5
  describe "#mendeley" do
6
6
  it "renders page" do
7
7
  get "mendeley"
8
- response.should be_success
9
- response.should render_template "layouts/homepage"
8
+ expect(response).to be_success
9
+ expect(response).to render_template "layouts/homepage"
10
10
  end
11
11
  it "renders no layout with javascript" do
12
12
  xhr :get, :mendeley
13
- response.should be_success
14
- response.should_not render_template "layouts/homepage"
13
+ expect(response).to be_success
14
+ expect(response).not_to render_template "layouts/homepage"
15
15
  end
16
16
  end
17
17
 
18
18
  describe "#zotero" do
19
19
  it "renders page" do
20
20
  get "zotero"
21
- response.should be_success
22
- response.should render_template "layouts/homepage"
21
+ expect(response).to be_success
22
+ expect(response).to render_template "layouts/homepage"
23
23
  end
24
24
  it "renders no layout with javascript" do
25
25
  xhr :get, :zotero
26
- response.should be_success
27
- response.should_not render_template "layouts/homepage"
26
+ expect(response).to be_success
27
+ expect(response).not_to render_template "layouts/homepage"
28
28
  end
29
29
  end
30
30
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe TinymceAssetsController do
3
+ describe TinymceAssetsController, :type => :controller do
4
4
  let(:file) { fixture_file_upload('/world.png','image/png') }
5
5
 
6
6
  context "when logged in" do
@@ -0,0 +1,212 @@
1
+ require 'spec_helper'
2
+
3
+ describe TransfersController, :type => :controller do
4
+ describe "with a signed in user" do
5
+ let(:another_user) { FactoryGirl.find_or_create(:jill) }
6
+ let(:user) { FactoryGirl.find_or_create(:archivist) }
7
+
8
+ before do
9
+ sign_in user
10
+ end
11
+
12
+ describe "#index" do
13
+ let!(:incoming_file) do
14
+ GenericFile.new.tap do |f|
15
+ f.apply_depositor_metadata(another_user.user_key)
16
+ f.save!
17
+ f.request_transfer_to(user)
18
+ end
19
+ end
20
+ let!(:outgoing_file) do
21
+ GenericFile.new.tap do |f|
22
+ f.apply_depositor_metadata(user.user_key)
23
+ f.save!
24
+ f.request_transfer_to(another_user)
25
+ end
26
+ end
27
+
28
+ it "is successful" do
29
+ get :index
30
+ expect(response).to be_success
31
+ expect(assigns[:incoming].first).to be_kind_of ProxyDepositRequest
32
+ expect(assigns[:incoming].first.pid).to eq(incoming_file.pid)
33
+ expect(assigns[:outgoing].first).to be_kind_of ProxyDepositRequest
34
+ expect(assigns[:outgoing].first.pid).to eq(outgoing_file.pid)
35
+ end
36
+
37
+ describe "When the incoming request is for a deleted file" do
38
+ before do
39
+ incoming_file.destroy
40
+ end
41
+ it "should not show that file" do
42
+ get :index
43
+ expect(response).to be_success
44
+ expect(assigns[:incoming]).to be_empty
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "#new" do
50
+ let(:file) do
51
+ GenericFile.new.tap do |f|
52
+ f.apply_depositor_metadata(user.user_key)
53
+ f.save!
54
+ end
55
+ end
56
+ context 'when user is the depositor' do
57
+ it "should be successful" do
58
+ sign_in user
59
+ get :new, id: file
60
+ expect(response).to be_success
61
+ expect(assigns[:generic_file]).to eq(file)
62
+ expect(assigns[:proxy_deposit_request]).to be_kind_of ProxyDepositRequest
63
+ expect(assigns[:proxy_deposit_request].pid).to eq(file.pid)
64
+ end
65
+ end
66
+ end
67
+
68
+ describe "#create" do
69
+ let(:file) do
70
+ GenericFile.new.tap do |f|
71
+ f.apply_depositor_metadata(user.user_key)
72
+ f.save!
73
+ end
74
+ end
75
+ it "should be successful" do
76
+ allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
77
+ expect {
78
+ post :create, id: file.id, proxy_deposit_request: {transfer_to: another_user.user_key}
79
+ }.to change(ProxyDepositRequest, :count).by(1)
80
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
81
+ expect(flash[:notice]).to eq('Transfer request created')
82
+ proxy_request = another_user.proxy_deposit_requests.first
83
+ expect(proxy_request.pid).to eq(file.pid)
84
+ expect(proxy_request.sending_user).to eq(user)
85
+ # AND A NOTIFICATION SHOULD HAVE BEEN CREATED
86
+ notification = another_user.reload.mailbox.inbox[0].messages[0]
87
+ expect(notification.subject).to eq("Ownership Change Request")
88
+ expect(notification.body).to eq("<a href=\"/users/#{user.user_key}\">#{user.name}</a> wants to transfer a file to you. Review all <a href=\"#{@routes.url_helpers.transfers_path}\">transfer requests</a>")
89
+ end
90
+ it "should give an error if the user is not found" do
91
+ expect {
92
+ post :create, id: file.id, proxy_deposit_request: {transfer_to: 'foo' }
93
+ }.not_to change(ProxyDepositRequest, :count)
94
+ expect(assigns[:proxy_deposit_request].errors[:transfer_to]).to eq(['must be an existing user'])
95
+ expect(response).to redirect_to(root_path)
96
+ end
97
+ end
98
+
99
+ describe "#accept" do
100
+ context "when I am the receiver" do
101
+ let!(:incoming_file) do
102
+ GenericFile.new.tap do |f|
103
+ f.apply_depositor_metadata(another_user.user_key)
104
+ f.save!
105
+ f.request_transfer_to(user)
106
+ end
107
+ end
108
+ it "should be successful when retaining access rights" do
109
+ put :accept, id: user.proxy_deposit_requests.first
110
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
111
+ expect(flash[:notice]).to eq("Transfer complete")
112
+ expect(assigns[:proxy_deposit_request].status).to eq('accepted')
113
+ expect(incoming_file.reload.edit_users).to eq([another_user.user_key, user.user_key])
114
+ end
115
+ it "should be successful when resetting access rights" do
116
+ put :accept, id: user.proxy_deposit_requests.first, reset: true
117
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
118
+ expect(flash[:notice]).to eq("Transfer complete")
119
+ expect(assigns[:proxy_deposit_request].status).to eq('accepted')
120
+ expect(incoming_file.reload.edit_users).to eq([user.user_key])
121
+ end
122
+ it "should handle sticky requests " do
123
+ put :accept, id: user.proxy_deposit_requests.first, sticky: true
124
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
125
+ expect(flash[:notice]).to eq("Transfer complete")
126
+ expect(assigns[:proxy_deposit_request].status).to eq('accepted')
127
+ expect(user.can_receive_deposits_from).to include(another_user)
128
+ end
129
+ end
130
+
131
+ context "accepting one that isn't mine" do
132
+ let!(:incoming_file) do
133
+ GenericFile.new.tap do |f|
134
+ f.apply_depositor_metadata(user.user_key)
135
+ f.save!
136
+ f.request_transfer_to(another_user)
137
+ end
138
+ end
139
+ it "should not allow me" do
140
+ put :accept, id: another_user.proxy_deposit_requests.first
141
+ expect(response).to redirect_to root_path
142
+ expect(flash[:alert]).to eq("You are not authorized to access this page.")
143
+ end
144
+ end
145
+ end
146
+
147
+ describe "#reject" do
148
+ context "when I am the receiver" do
149
+ let!(:incoming_file) do
150
+ GenericFile.new.tap do |f|
151
+ f.apply_depositor_metadata(another_user.user_key)
152
+ f.save!
153
+ f.request_transfer_to(user)
154
+ end
155
+ end
156
+ it "should be successful" do
157
+ put :reject, id: user.proxy_deposit_requests.first
158
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
159
+ expect(flash[:notice]).to eq("Transfer rejected")
160
+ expect(assigns[:proxy_deposit_request].status).to eq('rejected')
161
+ end
162
+ end
163
+
164
+ context "accepting one that isn't mine" do
165
+ let!(:incoming_file) do
166
+ GenericFile.new.tap do |f|
167
+ f.apply_depositor_metadata(user.user_key)
168
+ f.save!
169
+ f.request_transfer_to(another_user)
170
+ end
171
+ end
172
+ it "should not allow me" do
173
+ put :reject, id: another_user.proxy_deposit_requests.first
174
+ expect(response).to redirect_to root_path
175
+ expect(flash[:alert]).to eq("You are not authorized to access this page.")
176
+ end
177
+ end
178
+ end
179
+
180
+ describe "#destroy" do
181
+ context "when I am the sender" do
182
+ let!(:incoming_file) do
183
+ GenericFile.new.tap do |f|
184
+ f.apply_depositor_metadata(user.user_key)
185
+ f.save!
186
+ f.request_transfer_to(another_user)
187
+ end
188
+ end
189
+ it "should be successful" do
190
+ delete :destroy, id: another_user.proxy_deposit_requests.first
191
+ expect(response).to redirect_to @routes.url_helpers.transfers_path
192
+ expect(flash[:notice]).to eq("Transfer canceled")
193
+ end
194
+ end
195
+
196
+ context "accepting one that isn't mine" do
197
+ let!(:incoming_file) do
198
+ GenericFile.new.tap do |f|
199
+ f.apply_depositor_metadata(another_user.user_key)
200
+ f.save!
201
+ f.request_transfer_to(user)
202
+ end
203
+ end
204
+ it "should not allow me" do
205
+ delete :destroy, id: user.proxy_deposit_requests.first
206
+ expect(response).to redirect_to root_path
207
+ expect(flash[:alert]).to eq("You are not authorized to access this page.")
208
+ end
209
+ end
210
+ end
211
+ end
212
+ end