sufia 0.0.1.pre2 → 0.0.1

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. data/Gemfile +2 -5
  2. data/README.md +44 -12
  3. data/app/assets/javascripts/{scholarsphere.js → sufia.js} +0 -0
  4. data/app/assets/stylesheets/{scholarsphere.css → sufia.css} +0 -0
  5. data/app/controllers/batch_controller.rb +2 -3
  6. data/app/controllers/batch_edits_controller.rb +4 -4
  7. data/app/controllers/dashboard_controller.rb +5 -3
  8. data/app/controllers/generic_files_controller.rb +77 -41
  9. data/app/controllers/users_controller.rb +9 -21
  10. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +2 -2
  11. data/app/helpers/sufia_helper.rb +23 -2
  12. data/app/models/datastreams/file_content_datastream.rb +17 -9
  13. data/app/models/generic_file.rb +1 -809
  14. data/app/views/_add_assets_links.html.erb +1 -1
  15. data/app/views/_user_util_links.html.erb +2 -2
  16. data/app/views/batch/_metadata.html.erb +16 -16
  17. data/app/views/batch/edit.html.erb +16 -10
  18. data/app/views/batch_edits/_metadata.html.erb +16 -16
  19. data/app/views/catalog/_index_partials/_list_files.html.erb +2 -2
  20. data/app/views/catalog/index.html.erb +5 -0
  21. data/app/views/dashboard/_facet_limit.html.erb +1 -1
  22. data/app/views/dashboard/_facet_pagination.html.erb +4 -4
  23. data/app/views/dashboard/_facet_selected.html.erb +1 -1
  24. data/app/views/dashboard/_index_partials/_list_files.html.erb +8 -8
  25. data/app/views/dashboard/_search_form.html.erb +1 -1
  26. data/app/views/dashboard/_sort_and_per_page.html.erb +1 -1
  27. data/app/views/dashboard/index.html.erb +0 -1
  28. data/app/views/generic_files/_breadcrumbs.html.erb +1 -1
  29. data/app/views/generic_files/_descriptions.html.erb +3 -3
  30. data/app/views/generic_files/_field_form +3 -3
  31. data/app/views/generic_files/_media_display.html.erb +5 -4
  32. data/app/views/generic_files/_permission.html.erb +5 -5
  33. data/app/views/generic_files/_versioning.html.erb +1 -1
  34. data/app/views/generic_files/edit.html.erb +2 -2
  35. data/app/views/generic_files/show.html.erb +3 -3
  36. data/app/views/static/versions.html.erb +1 -1
  37. data/app/views/users/edit.html.erb +5 -3
  38. data/app/views/users/index.html.erb +3 -3
  39. data/app/views/users/show.html.erb +6 -6
  40. data/config/jetty.yml +6 -0
  41. data/config/routes.rb +8 -4
  42. data/features/browse_dashboard_files.feature +11 -1
  43. data/features/browse_files.feature +6 -5
  44. data/features/contact_form.feature +4 -0
  45. data/features/display_dashboard.feature +6 -3
  46. data/features/ingest_upload_files.feature +2 -2
  47. data/features/step_definitions/fixture_steps.rb +6 -5
  48. data/features/step_definitions/scholarsphere.rb +24 -1
  49. data/features/step_definitions/user_steps.rb +2 -2
  50. data/features/step_definitions/web_steps.rb +1 -1
  51. data/features/support/env.rb +26 -0
  52. data/features/users.feature +18 -0
  53. data/lib/active_support/core_ext/marshal.rb +22 -0
  54. data/lib/generators/sufia/sufia_generator.rb +18 -2
  55. data/lib/generators/sufia/templates/catalog_controller.rb +3 -4
  56. data/{spec/support → lib/generators/sufia/templates}/config/redis.yml +0 -0
  57. data/lib/generators/sufia/templates/config/sufia.rb +68 -0
  58. data/lib/generators/sufia/templates/migrations/add_ldap_attrs_to_user.rb +41 -0
  59. data/lib/kaminari/helpers/tag.rb +11 -0
  60. data/lib/sufia.rb +30 -7
  61. data/lib/sufia/controller.rb +1 -5
  62. data/lib/sufia/generic_file.rb +200 -0
  63. data/lib/sufia/generic_file/audit.rb +119 -0
  64. data/lib/sufia/generic_file/characterization.rb +82 -0
  65. data/lib/sufia/generic_file/export.rb +339 -0
  66. data/lib/sufia/generic_file/permissions.rb +64 -0
  67. data/lib/sufia/generic_file/thumbnail.rb +68 -0
  68. data/{app/models → lib/sufia/jobs}/audit_job.rb +13 -3
  69. data/lib/sufia/jobs/batch_update_job.rb +86 -0
  70. data/lib/sufia/jobs/characterize_job.rb +35 -0
  71. data/{app/models → lib/sufia/jobs}/content_delete_event_job.rb +3 -1
  72. data/{app/models → lib/sufia/jobs}/content_deposit_event_job.rb +1 -1
  73. data/{app/models → lib/sufia/jobs}/content_new_version_event_job.rb +1 -1
  74. data/{app/models → lib/sufia/jobs}/content_restored_version_event_job.rb +8 -0
  75. data/{app/models → lib/sufia/jobs}/content_update_event_job.rb +1 -1
  76. data/{app/models → lib/sufia/jobs}/event_job.rb +7 -3
  77. data/{app/models → lib/sufia/jobs}/resolrize_job.rb +4 -2
  78. data/lib/sufia/jobs/transcode_video_job.rb +79 -0
  79. data/{app/models → lib/sufia/jobs}/unzip_job.rb +11 -3
  80. data/{app/models → lib/sufia/jobs}/user_edit_profile_event_job.rb +6 -0
  81. data/{app/models → lib/sufia/jobs}/user_follow_event_job.rb +9 -4
  82. data/{app/models → lib/sufia/jobs}/user_unfollow_event_job.rb +6 -0
  83. data/lib/sufia/queue/resque.rb +30 -0
  84. data/lib/sufia/role_mapper.rb +0 -1
  85. data/{app/models/characterize_job.rb → lib/sufia/solr_document_behavior.rb} +6 -7
  86. data/lib/sufia/user.rb +3 -3
  87. data/lib/sufia/version.rb +1 -1
  88. data/lib/tasks/fixtures.rake +38 -38
  89. data/lib/tasks/resque.rake +1 -0
  90. data/solr_conf/conf/solrconfig.xml +32 -1615
  91. data/solr_conf/solr.xml +1 -1
  92. data/spec/active_fedora/unsaved_digital_object_spec.rb +4 -4
  93. data/spec/config/host_to_vhost_spec.rb +4 -4
  94. data/spec/controllers/authorities_controller_spec.rb +1 -1
  95. data/spec/controllers/batch_controller_spec.rb +12 -10
  96. data/spec/controllers/catalog_controller_spec.rb +13 -13
  97. data/spec/controllers/dashboard_controller_spec.rb +15 -15
  98. data/spec/controllers/downloads_controller_spec.rb +14 -14
  99. data/spec/controllers/generic_files_controller_spec.rb +88 -46
  100. data/spec/controllers/mailbox_controller_spec.rb +2 -2
  101. data/spec/controllers/sessions_controller_spec.rb +1 -1
  102. data/spec/controllers/single_use_link_controller_spec.rb +18 -18
  103. data/spec/controllers/users_controller_spec.rb +47 -31
  104. data/spec/fixtures/countdown.avi +0 -0
  105. data/spec/fixtures/sufia/.gitignore +1 -0
  106. data/spec/fixtures/{scholarsphere → sufia}/bg_header.jpg +0 -0
  107. data/spec/fixtures/sufia/sufia_test1.descMeta.txt +12 -0
  108. data/spec/fixtures/{scholarsphere → sufia}/sufia_test1.foxml.erb +2 -2
  109. data/spec/fixtures/{scholarsphere/scholarsphere_test1.txt → sufia/sufia_test1.txt} +0 -0
  110. data/spec/fixtures/sufia/sufia_test2.descMeta.txt +12 -0
  111. data/spec/fixtures/{scholarsphere/scholarsphere_test2.docx → sufia/sufia_test2.docx} +0 -0
  112. data/spec/fixtures/{scholarsphere/scholarsphere_test2.foxml.erb → sufia/sufia_test2.foxml.erb} +6 -6
  113. data/spec/fixtures/sufia/sufia_test3.descMeta.txt +12 -0
  114. data/spec/fixtures/{scholarsphere/scholarsphere_test3.foxml.erb → sufia/sufia_test3.foxml.erb} +6 -6
  115. data/spec/fixtures/{scholarsphere/scholarsphere_test3.xls → sufia/sufia_test3.xls} +0 -0
  116. data/spec/fixtures/sufia/sufia_test4.descMeta.txt +12 -0
  117. data/spec/fixtures/{scholarsphere/scholarsphere_test4.foxml.erb → sufia/sufia_test4.foxml.erb} +6 -6
  118. data/spec/fixtures/{scholarsphere/scholarsphere_test4.pdf → sufia/sufia_test4.pdf} +0 -0
  119. data/spec/fixtures/sufia/sufia_test5.descMeta.txt +19 -0
  120. data/spec/fixtures/{scholarsphere → sufia}/sufia_test5.foxml.erb +3 -3
  121. data/spec/fixtures/{scholarsphere/scholarsphere_test5.mp3 → sufia/sufia_test5.mp3} +0 -0
  122. data/spec/fixtures/sufia/sufia_test5.txt +1 -0
  123. data/spec/fixtures/sufia/sufia_test6.descMeta.txt +12 -0
  124. data/spec/fixtures/{scholarsphere/scholarsphere_test6.foxml.erb → sufia/sufia_test6.foxml.erb} +6 -6
  125. data/spec/fixtures/{scholarsphere/scholarsphere_test6.jp2 → sufia/sufia_test6.jp2} +0 -0
  126. data/spec/fixtures/sufia/sufia_test6.txt +1 -0
  127. data/spec/fixtures/sufia_generic_stub.descMeta.txt +12 -0
  128. data/spec/fixtures/{scholarsphere_generic_stub.foxml.erb → sufia_generic_stub.foxml.erb} +3 -3
  129. data/spec/fixtures/sufia_generic_stub.txt +1 -0
  130. data/spec/lib/sufia/role_mapper_spec.rb +1 -1
  131. data/spec/models/audit_job_spec.rb +8 -11
  132. data/spec/models/batch_spec.rb +5 -5
  133. data/spec/models/batch_update_job_spec.rb +18 -15
  134. data/spec/models/checksum_audit_log_spec.rb +6 -19
  135. data/spec/models/event_jobs_spec.rb +23 -23
  136. data/spec/models/file_content_datastream_spec.rb +14 -14
  137. data/spec/models/fits_datastream_spec.rb +1 -1
  138. data/spec/models/generic_file_spec.rb +88 -41
  139. data/spec/models/single_use_link_spec.rb +3 -3
  140. data/spec/models/transcode_video_job_spec.rb +30 -0
  141. data/spec/models/unzip_job_spec.rb +6 -4
  142. data/spec/rake/{scholarsphere_fixtures_spec.rb → sufia_fixtures_spec.rb} +16 -16
  143. data/spec/routing/route_spec.rb +4 -8
  144. data/spec/spec_helper.rb +0 -7
  145. data/spec/support/Gemfile +4 -2
  146. data/spec/support/fedora_conf/fedora.fcfg +953 -0
  147. data/spec/support/lib/generators/test_app_generator.rb +1 -11
  148. data/sufia.gemspec +5 -3
  149. data/tasks/{scholarsphere-db.rake → sufia-db.rake} +1 -1
  150. data/tasks/{scholarsphere-dev.rake → sufia-dev.rake} +7 -3
  151. data/tasks/{scholarsphere-fixtures.rake → sufia-fixtures.rake} +43 -43
  152. data/tasks/{scholarsphere.rake → sufia.rake} +2 -2
  153. metadata +126 -95
  154. data/app/models/batch_update_job.rb +0 -82
  155. data/app/models/solr_document.rb +0 -50
  156. data/lib/sufia/permissions.rb +0 -43
  157. data/spec/fixtures/scholarsphere/scholarsphere_test1.descMeta.txt +0 -12
  158. data/spec/fixtures/scholarsphere/scholarsphere_test2.descMeta.txt +0 -12
  159. data/spec/fixtures/scholarsphere/scholarsphere_test3.descMeta.txt +0 -12
  160. data/spec/fixtures/scholarsphere/scholarsphere_test4.descMeta.txt +0 -12
  161. data/spec/fixtures/scholarsphere/scholarsphere_test5.descMeta.txt +0 -19
  162. data/spec/fixtures/scholarsphere/scholarsphere_test5.txt +0 -1
  163. data/spec/fixtures/scholarsphere/scholarsphere_test6.descMeta.txt +0 -12
  164. data/spec/fixtures/scholarsphere/scholarsphere_test6.txt +0 -1
  165. data/spec/fixtures/scholarsphere/sufia_scholarsphere1.descMeta.txt +0 -12
  166. data/spec/fixtures/scholarsphere/sufia_scholarsphere1.foxml.erb +0 -79
  167. data/spec/fixtures/scholarsphere/sufia_scholarsphere1.txt +0 -1
  168. data/spec/fixtures/scholarsphere_generic_stub.descMeta.txt +0 -12
  169. data/spec/fixtures/scholarsphere_generic_stub.txt +0 -1
