sufia 5.0.0 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -8
  3. data/Gemfile +3 -12
  4. data/History.md +0 -36
  5. data/LICENSE.md +14 -0
  6. data/README.md +4 -8
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/javascripts/sufia.js +1 -17
  9. data/app/assets/javascripts/sufia/batch_edit.js +43 -28
  10. data/app/assets/javascripts/sufia/edit_metadata.js +9 -14
  11. data/app/assets/javascripts/sufia/multiForm.js +67 -0
  12. data/app/assets/javascripts/sufia/permissions.js +92 -35
  13. data/app/assets/stylesheets/sufia.css.scss +1 -6
  14. data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -8
  15. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -15
  16. data/app/assets/stylesheets/sufia/_file-listing.scss +1 -1
  17. data/app/assets/stylesheets/sufia/_settings.scss +0 -1
  18. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +3 -10
  19. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -8
  20. data/app/controllers/concerns/sufia/catalog.rb +1 -1
  21. data/app/controllers/concerns/sufia/controller.rb +3 -1
  22. data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +1 -1
  23. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  24. data/app/controllers/concerns/sufia/files_controller_behavior.rb +16 -4
  25. data/app/controllers/concerns/sufia/homepage_controller.rb +1 -1
  26. data/app/controllers/concerns/sufia/my_controller_behavior.rb +2 -2
  27. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +3 -4
  28. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -7
  29. data/app/controllers/my/collections_controller.rb +3 -4
  30. data/app/controllers/my/highlights_controller.rb +2 -2
  31. data/app/controllers/my/shares_controller.rb +3 -3
  32. data/app/controllers/single_use_links_controller.rb +5 -9
  33. data/app/controllers/single_use_links_viewer_controller.rb +4 -4
  34. data/app/helpers/generic_file_helper.rb +9 -0
  35. data/app/helpers/sufia/records_helper_behavior.rb +16 -0
  36. data/app/helpers/sufia/sufia_helper_behavior.rb +0 -11
  37. data/app/jobs/content_depositor_change_event_job.rb +1 -1
  38. data/app/jobs/ingest_local_file_job.rb +2 -1
  39. data/app/models/concerns/sufia/solr_document_behavior.rb +10 -10
  40. data/app/models/featured_work_list.rb +7 -9
  41. data/app/presenters/sufia/version_list_presenter.rb +15 -0
  42. data/app/presenters/sufia/version_presenter.rb +30 -0
  43. data/app/views/batch/_metadata.html.erb +51 -29
  44. data/app/views/batch/_more_metadata.html.erb +1 -1
  45. data/app/views/batch/edit.html.erb +10 -8
  46. data/app/views/batch_edits/edit.html.erb +13 -9
  47. data/app/views/collections/_edit_descriptions.html.erb +1 -1
  48. data/app/views/collections/_form.html.erb +4 -4
  49. data/app/views/collections/_form_for_select_collection.html.erb +1 -1
  50. data/app/views/collections/_show_document_list_menu.html.erb +7 -5
  51. data/app/views/collections/_show_document_list_row.html.erb +2 -2
  52. data/app/views/collections/edit.html.erb +0 -1
  53. data/app/views/collections/edit_fields/_description.html.erb +4 -0
  54. data/app/views/collections/edit_fields/_title.html.erb +3 -0
  55. data/app/views/collections/show.html.erb +0 -1
  56. data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
  57. data/app/views/generic_files/_descriptions.html.erb +9 -9
  58. data/app/views/generic_files/_field_form.html.erb +11 -25
  59. data/app/views/generic_files/_permission.html.erb +6 -4
  60. data/app/views/generic_files/_permission_form.html.erb +15 -17
  61. data/app/views/generic_files/_show_details.html.erb +1 -11
  62. data/app/views/generic_files/_versioning.html.erb +5 -5
  63. data/app/views/generic_files/edit.html.erb +5 -4
  64. data/app/views/generic_files/show.html.erb +6 -6
  65. data/app/views/homepage/_featured_fields.html.erb +2 -2
  66. data/app/views/homepage/_recent_document.html.erb +1 -1
  67. data/app/views/layouts/_head_tag_content.html.erb +0 -2
  68. data/app/views/layouts/error.html.erb +0 -1
  69. data/app/views/my/_index_partials/_default_group.html.erb +1 -1
  70. data/app/views/my/_index_partials/_list_files.html.erb +1 -1
  71. data/app/views/my/index.html.erb +2 -2
  72. data/app/views/records/_edit_field.html.erb +17 -19
  73. data/app/views/records/edit_fields/_default.html.erb +10 -12
  74. data/app/views/records/edit_fields/_description.html.erb +10 -3
  75. data/app/views/records/edit_fields/_resource_type.html.erb +4 -5
  76. data/app/views/records/edit_fields/_rights.html.erb +9 -2
  77. data/app/views/records/edit_fields/_suffix.html.erb +10 -0
  78. data/app/views/records/edit_fields/_type.html.erb +8 -2
  79. data/app/views/records/show_fields/_based_near.html.erb +1 -1
  80. data/app/views/records/show_fields/_creator.html.erb +1 -1
  81. data/app/views/records/show_fields/_language.html.erb +1 -1
  82. data/app/views/records/show_fields/_publisher.html.erb +1 -1
  83. data/app/views/records/show_fields/_resource_type.html.erb +1 -1
  84. data/app/views/records/show_fields/_subject.html.erb +1 -1
  85. data/app/views/records/show_fields/_tag.html.erb +1 -1
  86. data/app/views/single_use_links/new_download.html.erb +2 -2
  87. data/app/views/users/_profile.html.erb +2 -1
  88. data/app/views/users/_social_media_info.html.erb +20 -0
  89. data/app/views/users/_user_info.html.erb +3 -20
  90. data/app/views/users/edit.html.erb +2 -11
  91. data/app/views/users/show.html.erb +1 -1
  92. data/bin/audit_repository +1 -1
  93. data/config/initializers/sufia_events.rb +4 -4
  94. data/config/locales/sufia.en.yml +0 -5
  95. data/config/routes.rb +1 -1
  96. data/lib/generators/sufia/install_generator.rb +0 -4
  97. data/lib/generators/sufia/templates/catalog_controller.rb +59 -59
  98. data/lib/sufia.rb +1 -4
  99. data/lib/sufia/version.rb +1 -1
  100. data/spec/actors/generic_file/actor_spec.rb +67 -8
  101. data/spec/controllers/batch_controller_spec.rb +72 -86
  102. data/spec/controllers/batch_edits_controller_spec.rb +17 -19
  103. data/spec/controllers/catalog_controller_spec.rb +16 -24
  104. data/spec/controllers/collections_controller_spec.rb +47 -74
  105. data/spec/controllers/downloads_controller_spec.rb +40 -35
  106. data/spec/controllers/generic_files_controller_spec.rb +363 -428
  107. data/spec/controllers/homepage_controller_spec.rb +12 -9
  108. data/spec/controllers/mailbox_controller_spec.rb +1 -4
  109. data/spec/controllers/my/files_controller_spec.rb +0 -10
  110. data/spec/controllers/single_use_links_controller_spec.rb +28 -35
  111. data/spec/controllers/single_use_links_viewer_controller_spec.rb +27 -41
  112. data/spec/controllers/transfers_controller_spec.rb +6 -6
  113. data/spec/controllers/users_controller_spec.rb +121 -124
  114. data/spec/factories/generic_files.rb +9 -17
  115. data/spec/features/browse_dashboard_files_spec.rb +8 -10
  116. data/spec/features/browse_files_spec.rb +12 -25
  117. data/spec/features/catalog_search_spec.rb +49 -49
  118. data/spec/features/collection_spec.rb +18 -24
  119. data/spec/features/contact_form_spec.rb +26 -20
  120. data/spec/features/ingest_upload_files_spec.rb +8 -6
  121. data/spec/features/ownership_transfer_spec.rb +2 -6
  122. data/spec/features/proxy_spec.rb +1 -1
  123. data/spec/features/search_spec.rb +2 -3
  124. data/spec/features/single_use_links_spec.rb +1 -1
  125. data/spec/features/users_spec.rb +1 -1
  126. data/spec/helpers/records_helper_spec.rb +24 -10
  127. data/spec/jobs/active_fedora_pid_based_job_spec.rb +1 -5
  128. data/spec/jobs/audit_job_spec.rb +66 -21
  129. data/spec/jobs/batch_update_job_spec.rb +49 -36
  130. data/spec/jobs/content_depositor_change_event_job_spec.rb +2 -4
  131. data/spec/jobs/create_derivatives_job_spec.rb +18 -19
  132. data/spec/jobs/event_jobs_spec.rb +17 -21
  133. data/spec/jobs/import_url_job_spec.rb +1 -6
  134. data/spec/jobs/ingest_local_file_job_spec.rb +0 -4
  135. data/spec/lib/sufia/breadcrumbs_spec.rb +8 -46
  136. data/spec/lib/sufia/id_service_spec.rb +8 -3
  137. data/spec/lib/sufia/user_stat_importer_spec.rb +18 -25
  138. data/spec/lib/sufia/writable_permissions_spec.rb +0 -4
  139. data/spec/models/ability_spec.rb +25 -18
  140. data/spec/models/batch_spec.rb +16 -45
  141. data/spec/models/characterization_spec.rb +1 -1
  142. data/spec/models/checksum_audit_log_spec.rb +51 -29
  143. data/spec/models/collection_spec.rb +0 -5
  144. data/spec/models/featured_work_list_spec.rb +2 -4
  145. data/spec/models/file_content_datastream_spec.rb +27 -60
  146. data/spec/models/file_usage_spec.rb +16 -21
  147. data/spec/models/fits_datastream_spec.rb +47 -2
  148. data/spec/models/generic_file/web_form_spec.rb +1 -1
  149. data/spec/models/generic_file_spec.rb +238 -735
  150. data/spec/models/local_authority_spec.rb +8 -13
  151. data/spec/models/proxy_deposit_request_spec.rb +3 -7
  152. data/spec/models/single_use_link_spec.rb +12 -16
  153. data/spec/models/solr_document_spec.rb +1 -1
  154. data/spec/models/trophy_spec.rb +1 -3
  155. data/spec/models/user_spec.rb +47 -75
  156. data/spec/presenters/sufia/version_list_presenter_spec.rb +22 -0
  157. data/spec/presenters/sufia/version_presenter_spec.rb +51 -0
  158. data/spec/services/generic_file_audit_service_spec.rb +85 -0
  159. data/spec/services/repository_audit_service_spec.rb +18 -0
  160. data/spec/spec_helper.rb +26 -7
  161. data/spec/support/fixture_helpers.rb +2 -4
  162. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -4
  163. data/spec/views/batch/edit.html.erb_spec.rb +17 -7
  164. data/spec/views/catalog/index.html.erb_spec.rb +8 -6
  165. data/spec/views/collections/_form.html.erb_spec.rb +4 -2
  166. data/spec/views/collections/_show_document_list.erb_spec.rb +31 -0
  167. data/spec/views/dashboard/index_spec.rb +2 -2
  168. data/spec/views/generic_file/edit.html.erb_spec.rb +20 -6
  169. data/spec/views/generic_file/show.html.erb_spec.rb +3 -3
  170. data/spec/views/users/show.html.erb_spec.rb +1 -1
  171. data/sufia-models/app/actors/sufia/generic_file/actor.rb +8 -10
  172. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +2 -3
  173. data/sufia-models/app/jobs/audit_job.rb +46 -32
  174. data/sufia-models/app/jobs/batch_update_job.rb +9 -8
  175. data/sufia-models/app/jobs/import_url_job.rb +2 -2
  176. data/sufia-models/app/models/batch.rb +11 -12
  177. data/sufia-models/app/models/checksum_audit_log.rb +12 -10
  178. data/sufia-models/app/models/concerns/sufia/ability.rb +4 -6
  179. data/sufia-models/app/models/concerns/sufia/collection.rb +4 -5
  180. data/sufia-models/app/models/concerns/sufia/generic_file.rb +3 -86
  181. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +29 -0
  182. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
  183. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +13 -0
  184. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
  185. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +4 -0
  186. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
  187. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
  188. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
  189. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
  190. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +4 -4
  191. data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
  192. data/sufia-models/app/models/concerns/sufia/model_methods.rb +11 -9
  193. data/sufia-models/app/models/concerns/sufia/user.rb +11 -33
  194. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -1
  195. data/sufia-models/app/models/datastreams/fits_datastream.rb +1 -1
  196. data/sufia-models/app/models/file_usage.rb +3 -3
  197. data/sufia-models/app/models/local_authority.rb +2 -2
  198. data/sufia-models/app/models/proxy_deposit_request.rb +1 -1
  199. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +83 -0
  200. data/sufia-models/app/services/sufia/id_service.rb +5 -5
  201. data/sufia-models/app/services/sufia/noid.rb +10 -7
  202. data/sufia-models/app/services/sufia/repository_audit_service.rb +9 -0
  203. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
  204. data/sufia-models/lib/generators/sufia/models/install_generator.rb +31 -11
  205. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +31 -2
  206. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
  207. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
  208. data/sufia-models/lib/sufia/models/engine.rb +13 -4
  209. data/sufia-models/lib/sufia/models/file_content/versions.rb +9 -11
  210. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +5 -9
  211. data/sufia-models/lib/sufia/models/version.rb +1 -1
  212. data/sufia-models/lib/sufia/permissions/writable.rb +34 -16
  213. data/sufia-models/sufia-models.gemspec +4 -2
  214. data/sufia.gemspec +4 -5
  215. data/tasks/jetty.rake +0 -26
  216. data/tasks/sufia-dev.rake +14 -2
  217. metadata +49 -64
  218. data/LICENSE +0 -15
  219. data/app/assets/images/orcid.png +0 -0
  220. data/app/assets/javascripts/sufia/manage_repeating_fields.js +0 -74
  221. data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +0 -67
  222. data/app/inputs/multi_value_input.rb +0 -84
  223. data/app/views/records/_rights_modal.html.erb +0 -1
  224. data/config/initializers/simple_form.rb +0 -167
  225. data/config/initializers/simple_form_bootstrap.rb +0 -137
  226. data/config/locales/simple_form.en.yml +0 -31
  227. data/fedora_conf/conf/development/fedora.fcfg +0 -946
  228. data/fedora_conf/conf/test/fedora.fcfg +0 -946
  229. data/spec/models/generic_file/reload_on_save_spec.rb +0 -25
  230. data/spec/models/generic_file_rdf_datastream_spec.rb +0 -12
  231. data/spec/models/properties_datastream_spec.rb +0 -41
  232. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +0 -19
  233. data/sufia-models/app/models/concerns/sufia/generic_file/audit.rb +0 -116
  234. data/sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
  235. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
  236. data/sufia-models/app/models/datastreams/batch_rdf_datastream.rb +0 -6
  237. data/sufia-models/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
  238. data/sufia-models/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
  239. data/sufia-models/app/models/datastreams/properties_datastream.rb +0 -4
  240. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -8
  241. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  242. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  244. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
