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
@@ -13,15 +13,11 @@ describe LocalAuthority, :type => :model do
13
13
  before :all do
14
14
  class MyTestRdfDatastream; end
15
15
  end
16
+
16
17
  after :all do
17
18
  Object.send(:remove_const, :MyTestRdfDatastream)
18
19
  end
19
- after do
20
- DomainTerm.destroy_all
21
- LocalAuthority.destroy_all
22
- LocalAuthorityEntry.destroy_all
23
- end
24
-
20
+
25
21
  it "should harvest an ntriples RDF vocab" do
26
22
  harvest_nt
27
23
  expect(LocalAuthority.count).to eq(1)
@@ -30,7 +26,7 @@ describe LocalAuthority, :type => :model do
30
26
  it "should harvest an RDF/XML vocab (w/ an alt predicate)" do
31
27
  LocalAuthority.harvest_rdf("langs", [fixture_path + '/lexvo.rdf'],
32
28
  format: 'rdfxml',
33
- predicate: RDF::URI("http://www.w3.org/2008/05/skos#prefLabel"))
29
+ predicate: ::RDF::URI("http://www.w3.org/2008/05/skos#prefLabel"))
34
30
  expect(LocalAuthority.count).to eq(1)
35
31
  expect(LocalAuthorityEntry.count).to eq(35)
36
32
  end
@@ -41,9 +37,9 @@ describe LocalAuthority, :type => :model do
41
37
  expect(LocalAuthorityEntry.where(local_authority_id: auth.id).first.uri).to start_with('http://sws.geonames.org/')
42
38
  expect(LocalAuthorityEntry.count).to eq(149)
43
39
  end
44
-
40
+
45
41
  describe "when vocabs are harvested" do
46
-
42
+
47
43
  let(:num_auths) { LocalAuthority.count }
48
44
  let(:num_entries) { LocalAuthorityEntry.count }
49
45
 
@@ -70,9 +66,9 @@ describe LocalAuthority, :type => :model do
70
66
  LocalAuthority.register_vocabulary(MyTestRdfDatastream, "geographic", "geo")
71
67
  expect(DomainTerm.count).to eq(1)
72
68
  end
73
-
69
+
74
70
  describe "when vocabs are registered" do
75
-
71
+
76
72
  before do
77
73
  LocalAuthority.register_vocabulary(MyTestRdfDatastream, "geographic", "geo")
78
74
  LocalAuthority.register_vocabulary(MyTestRdfDatastream, "genre", "genres")
@@ -81,7 +77,7 @@ describe LocalAuthority, :type => :model do
81
77
  it "should have some doamin terms" do
82
78
  expect(DomainTerm.count).to eq(2)
83
79
  end
84
-
80
+
85
81
  it "should return nil for empty queries" do
86
82
  expect(LocalAuthority.entries_by_term("my_test", "geographic", "")).to be_nil
87
83
  end
@@ -97,7 +93,6 @@ describe LocalAuthority, :type => :model do
97
93
  hits = LocalAuthorityEntry.where("local_authority_id in (?)", authorities).where("label like ?", "A%").select("label, uri").limit(25)
98
94
  expect(LocalAuthority.entries_by_term("my_tests", "genre", "A").count).to eq(6)
99
95
  end
100
-
101
96
  end
102
97
  end
103
98
  end
@@ -13,14 +13,10 @@ describe ProxyDepositRequest, type: :model do
13
13
  end
14
14
 
15
15
  subject do