@@ -22,7 +22,7 @@ describe MailboxController do
22
22
  @subject = "Test Subject"
23
23
  @rec1 = @another_user.send_message(@user, @message, @subject)
24
24
  @rec2 = @user.send_message(@another_user, @message, @subject)
25
- MailboxController.any_instance.stubs(:authenticate_user!).returns(true)
25
+ MailboxController.any_instance.stub(:authenticate_user!).and_return(true)
26
26
  sign_in @user
27
27
  end
28
28
  after(:each) do
@@ -31,7 +31,7 @@ describe MailboxController do
31
31
  end
32
32
  describe "#index" do
33
33
  it "should show message" do
34
- User.any_instance.expects(:mark_as_read)
34
+ User.any_instance.should_receive(:mark_as_read)
35
35
  get :index
36
36
  response.should be_success
37
37
  assigns[:messages].first.last_message.body.should == 'Test Message'
@@ -30,7 +30,7 @@ describe SessionsController do
30
30
  describe "#destroy" do
31
31
  it "should redirect to the central logout page and destroy the cookie" do
32
32
  request.env['COSIGN_SERVICE'] = 'cosign-gamma-ci.dlt.psu.edu'
33
- cookies.expects(:delete).with('cosign-gamma-ci.dlt.psu.edu')
33
+ cookies.should_receive(:delete).with('cosign-gamma-ci.dlt.psu.edu')
34
34
  get :destroy