@@ -1,20 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'event jobs' do
4
- before(:each) do
4
+ before do
5
5
  @user = FactoryGirl.find_or_create(:jill)
6
6
  @another_user = FactoryGirl.find_or_create(:archivist)
7
7
  @third_user = FactoryGirl.find_or_create(:curator)
8
- @gf = GenericFile.new(pid: 'test:123')
8
+ @gf = GenericFile.new(id: 'test-123')
9
9
  @gf.apply_depositor_metadata(@user)
10
10
  @gf.title = ['Hamlet']
11
11
  @gf.save
12
12
  end
13
- after(:each) do
14
- @gf.delete
15
- @user.delete
16
- @another_user.delete
17
- @third_user.delete
13
+ after do
18
14
  $redis.keys('events:*').each { |key| $redis.del key }
19
15
  $redis.keys('User:*').each { |key| $redis.del key }
20
16
  $redis.keys('GenericFile:*').each { |key| $redis.del key }
@@ -75,8 +71,8 @@ describe 'event jobs' do
75
71
  expect(@third_user.events.length).to eq(0)
76
72
  expect(@gf.events.length).to eq(0)
77
73
  expect(Time).to receive(:now).at_least(:once).and_return(1)
78
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has deposited <a href="/files/123">Hamlet</a>', timestamp: '1' }
79
- ContentDepositEventJob.new('test:123', @user.user_key).run
74
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has deposited <a href="/files/test-123">Hamlet</a>', timestamp: '1' }
75
+ ContentDepositEventJob.new('test-123', @user.user_key).run
80
76
  expect(@user.profile_events.length).to eq(1)