16
- ProxyDepositRequest.new(pid: file.pid, sending_user: sender,
16
+ ProxyDepositRequest.new(pid: file.id, sending_user: sender,
17
17
  receiving_user: receiver, sender_comment: "please take this")
18
18
  end
19
19
 
20
- after do
21
- subject.destroy if subject.persisted?
22
- end
23
-
24
20
  its(:status) { is_expected.to eq 'pending' }
25
21
  it { is_expected.to be_pending }
26
22
  its(:fulfillment_date) { is_expected.to be_nil }
@@ -82,7 +78,7 @@ describe ProxyDepositRequest, type: :model do
82
78
  subject.transfer_to = receiver.user_key
83
79
  subject.save!
84
80
  proxy_request = receiver.proxy_deposit_requests.first
85
- expect(proxy_request.pid).to eq(file.pid)
81
+ expect(proxy_request.pid).to eq(file.id)
86
82
  expect(proxy_request.sending_user).to eq(sender)
87
83
  end
88
84
  end
@@ -98,7 +94,7 @@ describe ProxyDepositRequest, type: :model do
98
94
  context 'when the file is already being transferred' do
99
95
  it 'raises an error' do
100
96
  subject.save!
101
- subject2 = ProxyDepositRequest.new(pid: file.pid, sending_user: sender, receiving_user: receiver2, sender_comment: 'please take this')
97
+ subject2 = ProxyDepositRequest.new(pid: file.id, sending_user: sender, receiving_user: receiver2, sender_comment: 'please take this')
102
98
  expect(subject2).not_to be_valid
103
99
  expect(subject2.errors[:open_transfer]).to eq(['must close open transfer on the file before creating a new one'])
104
100
  end
@@ -1,16 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SingleUseLink, :type => :model do
4
- before(:all) do
3
+ describe SingleUseLink do
4
+ before do
5
5
  @file = GenericFile.new
6
6
  @file.apply_depositor_metadata('mjg36')
7
7
  @file.save
8
8
  end
9
9
 
10
- after(:all) do
11
- @file.destroy
12
- end
13
-
14
10
  let(:file) { @file }
15
11
 
16
12
  describe "create" do
@@ -21,32 +17,32 @@ describe SingleUseLink, :type => :model do
21
17
  expect(Digest::SHA2).to receive(:new).and_return(@hash)
22
18
  end
23
19
  it "should create show link" do
24
- su = SingleUseLink.create itemId: file.pid, path: Sufia::Engine.routes.url_helpers.generic_file_path(file.pid)
20
+ su = SingleUseLink.create itemId: file.id, path: Sufia::Engine.routes.url_helpers.generic_file_path(file.id)
25
21
  expect(su.downloadKey).to eq(@hash)
26
- expect(su.itemId).to eq(file.pid)
27
- expect(su.path).to eq(Sufia::Engine.routes.url_helpers.generic_file_path(file.pid))
22
+ expect(su.itemId).to eq(file.id)
23
+ expect(su.path).to eq(Sufia::Engine.routes.url_helpers.generic_file_path(file.id))
28
24
  su.delete
29
25
  end
30
26
  it "should create show download link" do
31
- su = SingleUseLink.create itemId: file.pid, path: Sufia::Engine.routes.url_helpers.download_path(file.pid)
27
+ su = SingleUseLink.create itemId: file.id, path: Sufia::Engine.routes.url_helpers.download_path(file.id)
32
28
  expect(su.downloadKey).to eq(@hash)
33
- expect(su.itemId).to eq(file.pid)
34
- expect(su.path).to eq(Sufia::Engine.routes.url_helpers.download_path(file.pid))
29
+ expect(su.itemId).to eq(file.id)
30
+ expect(su.path).to eq(Sufia::Engine.routes.url_helpers.download_path(file.id))
35
31
  su.delete
36
32
  end
37
33
  end
38
34
  describe "find" do
39
35
  describe "not expired" do
40
36
  before do
41
- @su = SingleUseLink.create(downloadKey: 'sha2hashb', itemId: file.pid, path: Sufia::Engine.routes.url_helpers.download_path(file.noid), expires: DateTime.now.advance(hours: 1))
37
+ @su = SingleUseLink.create(downloadKey: 'sha2hashb', itemId: file.id, path: Sufia::Engine.routes.url_helpers.download_path(file.noid), expires: DateTime.now.advance(hours: 1))
42
38
  end
43
39
  it "should retrieve link" do
44
40
  link = SingleUseLink.where(downloadKey: 'sha2hashb').first
45
- expect(link.itemId).to eq(file.pid)
41
+ expect(link.itemId).to eq(file.id)
46
42
  end
47
43
  it "should retrieve link with find_by" do
48
44
  link = SingleUseLink.find_by_downloadKey('sha2hashb')
49
- expect(link.itemId).to eq(file.pid)
45
+ expect(link.itemId).to eq(file.id)
50
46
  end
51
47
  it "should expire link" do
52
48
  link = SingleUseLink.where(downloadKey: 'sha2hashb').first
@@ -55,7 +51,7 @@ describe SingleUseLink, :type => :model do
55
51
  end
56
52
  describe "expired" do
57
53
  before do
58
- @su = SingleUseLink.create!(downloadKey: 'sha2hashb', itemId:file.pid, path:Sufia::Engine.routes.url_helpers.download_path(file.noid))
54
+ @su = SingleUseLink.create!(downloadKey: 'sha2hashb', itemId:file.id, path:Sufia::Engine.routes.url_helpers.download_path(file.noid))
59
55
 
60
56
  @su.update_attribute :expires, DateTime.now.advance(hours: -1)
61
57
  end
@@ -4,7 +4,7 @@ describe SolrDocument, :type => :model do
4
4
 
5
5
  describe "date_uploaded" do
6
6
  before do
7
- subject['desc_metadata__date_uploaded_dtsi'] = '2013-03-14T00:00:00Z'
7
+ subject['date_uploaded_dtsi'] = '2013-03-14T00:00:00Z'
8
8
  end
9
9
  it "should be a date" do
10
10
  expect(subject.date_uploaded).to eq '03/14/2013'
@@ -4,14 +4,12 @@ describe Trophy, :type => :model do
4
4
  before(:all) do
5
5
  @trophy = Trophy.create(user_id:99,generic_file_id:"99")
6
6
  end
7
- after(:all) do
8
- @trophy.delete
9
- end
10
7
 
11
8
  it "should have a user" do
12
9
  expect(@trophy).to respond_to(:user_id)
13
10
  expect(@trophy.user_id).to eq(99)
14
11
  end
12
+
15
13
  it "should have a file" do
16
14
  expect(@trophy).to respond_to(:generic_file_id)
17
15
  expect(@trophy.generic_file_id).to eq("99")
@@ -1,92 +1,67 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe User, :type => :model do
4
- before(:all) do
5
- @user = FactoryGirl.find_or_create(:jill)
6
- @another_user = FactoryGirl.find_or_create(:archivist)
7
- end
8
- after(:all) do
9
- @user.destroy
10
- @another_user.destroy
11
- end
4
+ let(:user) { FactoryGirl.build(:user) }
5
+ let(:another_user) { FactoryGirl.build(:user) }
6
+
12
7
  it "should have an email" do
13
- expect(@user.user_key).to eq("jilluser@example.com")
8
+ expect(user.user_key).to be_kind_of String
14
9
  end
15
10
  it "should have activity stream-related methods defined" do
16
- expect(@user).to respond_to(:stream)
17
- expect(@user).to respond_to(:events)
18
- expect(@user).to respond_to(:profile_events)
19
- expect(@user).to respond_to(:create_event)
20
- expect(@user).to respond_to(:log_event)
21
- expect(@user).to respond_to(:log_profile_event)
11
+ expect(user).to respond_to(:stream)
12
+ expect(user).to respond_to(:events)
13
+ expect(user).to respond_to(:profile_events)
14
+ expect(user).to respond_to(:create_event)
15
+ expect(user).to respond_to(:log_event)
16
+ expect(user).to respond_to(:log_profile_event)
22
17
  end
23
18
  it "should have social attributes" do
24
- expect(@user).to respond_to(:twitter_handle)
25
- expect(@user).to respond_to(:facebook_handle)
26
- expect(@user).to respond_to(:googleplus_handle)
27
- expect(@user).to respond_to(:linkedin_handle)
28
- expect(@user).to respond_to(:orcid)
19
+ expect(user).to respond_to(:twitter_handle)
20
+ expect(user).to respond_to(:facebook_handle)
21
+ expect(user).to respond_to(:googleplus_handle)
22
+ expect(user).to respond_to(:linkedin_handle)
29
23
  end
30
- describe 'ORCID validation and normalization' do
31
- it 'saves when a valid bare ORCID is supplied' do
32
- @user.orcid = '0000-0000-1111-2222'
33
- expect(@user).to be_valid
34
- expect(@user.save).to be true
35
- end
36
- it 'saves when a valid ORCID URI is supplied' do
37
- @user.orcid = 'http://orcid.org/0000-0000-1111-2222'
38
- expect(@user).to be_valid
39
- expect(@user.save).to be true
40
- end
41
- it 'normalizes bare ORCIDs to URIs' do
42
- @user.orcid = '0000-0000-1111-2222'
43
- @user.save
44
- expect(@user.orcid).to eq 'http://orcid.org/0000-0000-1111-2222'
45
- end
46
- it 'marks bad ORCIDs as invalid' do
47
- @user.orcid = '000-000-111-222'
48
- expect(@user).not_to be_valid
49
- expect(@user.save).to be false
24
+
25
+ describe "#to_param" do
26
+ let(:user) { User.new(email: 'jilluser@example.com') }
27
+
28
+ it "should override to_param to make keys more recognizable in redis (and useable within Rails URLs)" do
29
+ expect(user.to_param).to eq("jilluser@example-dot-com")
50
30
  end
51
31
  end
52
- it "should redefine to_param to make redis keys more recognizable (and useable within Rails URLs)" do
53
- expect(@user.to_param).to eq("jilluser@example-dot-com")
54
- end
32
+
55
33
  it "should have a cancan ability defined" do
56
- expect(@user).to respond_to(:can?)
34
+ expect(user).to respond_to(:can?)
57
35
  end
58
36
  it "should not have any followers" do
59
- expect(@user.followers_count).to eq(0)
60
- expect(@another_user.follow_count).to eq(0)
37
+ expect(user.followers_count).to eq(0)
38
+ expect(another_user.follow_count).to eq(0)
61
39
  end
62
40
  describe "follow/unfollow" do
63
- before(:all) do
64
- @user = FactoryGirl.find_or_create(:jill)
65
- @another_user = FactoryGirl.find_or_create(:archivist)
66
- @user.follow(@another_user)
67
- end
68
- after do
69
- @user.delete
70
- @another_user.delete
41
+ let(:user) { FactoryGirl.create(:user) }
42
+ let(:another_user) { FactoryGirl.create(:user) }
43
+ before do
44
+ user.follow(another_user)
71
45
  end
46
+
72
47
  it "should be able to follow another user" do
73
- expect(@user).to be_following(@another_user)
74
- expect(@another_user).to_not be_following(@user)
75
- expect(@another_user).to be_followed_by(@user)
76
- expect(@user).to_not be_followed_by(@another_user)
48
+ expect(user).to be_following(another_user)
49
+ expect(another_user).to_not be_following(user)
50
+ expect(another_user).to be_followed_by(user)
51
+ expect(user).to_not be_followed_by(another_user)
77
52
  end
78
53
  it "should be able to unfollow another user" do
79
- @user.stop_following(@another_user)
80
- expect(@user).to_not be_following(@another_user)
81
- expect(@another_user).to_not be_followed_by(@user)
54
+ user.stop_following(another_user)
55
+ expect(user).to_not be_following(another_user)
56
+ expect(another_user).to_not be_followed_by(user)
82
57
  end
83
58
  end
84
59
 
85
60
  describe "trophy_files" do
86
- let(:user) { @user }
87
- let(:file1) { GenericFile.new.tap { |f| f.apply_depositor_metadata(user); f.save! } }
88
- let(:file2) { GenericFile.new.tap { |f| f.apply_depositor_metadata(user); f.save! } }
89
- let(:file3) { GenericFile.new.tap { |f| f.apply_depositor_metadata(user); f.save! } }
61
+ let(:user) { FactoryGirl.create(:user) }
62
+ let(:file1) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
63
+ let(:file2) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
64
+ let(:file3) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
90
65
  let!(:trophy1) { user.trophies.create!(generic_file_id: file1.noid) }
91
66
  let!(:trophy2) { user.trophies.create!(generic_file_id: file2.noid) }
92
67
  let!(:trophy3) { user.trophies.create!(generic_file_id: file3.noid) }
@@ -98,8 +73,7 @@ describe User, :type => :model do
98
73
  end
99
74
 
100
75
  describe "activity streams" do
101
- let(:now){DateTime.now.to_i}
102
- let(:user) { @user }
76
+ let(:now) { DateTime.now.to_i }
103
77
  let(:activities) {
104
78
  [{ action: 'so and so edited their profile', timestamp: now },
105
79
  { action: 'so and so uploaded a file', timestamp: (now - 360 ) }]
@@ -124,19 +98,17 @@ describe User, :type => :model do
124
98
  describe "proxy_deposit_rights" do
125
99
  before do
126
100
  @subject = FactoryGirl.create :curator
127
- @user1 = FactoryGirl.create :jill
128
- @user2 = FactoryGirl.create :archivist
129
- @subject.can_receive_deposits_from << @user1
130
- @subject.can_make_deposits_for << @user2
101
+ @subject.can_receive_deposits_from << user
102
+ @subject.can_make_deposits_for << another_user
131
103
  @subject.save!
132
104
  end
133
105
  it "can_receive_deposits_from" do
134
- expect(@subject.can_receive_deposits_from.to_a).to eq [@user1]
135
- expect(@user1.can_make_deposits_for.to_a).to eq [@subject]
106
+ expect(@subject.can_receive_deposits_from.to_a).to eq [user]
107
+ expect(user.can_make_deposits_for.to_a).to eq [@subject]
136
108
  end
137
109
  it "can_make_deposits_for" do
138
- expect(@subject.can_make_deposits_for.to_a).to eq [@user2]
139
- expect(@user2.can_receive_deposits_from.to_a).to eq [@subject]
110
+ expect(@subject.can_make_deposits_for.to_a).to eq [another_user]
111
+ expect(another_user.can_receive_deposits_from.to_a).to eq [@subject]
140
112
  end
141
113
  end
142
114
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::VersionListPresenter, :no_clean do
4
+ let(:resource_version) do
5
+ ActiveFedora::VersionsGraph::ResourceVersion.new.tap do |v|
6
+ v.uri = 'http://example.com/version1'
7
+ v.label = 'version1'
8
+ v.created = '2014-12-09T02:03:18.296Z'
9
+ end
10
+ end
11
+
12
+ subject { Sufia::VersionListPresenter.new([resource_version]) }
13
+
14
+ describe "#each" do
15
+ it "should yield version_presenters" do
16
+ subject.each do |v|
17
+ expect(v).to be_kind_of Sufia::VersionPresenter
18
+ expect(v.label).to eq 'version1'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::VersionPresenter, :no_clean do
4
+ let(:resource_version) do
5
+ ActiveFedora::VersionsGraph::ResourceVersion.new.tap do |v|
6
+ v.uri = 'http://example.com/version1'
7
+ v.label = 'version1'
8
+ v.created = '2014-12-09T02:03:18.296Z'
9
+ end
10
+ end
11
+
12
+ let(:presenter) { Sufia::VersionPresenter.new(resource_version) }
13
+
14
+ describe "#label" do
15
+ subject { presenter.label }
16
+ it { is_expected.to eq 'version1' }
17
+ end
18
+
19
+ describe "#uri" do
20
+ subject { presenter.uri }
21
+ it { is_expected.to eq 'http://example.com/version1' }
22
+ end
23
+
24
+ describe "#created" do
25
+ before do
26
+ # Stub out the local timezone to (+08:00)
27
+ t2 = Time.new(2014, 12, 8, 18, 3, 18, 8)
28
+ allow_any_instance_of(Time).to receive(:getlocal).and_return(t2)
29
+ end
30
+ subject { presenter.created }
31
+ it { is_expected.to eq "December 8th, 2014 18:03" }
32
+ end
33
+
34
+ describe "#current?" do
35
+ subject { presenter.current? }
36
+ it { is_expected.to be false }
37
+
38
+ context "when current! is set" do
39
+ before { presenter.current! }
40
+ it { is_expected.to be true }
41
+ end
42
+ end
43
+
44
+ describe "#committer" do
45
+ before do
46
+ VersionCommitter.create(version_id: resource_version.uri, committer_login: 'jill')
47
+ end
48
+ subject { presenter.committer }
49
+ it { is_expected.to eq 'jill' }
50
+ end
51
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::GenericFileAuditService do
4
+ let(:f) do
5
+ GenericFile.create do |f|
6
+ f.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
7
+ f.apply_depositor_metadata('mjg36')
8
+ end
9
+ end
10
+
11
+ let(:service) { Sufia::GenericFileAuditService.new(f) }
12
+
13
+ describe "#audit" do
14
+ before do
15
+ # force a second version
16
+ gf = GenericFile.find(f.id)
17
+ gf.add_file('hello two', 'content', 'hello2.txt')
18
+ gf.save!
19
+ end
20
+
21
+ context "force an audit on a file with two versions" do
22
+ subject { service.audit }
23
+ specify "should return two log results" do
24
+ expect(subject.length).to eq(2)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "#audit_file" do
30
+ before do
31
+ # force a second version
32
+ gf = GenericFile.find(f.id)
33
+ gf.add_file('hello two', 'content', 'hello2.txt')
34
+ gf.save!
35
+ end
36
+
37
+ context "force an audit on a specific version" do
38
+ subject { service.send(:audit_file, "content", f.content.versions.first.uri) }
39
+ specify "should return a single log result" do
40
+ expect(subject).to_not be_nil
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "#audit_stat" do
46
+ subject { service.send(:audit_stat) }
47
+ context "when no audits have been run" do
48
+ it "should report that audits have not been run" do
49
+ expect(subject).to eq "Audits have not yet been run on this file."
50
+ end
51
+ end
52
+
53
+ context "when no audit is pasing" do
54
+ before do
55
+ ChecksumAuditLog.create!(pass: 1, pid: f.id, version: f.content.versions.first.label, dsid: 'content')
56
+ end
57
+
58
+ it "should report that audits have not been run" do
59
+ expect(subject).to eq 1
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "#human_readable_audit_status" do
65
+ subject do
66
+ expect(service).to receive(:audit_stat).and_return(audit_stat)
67
+ service.human_readable_audit_status
68
+ end
69
+
70
+ context "when audit_stat is 0" do
71
+ let(:audit_stat) { 0 }
72
+ it { is_expected.to eq 'failing' }
73
+ end
74
+
75
+ context "when audit_stat is 1" do
76
+ let(:audit_stat) { 1 }
77
+ it { is_expected.to eq 'passing' }
78
+ end
79
+
80
+ context "when audit_stat is something else" do
81
+ let(:audit_stat) { 'something else' }
82
+ it { is_expected.to eq 'something else' }
83
+ end
84
+ end
85
+ end