35
35
  response.should redirect_to Sufia::Engine.config.logout_url
36
36
  end
@@ -2,9 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe SingleUseLinkController do
4
4
  before(:all) do
5
- User.any_instance.stubs(:groups).returns([])
5
+ User.any_instance.stub(:groups).and_return([])
6
6
 
7
- GenericFile.any_instance.stubs(:terms_of_service).returns('1')
7
+ GenericFile.any_instance.stub(:terms_of_service).and_return('1')
8
8
  @user = FactoryGirl.find_or_create(:user)
9
9
  @file = GenericFile.new
10
10
  @file.set_title_and_label('world.png')
@@ -23,17 +23,17 @@ describe SingleUseLinkController do
23
23
  @file2.delete
24
24
  end
25
25
  before do
26
- controller.stubs(:has_access?).returns(true)
27
- controller.stubs(:clear_session_user) ## Don't clear out the authenticated session
26
+ controller.stub(:has_access?).and_return(true)
27
+ controller.stub(:clear_session_user) ## Don't clear out the authenticated session
28
28
  end
29
29
  describe "logged in user" do
30
30
  before do
31
31
  @user = FactoryGirl.find_or_create(:user)
32
32
  sign_in @user
33
33
  @now = DateTime.now
34
- DateTime.stubs(:now).returns(@now)
34
+ DateTime.stub(:now).and_return(@now)
35
35
  @hash = "sha2hash"+@now.to_f.to_s