81
77
  expect(@user.profile_events.first).to eq(event)
82
78
  expect(@another_user.events.length).to eq(1)
@@ -91,8 +87,8 @@ describe 'event jobs' do
91
87
  @third_user.follow(@another_user)
92
88
  allow_any_instance_of(User).to receive(:can?).and_return(true)
93
89
  allow(Time).to receive(:now).at_least(:once).and_return(1)
94
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has transferred <a href="/files/123">Hamlet</a> to user <a href="/users/archivist1@example-dot-com">archivist1@example.com</a>', timestamp: '1' }
95
- ContentDepositorChangeEventJob.new('test:123', @another_user.user_key).run
90
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has transferred <a href="/files/test-123">Hamlet</a> to user <a href="/users/archivist1@example-dot-com">archivist1@example.com</a>', timestamp: '1' }
91
+ ContentDepositorChangeEventJob.new('test-123', @another_user.user_key).run
96
92
  expect(@user.profile_events.length).to eq(1)
97
93
  expect(@user.profile_events.first).to eq(event)
98
94
  expect(@another_user.events.length).to eq(1)
@@ -112,8 +108,8 @@ describe 'event jobs' do
112
108
  expect(@third_user.events.length).to eq(0)
113
109
  expect(@gf.events.length).to eq(0)