36
- Digest::SHA2.expects(:new).returns(@hash)
36
+ Digest::SHA2.should_receive(:new).and_return(@hash)
37
37
  end
38
38
  after do
39
39
  sign_out @user
@@ -41,7 +41,7 @@ describe SingleUseLinkController do
41
41
  @user.delete
42
42
  end
43
43
  describe "GET 'generate_download'" do
44
- it "returns http success" do
44
+ it "and_return http success" do
45
45
  get 'generate_download', id:@file.pid
46
46
  response.should be_success
47
47
  assigns[:link].should == @routes.url_helpers.download_single_use_link_path(@hash)
@@ -49,7 +49,7 @@ describe SingleUseLinkController do
49
49
  end
50
50
 
51
51
  describe "GET 'generate_show'" do
52
- it "returns http success" do
52
+ it "and_return http success" do
53
53
  get 'generate_show', id:@file.pid
54
54
  response.should be_success
55
55
  assigns[:link].should == @routes.url_helpers.show_single_use_link_path(@hash)
@@ -58,14 +58,14 @@ describe SingleUseLinkController do
58
58
  end
59
59
  describe "unkown user" do
60
60
  describe "GET 'generate_download'" do
61
- it "returns http failure" do
61
+ it "and_return http failure" do
62
62
  get 'generate_download', id:@file.pid
63
63
  response.should_not be_success
64
64
  end
65
65
  end
66
66
 
67
67
  describe "GET 'generate_show'" do
68
- it "returns http failure" do
68
+ it "and_return http failure" do
69
69
  get 'generate_show', id:@file.pid
70
70
  response.should_not be_success
71
71
  end
@@ -85,35 +85,35 @@ describe SingleUseLinkController do
85
85
  @user.delete
86
86
  end
87
87
  describe "GET 'download'" do
88
- it "returns http success" do
89
- controller.stubs(:render)
88
+ it "and_return http success" do
89
+ controller.stub(:render)
90
90
  expected_content = ActiveFedora::Base.find(@file.pid).content.content
91
- controller.expects(:send_data).with(expected_content, {:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
91
+ controller.should_receive(:send_data).with(expected_content, {:filename => 'world.png', :disposition => 'inline', :type => 'image/png' })
92
92
  get :download, id:@dhash
93
93
  response.should be_success
94
94
  end
95
- it "returns 404 on second attempt" do
95
+ it "and_return 404 on second attempt" do
96
96
  get :download, id:@dhash
97
97
  response.should be_success
98
98
  lambda {get :download, id:@dhash}.should raise_error ActionController::RoutingError
99
99
  end
100
- it "returns 404 on attempt to get download with show" do
100
+ it "and_return 404 on attempt to get download with show" do
101
101
  lambda {get :download, id:@shash}.should raise_error ActionController::RoutingError
102
102
  end
103
103
  end
104
104
 
105
105
  describe "GET 'show'" do
106
- it "returns http success" do
106
+ it "and_return http success" do
107
107
  get 'show', id:@shash
108
108
  response.should be_success
109
109
  assigns[:generic_file].pid.should == @file.pid
110
110
  end
111
- it "returns 404 on second attempt" do
111
+ it "and_return 404 on second attempt" do
112
112
  get :show, id:@shash
113
113
  response.should be_success
114
114
  lambda {get :show, id:@shash}.should raise_error ActionController::RoutingError
115
115
  end
116
- it "returns 404 on attempt to get show with download" do
116
+ it "and_return 404 on attempt to get show with download" do
117
117
  lambda {get :show, id:@dhash}.should raise_error ActionController::RoutingError
118
118
  end
119
119
  end
@@ -19,8 +19,8 @@ describe UsersController do
19
19
  @user = FactoryGirl.find_or_create(:user)
20
20
  @another_user = FactoryGirl.find_or_create(:archivist)
21
21
  sign_in @user
22
- User.any_instance.stubs(:groups).returns([])
23
- controller.stubs(:clear_session_user) ## Don't clear out the authenticated session
22
+ User.any_instance.stub(:groups).and_return([])
23
+ controller.stub(:clear_session_user) ## Don't clear out the authenticated session
24
24
  end
25
25
  after(:all) do
26
26
  @user = FactoryGirl.find(:user) rescue
@@ -50,51 +50,59 @@ describe UsersController do
50
50
  end
51
51
  it "redirects to show profile when user attempts to edit another profile" do
52
52
  get :edit, uid: @another_user.user_key
53
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
53
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
54
54
  flash[:alert].should include("You cannot edit archivist1@example.com's profile")
55
55
  end
56
56
  end
57
57
  describe "#update" do
58
58
  it "should not allow other users to update" do
59
59
  post :update, uid: @another_user.user_key, user: { avatar: nil }
60
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
60
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
61
61
  flash[:alert].should include("You cannot edit archivist1@example.com's profile")
62
62
  end
63
63
  it "should set an avatar and redirect to profile" do
64
64
  @user.avatar.file?.should be_false
65
- Resque.expects(:enqueue).with(UserEditProfileEventJob, @user.user_key).once
65
+ s1 = stub('one')
66
+ UserEditProfileEventJob.should_receive(:new).with(@user.user_key).and_return(s1)
67
+ Sufia.queue.should_receive(:push).with(s1).once
66
68
  f = fixture_file_upload('/world.png', 'image/png')
67
69
  post :update, uid: @user.user_key, user: { avatar: f }
68
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
70
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
69
71
  flash[:notice].should include("Your profile has been updated")
70
72
  User.find_by_user_key(@user.user_key).avatar.file?.should be_true
71
73
  end
72
74
  it "should validate the content type of an avatar" do
73
- Resque.expects(:enqueue).with(UserEditProfileEventJob, @user.user_key).never
75
+ #Resque.should_receive(:enqueue).with(UserEditProfileEventJob, @user.user_key).never
76
+ Sufia.queue.should_receive(:push).never
74
77
  f = fixture_file_upload('/image.jp2', 'image/jp2')
75
78
  post :update, uid: @user.user_key, user: { avatar: f }
76
- response.should redirect_to(@routes.url_helpers.edit_profile_path(@user.user_key))
79
+ response.should redirect_to(@routes.url_helpers.edit_profile_path(URI.escape(@user.user_key,'@.')))
77
80
  flash[:alert].should include("Avatar content type is invalid")
78
81
  end
79
82
  it "should validate the size of an avatar" do
80
83
  f = fixture_file_upload('/4-20.png', 'image/png')
81
- Resque.expects(:enqueue).with(UserEditProfileEventJob, @user.user_key).never
84
+ #Resque.should_receive(:enqueue).with(UserEditProfileEventJob, @user.user_key).never
85
+ Sufia.queue.should_receive(:push).never
82
86
  post :update, uid: @user.user_key, user: { avatar: f }
83
- response.should redirect_to(@routes.url_helpers.edit_profile_path(@user.user_key))
87
+ response.should redirect_to(@routes.url_helpers.edit_profile_path(URI.escape(@user.user_key,'@.')))
84
88
  flash[:alert].should include("Avatar file size must be less than 2097152 Bytes")
85
89
  end
86
90
  it "should delete an avatar" do
87
- Resque.expects(:enqueue).with(UserEditProfileEventJob, @user.user_key).once
91
+ s1 = stub('one')
92
+ UserEditProfileEventJob.should_receive(:new).with(@user.user_key).and_return(s1)
93
+ Sufia.queue.should_receive(:push).with(s1).once
88
94
  post :update, uid: @user.user_key, delete_avatar: true
89
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
95
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
90
96
  flash[:notice].should include("Your profile has been updated")
91
97
  @user.avatar.file?.should be_false
92
98
  end
93
99
  it "should refresh directory attributes" do
94
- Resque.expects(:enqueue).with(UserEditProfileEventJob, @user.user_key).once
95
- User.any_instance.expects(:populate_attributes).once
100
+ s1 = stub('one')
101
+ UserEditProfileEventJob.should_receive(:new).with(@user.user_key).and_return(s1)
102
+ Sufia.queue.should_receive(:push).with(s1).once
103
+ User.any_instance.should_receive(:populate_attributes).once
96
104
  post :update, uid: @user.user_key, update_directory: true
97
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
105
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
98
106
  flash[:notice].should include("Your profile has been updated")
99
107
  end
100
108
  it "should set an social handles" do
@@ -102,7 +110,7 @@ describe UsersController do
102
110
  @user.facebook_handle.blank?.should be_true
103
111
  @user.googleplus_handle.blank?.should be_true
104
112
  post :update, uid: @user.user_key, user: { twitter_handle: 'twit', facebook_handle: 'face', googleplus_handle: 'goo' }
105
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
113
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
106
114
  flash[:notice].should include("Your profile has been updated")
107
115
  u = User.find_by_user_key(@user.user_key)
108
116
  u.twitter_handle.should == 'twit'
@@ -116,44 +124,52 @@ describe UsersController do
116
124
  end
117
125
  it "should follow another user if not already following, and log an event" do
118
126
  @user.following?(@another_user).should be_false
119
- Resque.expects(:enqueue).with(UserFollowEventJob, @user.user_key, @another_user.user_key).once
127
+ s1 = stub('one')
128
+ UserFollowEventJob.should_receive(:new).with(@user.user_key, @another_user.user_key).and_return(s1)
129
+ Sufia.queue.should_receive(:push).with(s1).once
120
130
  post :follow, uid: @another_user.user_key
121
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
131
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
122
132
  flash[:notice].should include("You are following #{@another_user.user_key}")
123
133
  end
124
134
  it "should redirect to profile if already following and not log an event" do
125
- User.any_instance.stubs(:following?).with(@another_user).returns(true)
126
- Resque.expects(:enqueue).with(UserFollowEventJob, @user.user_key, @another_user.user_key).never
135
+ User.any_instance.stub(:following?).with(@another_user).and_return(true)
136
+ #Resque.should_receive(:enqueue).with(UserFollowEventJob, @user.user_key, @another_user.user_key).never
137
+ Sufia.queue.should_receive(:push).never
127
138
  post :follow, uid: @another_user.user_key
128
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
139
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
129
140
  flash[:notice].should include("You are following #{@another_user.user_key}")
130
141
  end
131
142
  it "should redirect to profile if user attempts to self-follow and not log an event" do
132
- Resque.expects(:enqueue).with(UserFollowEventJob, @user.user_key, @user.user_key).never
143
+ #Resque.should_receive(:enqueue).with(UserFollowEventJob, @user.user_key, @user.user_key).never
144
+ Sufia.queue.should_receive(:push).never
133
145
  post :follow, uid: @user.user_key
134
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
146
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
135
147
  flash[:alert].should include("You cannot follow or unfollow yourself")
136
148
  end
137
149
  end
138
150
  describe "#unfollow" do
139
151
  it "should unfollow another user if already following, and log an event" do
140
- User.any_instance.stubs(:following?).with(@another_user).returns(true)
141
- Resque.expects(:enqueue).with(UserUnfollowEventJob, @user.user_key, @another_user.user_key).once
152
+ User.any_instance.stub(:following?).with(@another_user).and_return(true)
153
+ s1 = stub('one')
154
+ UserUnfollowEventJob.should_receive(:new).with(@user.user_key, @another_user.user_key).and_return(s1)
155
+ Sufia.queue.should_receive(:push).with(s1).once
142
156
  post :unfollow, uid: @another_user.user_key
143
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
157
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
144
158
  flash[:notice].should include("You are no longer following #{@another_user.user_key}")
145
159
  end
146
160
  it "should redirect to profile if not following and not log an event" do
147
- @user.stubs(:following?).with(@another_user).returns(false)
148
- Resque.expects(:enqueue).with(UserUnfollowEventJob, @user.user_key, @another_user.user_key).never
161
+ @user.stub(:following?).with(@another_user).and_return(false)
162
+ #Resque.should_receive(:enqueue).with(UserUnfollowEventJob, @user.user_key, @another_user.user_key).never
163
+ Sufia.queue.should_receive(:push).never
149
164
  post :unfollow, uid: @another_user.user_key
150
- response.should redirect_to(@routes.url_helpers.profile_path(@another_user.user_key))
165
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@another_user.user_key,'@.')))
151
166
  flash[:notice].should include("You are no longer following #{@another_user.user_key}")