114
110
  expect(Time).to receive(:now).at_least(:once).and_return(1)
115
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has updated <a href="/files/123">Hamlet</a>', timestamp: '1' }
116
- ContentUpdateEventJob.new('test:123', @user.user_key).run
111
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has updated <a href="/files/test-123">Hamlet</a>', timestamp: '1' }
112
+ ContentUpdateEventJob.new('test-123', @user.user_key).run
117
113
  expect(@user.profile_events.length).to eq(1)
118
114
  expect(@user.profile_events.first).to eq(event)
119
115
  expect(@another_user.events.length).to eq(1)
@@ -133,8 +129,8 @@ describe 'event jobs' do
133
129
  expect(@third_user.events.length).to eq(0)
134
130
  expect(@gf.events.length).to eq(0)
135
131
  expect(Time).to receive(:now).at_least(:once).and_return(1)
136
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has added a new version of <a href="/files/123">Hamlet</a>', timestamp: '1' }
137
- ContentNewVersionEventJob.new('test:123', @user.user_key).run
132
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has added a new version of <a href="/files/test-123">Hamlet</a>', timestamp: '1' }
133
+ ContentNewVersionEventJob.new('test-123', @user.user_key).run
138
134
  expect(@user.profile_events.length).to eq(1)
139
135
  expect(@user.profile_events.first).to eq(event)
140
136
  expect(@another_user.events.length).to eq(1)
@@ -154,8 +150,8 @@ describe 'event jobs' do
154
150
  expect(@third_user.events.length).to eq(0)
155
151
  expect(@gf.events.length).to eq(0)