152
167
  end
153
168
  it "should redirect to profile if user attempts to self-follow and not log an event" do
154
- Resque.expects(:enqueue).with(UserUnfollowEventJob, @user.user_key, @user.user_key).never
169
+ #Resque.should_receive(:enqueue).with(UserUnfollowEventJob, @user.user_key, @user.user_key).never
170
+ Sufia.queue.should_receive(:push).never
155
171
  post :unfollow, uid: @user.user_key
156
- response.should redirect_to(@routes.url_helpers.profile_path(@user.user_key))
172
+ response.should redirect_to(@routes.url_helpers.profile_path(URI.escape(@user.user_key,'@.')))
157
173
  flash[:alert].should include("You cannot follow or unfollow yourself")
158
174
  end
159
175
  end
Binary file
@@ -0,0 +1 @@
1
+ sufia_test?.foxml.xml
@@ -0,0 +1,12 @@
1
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/publisher> "archivist1" .
2
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/description> "Test Document Text Description" .
3
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/created> "4/11/2012" .
4
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/contributor> "archivist1" .
5
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/title> "Test Document Text" .
6
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/relation> "test" .
7
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/subject> "Plain Text Test" .
8
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/language> "En" .
9
+ <info:fedora/sufia:test1> <http://xmlns.com/foaf/0.1/based_near> "State College" .
10
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/rights> "archivist1@example.com" .
11
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/creator> "archivist1@example.com" .
12
+ <info:fedora/sufia:test1> <http://purl.org/dc/terms/identifier> "Test" .
@@ -21,7 +21,7 @@
21
21
  </foxml:datastream>
22
22
  <foxml:datastream CONTROL_GROUP="M" ID="descMetadata" STATE="A" VERSIONABLE="true">
23
23
  <foxml:datastreamVersion ID="descMetadata.0" LABEL="" MIMETYPE="text/plain">
24
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test1.descMeta.txt" TYPE="URL"/>
24
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test1.descMeta.txt" TYPE="URL"/>
25
25
  </foxml:datastreamVersion>
26
26
  </foxml:datastream>
27
27
  <foxml:datastream ID="properties" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
@@ -50,7 +50,7 @@
50
50
  <foxml:datastream CONTROL_GROUP="M" ID="content" STATE="A" VERSIONABLE="true">
51
51
  <foxml:datastreamVersion ID="content.0" LABEL="Test Data 1"
52
52
  MIMETYPE="text/plain" SIZE="25">
53
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test1.txt" TYPE="URL"/>
53
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test1.txt" TYPE="URL"/>
54
54
  </foxml:datastreamVersion>
55
55
  </foxml:datastream>
56
56
  <foxml:datastream CONTROL_GROUP="X" ID="rightsMetadata" STATE="A" VERSIONABLE="true">
@@ -0,0 +1,12 @@
1
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/publisher> "archivist1" .
2
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/description> "Test Document Word DocX Description" .
3
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/created> "4/11/2012" .
4
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/contributor> "archivist1" .
5
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/title> "Test Document Word DocX" .
6
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/relation> "test" .
7
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/subject> "Word DocX Test" .
8
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/language> "En" .
9
+ <info:fedora/sufia:test2> <http://xmlns.com/foaf/0.1/based_near> "State College" .
10
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/rights> "archivist1@example.com" .
11
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/creator> "archivist1@example.com" .
12
+ <info:fedora/sufia:test2> <http://purl.org/dc/terms/identifier> "Test" .
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <foxml:digitalObject PID="scholarsphere:test2" VERSION="1.1" xmlns:foxml="info:fedora/fedora-system:def/foxml#"
2
+ <foxml:digitalObject PID="sufia:test2" VERSION="1.1" xmlns:foxml="info:fedora/fedora-system:def/foxml#"
3
3
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
4
4
  <foxml:objectProperties>
5
5
  <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="Active"/>
@@ -14,14 +14,14 @@
14
14
  xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
15
15
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
16
16
  <dc:title>Test Document Word DocX</dc:title>
17
- <dc:identifier>scholarsphere:test2</dc:identifier>
17
+ <dc:identifier>sufia:test2</dc:identifier>
18
18
  </oai_dc:dc>
19
19
  </foxml:xmlContent>
20
20
  </foxml:datastreamVersion>
21
21
  </foxml:datastream>
22
22
  <foxml:datastream CONTROL_GROUP="M" ID="descMetadata" STATE="A" VERSIONABLE="true">
23
23
  <foxml:datastreamVersion ID="descMetadata.0" LABEL="" MIMETYPE="text/plain">
24
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test2.descMeta.txt" TYPE="URL"/>
24
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test2.descMeta.txt" TYPE="URL"/>
25
25
  </foxml:datastreamVersion>
26
26
  </foxml:datastream>
27
27
  <foxml:datastream CONTROL_GROUP="X" ID="RELS-EXT" STATE="A" VERSIONABLE="true">
@@ -29,7 +29,7 @@
29
29
  LABEL="Fedora Object-to-Object Relationship Metadata" MIMETYPE="application/rdf+xml" SIZE="286">
30
30
  <foxml:xmlContent>
31
31
  <rdf:RDF xmlns:ns0="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
32
- <rdf:Description rdf:about="info:fedora/scholarsphere:test2">
32
+ <rdf:Description rdf:about="info:fedora/sufia:test2">
33
33
  <ns0:hasModel rdf:resource="info:fedora/afmodel:GenericFile"/>