156
152
  expect(Time).to receive(:now).at_least(:once).and_return(1)
157
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has restored a version \'content.0\' of <a href="/files/123">Hamlet</a>', timestamp: '1' }
158
- ContentRestoredVersionEventJob.new('test:123', @user.user_key, 'content.0').run
153
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has restored a version \'content.0\' of <a href="/files/test-123">Hamlet</a>', timestamp: '1' }
154
+ ContentRestoredVersionEventJob.new('test-123', @user.user_key, 'content.0').run
159
155
  expect(@user.profile_events.length).to eq(1)
160
156
  expect(@user.profile_events.first).to eq(event)
161
157
  expect(@another_user.events.length).to eq(1)
@@ -173,8 +169,8 @@ describe 'event jobs' do
173
169
  expect(@another_user.events.length).to eq(0)
174
170
  expect(@third_user.events.length).to eq(0)
175
171
  expect(Time).to receive(:now).at_least(:once).and_return(1)
176
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has deleted file \'123\'', timestamp: '1' }
177
- ContentDeleteEventJob.new('test:123', @user.user_key).run
172
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has deleted file \'test-123\'', timestamp: '1' }
173
+ ContentDeleteEventJob.new('test-123', @user.user_key).run
178
174
  expect(@user.profile_events.length).to eq(1)
179
175
  expect(@user.profile_events.first).to eq(event)
180
176
  expect(@another_user.events.length).to eq(1)
@@ -192,8 +188,8 @@ describe 'event jobs' do
192
188
  expect(@gf.events.length).to eq(0)
193
189
  @now = Time.now
194
190
  expect(Time).to receive(:now).at_least(:once).and_return(@now)
195
- event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has updated <a href="/files/123">Hamlet</a>', timestamp: @now.to_i.to_s }
196
- ContentUpdateEventJob.new('test:123', @user.user_key).run
191
+ event = {action: 'User <a href="/users/jilluser@example-dot-com">jilluser@example.com</a> has updated <a href="/files/test-123">Hamlet</a>', timestamp: @now.to_i.to_s }
192
+ ContentUpdateEventJob.new('test-123', @user.user_key).run
197
193
  expect(@user.profile_events.length).to eq(1)
198
194
  expect(@user.profile_events.first).to eq(event)
199
195
  expect(@another_user.events.length).to eq(0)
@@ -18,14 +18,10 @@ describe ImportUrlJob do
18
18
  let(:mock_response) do
19
19
  double('response').tap do |http_res|
20
20
  allow(http_res).to receive(:start).and_yield
21
- allow(http_res).to receive(:read_body).and_yield(File.open(File.expand_path('../../fixtures/world.png', __FILE__)).read)
21
+ allow(http_res).to receive(:read_body).and_yield(File.open(File.expand_path('../../fixtures/world.png', __FILE__)).read)
22
22
  end
23
23
  end
24
24
 
25
- after do
26
- generic_file.destroy
27
- end
28
-
29
25
  subject(:job) { ImportUrlJob.new(generic_file.id) }
30
26
 
31
27
  it "should have no content at the outset" do
@@ -49,7 +45,6 @@ describe ImportUrlJob do
49
45
  expect_any_instance_of(Net::HTTP).to receive(:request_get).with(file_hash).and_yield(mock_response)
50
46
  job.run
51
47
  expect(generic_file.reload.content.size).to eq 4218
52
- expect(generic_file.content.dsLabel).to eq file_path
53
48
  expect(user.mailbox.inbox.first.last_message.body).to eq("The file (#{file_path}) was successfully imported.")
54
49
  end
55
50
  end
@@ -15,10 +15,6 @@ describe IngestLocalFileJob do
15
15
  FileUtils.copy(File.expand_path('../../fixtures/world.png', __FILE__), @mock_upload_directory)
16
16
  end
17
17
 
18
- after do
19
- generic_file.destroy
20
- end
21
-
22
18
  it "should have attached a file" do
23
19
  job.run
24
20
  expect(generic_file.reload.content.size).to eq(4218)
@@ -54,63 +54,25 @@ describe Sufia::Breadcrumbs do
54
54
  expect(crumbs.trail_from_referer).to eql([[I18n.t('sufia.bread_crumb.search_results'), referer]])
55
55
  end
56
56
  end
57
- context "when coming places other than the catalog" do
57
+ context "when coming from the dashboard" do
58
58
  before do
59
- allow(crumbs.request).to receive(:referer).and_return("http://...blargh/")
59
+ allow(crumbs.request).to receive(:referer).and_return("http://...dashboard/")
60
60
  allow(crumbs).to receive(:user_signed_in?) { true }
61
- allow(crumbs).to receive(:action_name).and_return("view")
62
61
  end
63
62
  specify "the trail goes back to the user's files" do
64
63
  allow(crumbs).to receive(:controller_name).and_return("my/files")