34
34
  </rdf:Description>
35
35
  </rdf:RDF>
@@ -49,7 +49,7 @@
49
49
  <foxml:datastream CONTROL_GROUP="M" ID="content" STATE="A" VERSIONABLE="true">
50
50
  <foxml:datastreamVersion ID="content.0" LABEL="Test Data 1"
51
51
  MIMETYPE="text/plain" SIZE="25">
52
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test2.docx" TYPE="URL"/>
52
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test2.docx" TYPE="URL"/>
53
53
  </foxml:datastreamVersion>
54
54
  </foxml:datastream>
55
55
  <foxml:datastream CONTROL_GROUP="X" ID="rightsMetadata" STATE="A" VERSIONABLE="true">
@@ -74,7 +74,7 @@
74
74
  <access type="edit">
75
75
  <human/>
76
76
  <machine>
77
- <person>archivist1</person>
77
+ <person>archivist1@example.com</person>
78
78
  </machine>
79
79
  </access>
80
80
  <embargo>
@@ -0,0 +1,12 @@
1
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/publisher> "archivist1" .
2
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/description> "Test Document Text Description" .
3
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/created> "4/11/2012" .
4
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/contributor> "archivist1" .
5
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/title> "Test Document Text" .
6
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/relation> "test" .
7
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/subject> "Plain Text Test" .
8
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/language> "En" .
9
+ <info:fedora/sufia:test3> <http://xmlns.com/foaf/0.1/based_near> "State College" .
10
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/rights> "archivist1@example.com" .
11
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/creator> "archivist1@example.com" .
12
+ <info:fedora/sufia:test3> <http://purl.org/dc/terms/identifier> "Test" .
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <foxml:digitalObject PID="scholarsphere:test3" VERSION="1.1" xmlns:foxml="info:fedora/fedora-system:def/foxml#"
2
+ <foxml:digitalObject PID="sufia:test3" VERSION="1.1" xmlns:foxml="info:fedora/fedora-system:def/foxml#"
3
3
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
4
4
  <foxml:objectProperties>
5
5
  <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="Active"/>
@@ -14,14 +14,14 @@
14
14
  xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
15
15
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
16
16
  <dc:title>Test Data Excel</dc:title>
17
- <dc:identifier>scholarsphere:test3</dc:identifier>
17
+ <dc:identifier>sufia:test3</dc:identifier>
18
18
  </oai_dc:dc>
19
19
  </foxml:xmlContent>
20
20
  </foxml:datastreamVersion>
21
21
  </foxml:datastream>
22
22
  <foxml:datastream CONTROL_GROUP="M" ID="descMetadata" STATE="A" VERSIONABLE="true">
23
23
  <foxml:datastreamVersion ID="descMetadata.0" LABEL="" MIMETYPE="text/plain">
24
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test3.descMeta.txt" TYPE="URL"/>
24
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test3.descMeta.txt" TYPE="URL"/>
25
25
  </foxml:datastreamVersion>
26
26
  </foxml:datastream>
27
27
  <foxml:datastream CONTROL_GROUP="X" ID="RELS-EXT" STATE="A" VERSIONABLE="true">
@@ -29,7 +29,7 @@
29
29
  LABEL="Fedora Object-to-Object Relationship Metadata" MIMETYPE="application/rdf+xml" SIZE="286">
30
30
  <foxml:xmlContent>
31
31
  <rdf:RDF xmlns:ns0="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
32
- <rdf:Description rdf:about="info:fedora/scholarsphere:test3">
32
+ <rdf:Description rdf:about="info:fedora/sufia:test3">
33
33
  <ns0:hasModel rdf:resource="info:fedora/afmodel:GenericFile"/>
34
34
  </rdf:Description>
35
35
  </rdf:RDF>
@@ -50,7 +50,7 @@
50
50
  <foxml:datastream CONTROL_GROUP="M" ID="content" STATE="A" VERSIONABLE="true">
51
51
  <foxml:datastreamVersion ID="content.0" LABEL="Test Data 1"
52
52
  MIMETYPE="application/excel">
53
- <foxml:contentLocation REF="file:<%=@localDir%>/scholarsphere/scholarsphere_test3.xls" TYPE="URL"/>
53
+ <foxml:contentLocation REF="file:<%=@localDir%>/sufia/sufia_test3.xls" TYPE="URL"/>
54
54
  </foxml:datastreamVersion>
55
55
  </foxml:datastream>
56
56
  <foxml:datastream CONTROL_GROUP="X" ID="rightsMetadata" STATE="A" VERSIONABLE="true">
@@ -77,7 +77,7 @@
77
77
  <human/>
78
78
  <machine>
79
79
 
80
- <person>archivist1</person>
80
+ <person>archivist1@example.com</person>
81
81
  </machine>
82
82
  </access>
83
83
  <embargo>