65
- crumbs.trail_from_referer
66
- expect(crumbs.trail.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
67
- expect(crumbs.trail.last).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
64
+ expect(crumbs.trail_from_referer.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
65
+ expect(crumbs.trail_from_referer.last).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
68
66
  end
69
67
  specify "the trail goes back to the user's collections" do
70
68
  allow(crumbs).to receive(:controller_name).and_return("my/collections")
71
- crumbs.trail_from_referer
72
- expect(crumbs.trail.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
73
- expect(crumbs.trail.last).to eql([I18n.t('sufia.dashboard.my.collections'), sufia.dashboard_collections_path])
69
+ expect(crumbs.trail_from_referer.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
70
+ expect(crumbs.trail_from_referer.last).to eql([I18n.t('sufia.dashboard.my.collections'), sufia.dashboard_collections_path])
74
71
  end
75
72
  specify "the trail goes back to the user's files when on the batch edit page" do
76
73
  allow(crumbs).to receive(:controller_name).and_return("batch_edit")
77
- crumbs.trail_from_referer
78
- expect(crumbs.trail.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
79
- expect(crumbs.trail.last).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
80
- end
81
- end
82
-
83
- context "when editing a file" do
84
- before do
85
- allow(crumbs.request).to receive(:referer).and_return("http://...blargh/")
86
- allow(crumbs).to receive(:user_signed_in?) { true }
87
- allow(crumbs).to receive(:action_name).and_return("edit")
88
- allow(crumbs).to receive(:params).and_return({"id" => "abc123"})
89
- allow(crumbs).to receive(:controller_name).and_return("generic_files")
90
- end
91
-
92
- specify "the trail goes back to the user's files and the browse view" do
93
- crumbs.trail_from_referer
94
- expect(crumbs.trail.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
95
- expect(crumbs.trail[1]).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
96
- expect(crumbs.trail.last).to eql([I18n.t('sufia.generic_file.browse_view'), sufia.generic_file_path("abc123")])
97
- end
98
- end
99
-
100
- context "when viewing file statistics" do
101
- before do
102
- allow(crumbs.request).to receive(:referer).and_return("http://...blargh/")
103
- allow(crumbs).to receive(:user_signed_in?) { true }
104
- allow(crumbs).to receive(:action_name).and_return("stats")
105
- allow(crumbs).to receive(:params).and_return({"id" => "abc123"})
106
- allow(crumbs).to receive(:controller_name).and_return("generic_files")
107
- end
108
-
109
- specify "the trail goes back to the user's files and the browse view" do
110
- crumbs.trail_from_referer
111
- expect(crumbs.trail.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
112
- expect(crumbs.trail[1]).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
113
- expect(crumbs.trail.last).to eql([I18n.t('sufia.generic_file.browse_view'), sufia.generic_file_path("abc123")])
74
+ expect(crumbs.trail_from_referer.first).to eql([I18n.t('sufia.dashboard.title'), sufia.dashboard_index_path])
75
+ expect(crumbs.trail_from_referer.last).to eql([I18n.t('sufia.dashboard.my.files'), sufia.dashboard_files_path])
114
76
  end
115
77
  end
116
78
  end
@@ -10,13 +10,18 @@ describe Sufia::IdService do
10
10
  expect(Sufia::IdService.mint).to_not eq subject
11
11
  end
12
12
 
13
- it "should be valid" do
13
+ it "should be valid" do
14
14
  expect(Sufia::IdService.valid?(subject)).to be true
15
15
  end
16
16
 
17
+ it "should be reversable" do
18
+ new_id = Sufia::IdService.mint
19
+ expect(Sufia::Noid.noidify(new_id)).to eq new_id
20
+ end
21
+
17
22
  context "when the pid already exists in Fedora" do
18
- let(:mock_pid) { 'scholarsphere:ef12ef12f' }
19
- let(:unique_pid) { 'scholarsphere:bb22bb22b' }
23
+ let(:mock_pid) { 'ef12ef12f' }
24
+ let(:unique_pid) { 'bb22bb22b' }
20
25
 
21
26
  before do
22
27
  allow(Sufia::IdService).to receive(:next_id).and_return(mock_pid, unique_pid)
@@ -4,13 +4,6 @@ require_relative '../../../sufia-models/lib/sufia/models/stats/user_stat_importe
4
4
  describe Sufia::UserStatImporter do
5
5
 
6
6
  before do
7
- GenericFile.delete_all
8
- User.delete_all
9
-
10
- UserStat.delete_all
11
- FileViewStat.delete_all
12
- FileDownloadStat.delete_all
13
-
14
7
  allow(Sufia.config).to receive(:analytic_start_date) { dates[0] }
15
8
  stub_out_call_to_google_analytics
16
9
  end
@@ -19,21 +12,21 @@ describe Sufia::UserStatImporter do
19
12
  let(:frodo) { FactoryGirl.create(:user, email: 'frodo@example.com') }
20
13
 
21
14
  let!(:bilbo_file_1) do
22
- GenericFile.new(pid: 'bilbo:1').tap do |f|
15
+ GenericFile.new(id: 'bilbo1').tap do |f|
23
16
  f.apply_depositor_metadata(bilbo.email)
24
17
  f.save
25
18
  end
26
19
  end
27
20
 
28
21
  let!(:bilbo_file_2) do
29
- GenericFile.new(pid: 'bilbo:2').tap do |f|
22
+ GenericFile.new(id: 'bilbo2').tap do |f|
30
23
  f.apply_depositor_metadata(bilbo.email)
31
24
  f.save
32
25
  end
33
26
  end
34
27
 
35
28
  let!(:frodo_file_1) do
36
- GenericFile.new(pid: 'frodo:1').tap do |f|
29
+ GenericFile.new(id: 'frodo1').tap do |f|
37
30
  f.apply_depositor_metadata(frodo.email)
38
31
  f.save
39
32
  end
@@ -84,31 +77,31 @@ describe Sufia::UserStatImporter do
84
77
 
85
78
  let(:bilbo_file_1_download_stats) {
86
79
  [
87
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:1", date: date_strs[0], totalEvents: "2"),
88
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:1", date: date_strs[1], totalEvents: "3"),
89
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:1", date: date_strs[2], totalEvents: "5"),
90
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:1", date: date_strs[3], totalEvents: "3"),
91
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:1", date: date_strs[4], totalEvents: "7"),
80
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo1", date: date_strs[0], totalEvents: "2"),
81
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo1", date: date_strs[1], totalEvents: "3"),
82
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo1", date: date_strs[2], totalEvents: "5"),
83
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo1", date: date_strs[3], totalEvents: "3"),
84
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo1", date: date_strs[4], totalEvents: "7"),
92
85
  ]
93
86
  }
94
87
 
95
88
  let(:bilbo_file_2_download_stats) {
96
89
  [
97
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:2", date: date_strs[0], totalEvents: "1"),
98
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:2", date: date_strs[1], totalEvents: "4"),
99
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:2", date: date_strs[2], totalEvents: "3"),
100
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:2", date: date_strs[3], totalEvents: "2"),
101
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo:2", date: date_strs[4], totalEvents: "3"),
90
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo2", date: date_strs[0], totalEvents: "1"),
91
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo2", date: date_strs[1], totalEvents: "4"),
92
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo2", date: date_strs[2], totalEvents: "3"),
93
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo2", date: date_strs[3], totalEvents: "2"),
94
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "bilbo2", date: date_strs[4], totalEvents: "3"),
102
95
  ]
103
96
  }
104
97
 
105
98
  let(:frodo_file_1_download_stats) {
106
99
  [
107
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo:1", date: date_strs[0], totalEvents: "5"),
108
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo:1", date: date_strs[1], totalEvents: "4"),
109
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo:1", date: date_strs[2], totalEvents: "2"),
110
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo:1", date: date_strs[3], totalEvents: "1"),
111
- OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo:1", date: date_strs[4], totalEvents: "6"),
100
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo1", date: date_strs[0], totalEvents: "5"),
101
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo1", date: date_strs[1], totalEvents: "4"),
102
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo1", date: date_strs[2], totalEvents: "2"),
103
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo1", date: date_strs[3], totalEvents: "1"),
104
+ OpenStruct.new(eventCategory: "Files", eventAction: "Downloaded", eventLabel: "frodo1", date: date_strs[4], totalEvents: "6"),
112
105
  ]
113
106
  }
114
107
 
@@ -7,10 +7,6 @@ describe Sufia::Permissions::Writable do
7
7
  end
8
8
  let(:subject) { SampleModel.new }
9
9
 
10
- it "should initialized with a parnoid rightsMetadata datastream" do
11
- expect(subject.rightsMetadata).to be_kind_of ParanoidRightsDatastream
12
- end
13
-
14
10
  describe "#permissions" do
15
11
  it "should initialize with nothing specified" do
16
12
  expect(subject.permissions).to be_empty
@@ -27,6 +27,7 @@ describe Sufia::Ability, :type => :model do
27
27
  it { is_expected.to be_able_to(:update, ContentBlock) }
28
28
  end
29
29
 
30
+
30
31
  describe "proxies and transfers" do
31
32
  let(:sender) { FactoryGirl.find_or_create(:jill) }
32
33
  let(:user) { FactoryGirl.find_or_create(:archivist) }
@@ -37,38 +38,44 @@ describe Sufia::Ability, :type => :model do
37
38
  end
38
39
  end
39
40
  subject { Ability.new(user) }
40
- it { is_expected.not_to be_able_to(:transfer, file.pid) }
41
+ it { should_not be_able_to(:transfer, file.id) }
42
+
43
+ describe "depositor_for_document" do
44
+ it "should return the depositor" do
45
+ expect(subject.send(:depositor_for_document, file.id)).to eq sender.user_key
46
+ end
47
+ end
41
48
 
42
49
  context "with a ProxyDepositRequest for a file they have deposited" do
43
50
  subject { Ability.new(sender) }
44
- it { is_expected.to be_able_to(:transfer, file.pid) }
51
+ it { should be_able_to(:transfer, file.id) }
45
52
  end
46
53
 
47
54
  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) }
55
+ let(:request) { ProxyDepositRequest.create!(pid: file.id, receiving_user: user, sending_user: sender) }
56
+ it { should be_able_to(:accept, request) }
57
+ it { should be_able_to(:reject, request) }
58
+ it { should_not be_able_to(:destroy, request) }
52
59
 
53
60
  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) }
61
+ let(:request) { ProxyDepositRequest.create!(pid: file.id, receiving_user: user, sending_user: sender, status: 'accepted') }
62
+ it { should_not be_able_to(:accept, request) }
63
+ it { should_not be_able_to(:reject, request) }
64
+ it { should_not be_able_to(:destroy, request) }
58
65
  end
59
66
  end
60
67
 
61
68
  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) }
69
+ let(:request) { ProxyDepositRequest.create!(pid: file.id, receiving_user: sender, sending_user: user) }
70
+ it { should_not be_able_to(:accept, request) }
71
+ it { should_not be_able_to(:reject, request) }
72
+ it { should be_able_to(:destroy, request) }
66
73
 
67
74
  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) }
75
+ let(:request) { ProxyDepositRequest.create!(pid: file.id, receiving_user: sender, sending_user: user, status: 'accepted') }
76
+ it { should_not be_able_to(:accept, request) }
77
+ it { should_not be_able_to(:reject, request) }
78
+ it { should_not be_able_to(:destroy, request) }
72
79
  end
73
80
  end
74
81
  end
@@ -1,66 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Batch, :type => :model do
4
- before(:all) do
5
- @user = FactoryGirl.find_or_create(:jill)
6
- @file = GenericFile.new
7
- @file.apply_depositor_metadata('mjg36')
8
- @file.save
9
- @batch = Batch.create(title: ["test collection"],
10
- creator: @user.user_key,
11
- part: @file.pid)
12
- end
13
- after(:all) do
14
- @user.delete
15
- @file.delete
16
- @batch.delete
17
- end
18
- it "should have rightsMetadata" do
19
- expect(@batch.rightsMetadata).to be_instance_of Hydra::Datastream::RightsMetadata
20
- end
21
- it "should have dc desc metadata" do
22
- expect(@batch.descMetadata).to be_kind_of BatchRdfDatastream
23
- end
3
+ describe Batch do
4
+ let(:user) { FactoryGirl.find_or_create(:jill) }
5
+ let(:batch) { Batch.create(title: ["test collection"], creator: [user.user_key]) }
6
+
24
7
  it "should belong to testuser" do
25
- expect(@batch.creator).to eq([@user.user_key])
8
+ expect(batch.creator).to eq [user.user_key]
26
9
  end
27
10
  it "should be titled 'test collection'" do
28
- expect(@batch.title).to eq(["test collection"])
11
+ expect(batch.title).to eq ["test collection"]
29
12
  end
30
13
  it "should have generic_files defined" do
31
- expect(@batch).to respond_to(:generic_files)
32
- end
33
- it "should contain one generic file" do
34
- expect(@batch.part).to eq([@file.pid])
35
- end
36
- it "should be able to have more than one file" do
37
- gf = GenericFile.new
38
- gf.apply_depositor_metadata('mjg36')
39
- gf.save
40
- @batch.part << gf.pid
41
- @batch.save
42
- expect(@batch.part).to eq([@file.pid, gf.pid])
43
- gf.delete
14
+ expect(batch).to respond_to(:generic_files)
44
15
  end
16
+
45
17
  it "should support to_solr" do
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
18
+ expect(batch.to_solr).to_not be_nil
19
+ expect(batch.to_solr["batch__title_t"]).to be_nil
20
+ expect(batch.to_solr["batch__creator_t"]).to be_nil
50
21
  end
51
22
  describe "find_or_create" do
52
23
  describe "when the object exists" do
24
+ let! (:batch) { Batch.create(title: ["test collection"], creator: [user.user_key]) }
53
25
  it "should find batch instead of creating" do
54
- expect(Batch).to receive(:create).never
55
- @b2 = Batch.find_or_create( @batch.pid)
26
+ expect(Batch).to_not receive(:create)
27
+ Batch.find_or_create(batch.id)
56
28
  end
57
29
  end
58
30
  describe "when the object does not exist" do
59
31
  it "should create" do
60
- expect {Batch.find("batch:123")}.to raise_error(ActiveFedora::ObjectNotFoundError)
32
+ expect { Batch.find("batch-123") }.to raise_error(ActiveFedora::ObjectNotFoundError)
61
33
  expect(Batch).to receive(:create).once.and_return("the batch")
62
- @b2 = Batch.find_or_create( "batch:123")
63
- expect(@b2).to eq("the batch")
34
+ expect(Batch.find_or_create("batch-123")).to eq "the batch"
64
35
  end
65
36
  end
66
37
  end