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
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::RepositoryAuditService do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let!(:file) do
6
+ GenericFile.create! do |file|
7
+ file.add_file(File.open(fixture_path + '/world.png'), 'content', 'world.png')
8
+ file.apply_depositor_metadata(user)
9
+ end
10
+ end
11
+
12
+ describe "#audit_everything" do
13
+ it "should audit everything" do
14
+ expect_any_instance_of(GenericFile).to receive(:audit)
15
+ Sufia::RepositoryAuditService.audit_everything
16
+ end
17
+ end
18
+ end
@@ -1,14 +1,18 @@
1
1
  ENV["RAILS_ENV"] ||= 'test'
2
+ require "bundler/setup"
2
3
 
4
+
5
+ require 'factory_girl'
3
6
  require 'engine_cart'
4
7
  EngineCart.load_application!
5
8
 
9
+ require 'devise'
10
+
6
11
  require 'mida'
7
12
  require 'rspec/rails'
8
13
  require 'rspec/its'
9
14
  require 'rspec/matchers'
10
15
  require 'rspec/active_model/mocks'
11
- require 'factory_girl_rails'
12
16
  require 'capybara/poltergeist'
13
17
  require 'capybara/rspec'
14
18
  require 'capybara/rails'
@@ -16,6 +20,7 @@ require 'equivalent-xml'
16
20
  require 'equivalent-xml/rspec_matchers'
17
21
  require 'database_cleaner'
18
22
  require 'support/features'
23
+ require 'byebug' unless ENV['TRAVIS']
19
24
 
20
25
  if ENV['COVERAGE']
21
26
  require 'simplecov'
@@ -23,8 +28,12 @@ if ENV['COVERAGE']
23
28
  SimpleCov.command_name "spec"
24
29
  end
25
30
 
26
- Capybara.javascript_driver = :poltergeist
31
+ Capybara.default_driver = :rack_test # This is a faster driver
32
+ Capybara.javascript_driver = :poltergeist # This is slower
27
33
  Capybara.default_wait_time = ENV['TRAVIS'] ? 30 : 15
34
+ # HttpLogger.logger = Logger.new(STDOUT)
35
+ # HttpLogger.ignore = [/localhost:8983\/solr/]
36
+ # HttpLogger.colorize = false
28
37
 
29
38
  $in_travis = !ENV['TRAVIS'].nil? && ENV['TRAVIS'] == 'true'
30
39
 
@@ -63,6 +72,9 @@ end
63
72
 
64
73
  Resque.inline = Rails.env.test?
65
74
 
75
+ FactoryGirl.definition_file_paths = [File.expand_path("../factories", __FILE__)]
76
+ FactoryGirl.find_definitions
77
+
66
78
  module EngineRoutes
67
79
  def self.included(base)
68
80
  base.routes { Sufia::Engine.routes }
@@ -72,6 +84,7 @@ module EngineRoutes
72
84
  end
73
85
  end
74
86
 
87
+ require 'active_fedora/cleaner'
75
88
  RSpec.configure do |config|
76
89
  config.expect_with :rspec do |c|
77
90
  c.syntax = :expect
@@ -82,13 +95,19 @@ RSpec.configure do |config|
82
95
 
83
96
  config.use_transactional_fixtures = false
84
97
 
85
- config.before :each do
86
- if Capybara.current_driver == :rack_test
87
- DatabaseCleaner.strategy = :transaction
88
- else
98
+ config.before :each do |example|
99
+ unless (example.metadata[:type] == :view || example.metadata[:no_clean])
100
+ ActiveFedora::Cleaner.clean!
101
+ end
102
+ end
103
+
104
+ config.before :each do |example|
105
+ if example.metadata[:type] == :feature && Capybara.current_driver != :rack_test
89
106
  DatabaseCleaner.strategy = :truncation
107
+ else
108
+ DatabaseCleaner.strategy = :transaction
109
+ DatabaseCleaner.start
90
110
  end
91
- DatabaseCleaner.start
92
111
  end
93
112
 
94
113
  config.after do
@@ -1,10 +1,8 @@
1
1
  # spec/support/fixture_helpers.rb
2
2
  module FixtureHelpers
3
- def find_or_create_file_fixtures
3
+ def create_file_fixtures(depositor="archivist1@example.com")
4
4
  handles = [:public_pdf, :public_mp3, :public_wav]
5
- fixtures = []
6
- handles.each {|handle| fixtures << FactoryGirl.create(handle) }
7
- return fixtures
5
+ handles.map {|handle| FactoryGirl.create(handle, depositor: depositor) }
8
6
  end
9
7
  end
10
8
 
@@ -3,10 +3,6 @@ require 'rails/generators'
3
3
  class TestAppGenerator < Rails::Generators::Base
4
4
  source_root "./spec/test_app_templates"
5
5
 
6
- # if you need to generate any additional configuration
7
- # into the test app, this generator will be run immediately
8
- # after setting up the application
9
-
10
6
  def install_engine
11
7
  generate 'sufia:install', '-f'
12
8
  end
@@ -5,15 +5,14 @@ describe 'batch/edit.html.erb', :type => :view do
5
5
  stub_model(Batch, id: '123')
6
6
  }
7
7
 
8
+ let(:content) { double('content', versions: [], mimeType: 'application/pdf') }
8
9
  let(:generic_file) {
9
- content = double('content', versions: [], mimeType: 'application/pdf')
10
- stub_model(GenericFile, noid: '123',
11
- depositor: 'bob',
12
- content: content)
10
+ stub_model(GenericFile, id: '321', noid: '321', depositor: 'bob', rights: [''])
13
11
  }
14
12
 
15
13
 
16
14
  before do
15
+ allow(generic_file).to receive(:content).and_return(content)
17
16
  allow(controller).to receive(:current_user).and_return(stub_model(User))
18
17
  controller.request.path_parameters[:id] = "123"
19
18
  assign :batch, batch
@@ -32,9 +31,20 @@ describe 'batch/edit.html.erb', :type => :view do
32
31
  expect(@page).to have_selector("a#generic_file_share_with_help", count: 1)
33
32
  end
34
33
 
35
- it "should draw modal for rights" do
36
- expect(@page).to have_selector("div#rightsModal .modal-dialog .modal-content", count: 1)
34
+ context "rights" do
35
+ it "should have a modal" do
36
+ expect(@page).to have_selector("div#rightsModal .modal-dialog .modal-content")
37
+ end
38
+
39
+ it "should allow setting many rights" do
40
+ expect(@page).to have_selector('select#generic_file_rights[name="generic_file[rights][]"]')
41
+ end
42
+
43
+ it "should not have an empty rights element" do
44
+ @page.all('select#generic_file_rights option').each do |elem|
45
+ expect(elem.value).to_not be_empty
46
+ end
47
+ end
37
48
  end
38
-
39
49
  end
40
50
 
@@ -1,6 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'catalog/index.html.erb', :type => :view do
3
+ describe 'catalog/index.html.erb' do
4
+
5
+ let(:collection) { Collection.new(title: 'collection1', id: 'abc123') }
6
+ let(:doc) { SolrDocument.new(collection.to_solr) }
7
+
4
8
  before do
5
9
  allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
6
10
  stub_template 'catalog/_search_sidebar.html.erb' => ''
@@ -19,16 +23,14 @@ describe 'catalog/index.html.erb', :type => :view do
19
23
  allow(resp).to receive(:limit_value).and_return(10)
20
24
  allow(resp).to receive(:empty?).and_return(false)
21
25
 
22
- @collection = Collection.new(pid: 'sufia:foo', title: 'collection1')
23
- doc = SolrDocument.new(@collection.to_solr.merge('has_model_ssim' => [Collection.to_class_uri]))
26
+ # This stubs out the SolrDocument#to_model
27
+ allow(ActiveFedora::Base).to receive(:load_instance_from_solr).with('abc123').and_return(collection)
24
28
  assign(:document_list, [doc])
25
29
  end
26
30
 
27
-
28
-
29
31
  it 'appears on page without error' do
30
32
  render
31
- expect(rendered).to include(@collection.title)
33
+ expect(rendered).to include(collection.title)
32
34
  page = Capybara::Node::Simple.new(rendered)
33
35
  expect(page).to have_selector("span.glyphicon.glyphicon-th.collection-icon-search")
34
36
  end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe 'collections/_form.html.erb', :type => :view do
4
4
  describe 'when the collection edit form is rendered' do
5
- let(:collection) { Collection.new({title: 'the title', description: 'the description',
6
- creator: 'the creator'})}
5
+ let(:collection) { Collection.new(title: 'the title', description: 'the description',
6
+ creator: ['the creator'])}
7
7
 
8
8
  before do
9
9
  controller.request.path_parameters[:id] = 'j12345'
@@ -14,7 +14,9 @@ describe 'collections/_form.html.erb', :type => :view do
14
14
  it "should draw the metadata fields for collection" do
15
15
  render
16
16
  expect(rendered).to have_selector("input#collection_title", count: 1)
17
+ expect(rendered).to_not have_selector("div#additional_title_clone button.adder")
17
18
  expect(rendered).to have_selector("input#collection_creator", count: 1)
19
+ expect(rendered).to have_selector("div#additional_creator_clone button.adder")
18
20
  expect(rendered).to have_selector("textarea#collection_description", count: 1)
19
21
  expect(rendered).to have_selector("input#collection_contributor", count: 1)
20
22
  expect(rendered).to have_selector("input#collection_tag", count: 1)
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'collections/_show_document_list.html.erb', :type => :view do
4
+
5
+ let(:user) { FactoryGirl.find_or_create(:jill) }
6
+ let(:collection) { mock_model(Collection) }
7
+
8
+ let(:file) do
9
+ gf = GenericFile.new(creator: ["ggm"], title: ['One Hundred Years of Solitude'])
10
+ gf.apply_depositor_metadata(user)
11
+ gf.save
12
+ gf
13
+ end
14
+
15
+ let(:documents) {[file]}
16
+
17
+ context 'when not logged in' do
18
+ before do
19
+ allow(view).to receive(:blacklight_config).and_return(Blacklight::Configuration.new)
20
+ allow(view).to receive(:current_user).and_return(nil)
21
+ allow(file).to receive(:title_or_label).and_return("One Hundred Years of Solitude")
22
+ allow(file).to receive(:edit_people).and_return([])
23
+ end
24
+
25
+ it "should render collection" do
26
+ render(partial: 'collections/show_document_list.html.erb', locals: {documents: documents})
27
+ expect(rendered).to have_content 'One Hundred Years of Solitude'
28
+ end
29
+ end
30
+
31
+ end
@@ -64,8 +64,8 @@ describe "dashboard/index.html.erb", :type => :view do
64
64
  expect(@sidebar).to include '<span class="badge">2</span>'
65
65
  expect(@sidebar).to include '<span class="badge">15</span>'
66
66
  expect(@sidebar).to include '<span class="badge">3</span>'
67
- expect(@sidebar).to include '<span class="badge-optional">1</span> View'
68
- expect(@sidebar).to include '<span class="badge-optional">3</span> Downloads'
67
+ expect(@sidebar).to include '1 View'
68
+ expect(@sidebar).to include '3 Downloads'
69
69
  end
70
70
 
71
71
  it "should show the statistics before the profile" do
@@ -1,23 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'generic_files/edit.html.erb', :type => :view do
3
+ describe 'generic_files/edit.html.erb', :no_clean do
4
4
  describe 'when the file has two or more resource types' do
5
+ let(:resource_version) do
6
+ ActiveFedora::VersionsGraph::ResourceVersion.new.tap do |v|
7
+ v.uri = 'http://example.com/version1'
8
+ v.label = 'version1'
9
+ v.created = '2014-12-09T02:03:18.296Z'
10
+ end
11
+ end
12
+ let(:version_list) { Sufia::VersionListPresenter.new([resource_version]) }
13
+ let(:versions_graph) { double(all: [version1]) }
14
+ let(:content) { double('content', mimeType: 'application/pdf') }
15
+
5
16
  let(:generic_file) {
6
- content = double('content', versions: [], mimeType: 'application/pdf')
7
- stub_model(GenericFile, noid: '123',
17
+ stub_model(GenericFile, id: '123', noid: '123',
8
18
  depositor: 'bob',
9
- resource_type: ['Book', 'Dataset'],
10
- content: content)
19
+ resource_type: ['Book', 'Dataset'])
11
20
  }
12
21
 
13
22
  before do
23
+ allow(generic_file).to receive(:content).and_return(content)
14
24
  allow(controller).to receive(:current_user).and_return(stub_model(User))
15
25
  assign(:generic_file, generic_file)
26
+ assign(:version_list, version_list)
16
27
  end
17
28
 
18
- it "should only draw one resource_type multiselect" do
29
+ let(:page) do
19
30
  render
20
31
  page = Capybara::Node::Simple.new(rendered)
32
+ end
33
+
34
+ it "should only draw one resource_type multiselect" do
21
35
  expect(page).to have_selector("select#generic_file_resource_type", count: 1)
22
36
  end
23
37
  end
@@ -12,7 +12,7 @@ describe 'generic_files/show.html.erb', :type => :view do
12
12
  end
13
13
 
14
14
  let(:generic_file) do
15
- stub_model(GenericFile, noid: '123',
15
+ stub_model(GenericFile, id: '123', noid: '123',
16
16
  depositor: depositor.user_key,
17
17
  audit_stat: 1,
18
18
  title: ['My Title'],
@@ -25,11 +25,11 @@ describe 'generic_files/show.html.erb', :type => :view do
25
25
  date_created: ['1984-01-02'],
26
26
  language: ['Quechua'],
27
27
  publisher: ['Random Publishing, Inc.'],
28
- subject: ['Biology', 'Physiology', 'Ethnography'],
29
- content: content)
28
+ subject: ['Biology', 'Physiology', 'Ethnography'])
30
29
  end
31
30
 
32
31
  before do
32
+ allow(generic_file).to receive(:content).and_return(content)
33
33
  allow(controller).to receive(:current_user).and_return(depositor)
34
34
  allow_any_instance_of(Ability).to receive(:can?).and_return(true)
35
35
  allow(User).to receive(:find_by_user_key).with(generic_file.depositor).and_return(depositor)
@@ -31,7 +31,7 @@ describe 'users/show.html.erb', :type => :view do
31
31
 
32
32
  context "with trophy" do
33
33
 
34
- let(:generic_file) { GenericFile.new(title: ["Fake object"], pid:"sufia:abc123") }
34
+ let(:generic_file) { GenericFile.new(title: ["Fake object"], id: "abc123") }
35
35
  before do
36
36
  allow(view).to receive(:search_session).and_return({})
37
37
  allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
@@ -20,7 +20,7 @@ module Sufia::GenericFile
20
20
  generic_file.creator = [user.name]
21
21
 
22
22
  if batch_id
23
- generic_file.batch_id = Sufia::Noid.namespaceize(batch_id)
23
+ generic_file.batch_id = batch_id
24
24
  else
25
25
  ActiveFedora::Base.logger.warn "unable to find batch to attach to"
26
26
  end
@@ -28,8 +28,7 @@ module Sufia::GenericFile
28
28
  end
29
29
 
30
30
  def create_content(file, file_name, dsid)
31
- fname = generic_file.label.blank? ? file_name.truncate(255) : generic_file.label
32
- generic_file.add_file(file, dsid, fname)
31
+ generic_file.add_file(file, dsid, file_name.truncate(255))
33
32
  save_characterize_and_record_committer do
34
33
  if Sufia.config.respond_to?(:after_create_content)
35
34
  Sufia.config.after_create_content.call(generic_file, user)
@@ -37,9 +36,9 @@ module Sufia::GenericFile
37
36
  end
38
37
  end
39
38
 
40
- def revert_content(revision_id, datastream_id)
41
- revision = generic_file.content.get_version(revision_id)
42
- generic_file.add_file(revision.content, datastream_id, revision.label)
39
+ def revert_content(revision_id)
40
+ generic_file.content.restore_version(revision_id)
41
+ generic_file.content.create_version
43
42
  save_characterize_and_record_committer do
44
43
  if Sufia.config.respond_to?(:after_revert_content)
45
44
  Sufia.config.after_revert_content.call(generic_file, user, revision_id)
@@ -69,11 +68,10 @@ module Sufia::GenericFile
69
68
  end
70
69
 
71
70
  def destroy
72
- pid = generic_file.pid #Work around for https://github.com/projecthydra/active_fedora/issues/422
73
71
  generic_file.destroy
74
- FeaturedWork.where(generic_file_id: pid).destroy_all
72
+ FeaturedWork.where(generic_file_id: generic_file.id).destroy_all
75
73
  if Sufia.config.respond_to?(:after_destroy)
76
- Sufia.config.after_destroy.call(pid, user)
74
+ Sufia.config.after_destroy.call(generic_file.id, user)
77
75
  end
78
76
  end
79
77
 
@@ -103,7 +101,7 @@ module Sufia::GenericFile
103
101
  end
104
102
 
105
103
  def push_characterize_job
106
- Sufia.queue.push(CharacterizeJob.new(@generic_file.pid))
104
+ Sufia.queue.push(CharacterizeJob.new(@generic_file.id))
107
105
  end
108
106
 
109
107
  class << self
@@ -10,10 +10,9 @@ class ActiveFedoraPidBasedJob
10
10
  end
11
11
 
12
12
  def object
13
- @object ||= ActiveFedora::Base.find(pid, cast: true).tap do |f|
14
- f.reload_on_save = true
15
- end
13
+ @object ||= ActiveFedora::Base.find(pid)
16
14
  end
15
+
17
16
  alias_method :generic_file, :object
18
17
  alias_method :generic_file_id, :pid
19
18
 
@@ -6,44 +6,58 @@ class AuditJob < ActiveFedoraPidBasedJob
6
6
  PASS = 'Passing Audit Run'
7
7
  FAIL = 'Failing Audit Run'
8
8
 
9
- attr_accessor :pid, :datastream_id, :version_id
9
+ attr_accessor :uri, :pid, :path
10
10
 
11
- def initialize(pid, datastream_id, version_id)
12
- super(pid)
13
- self.datastream_id = datastream_id
14
- self.version_id = version_id
11
+ # URI of the resource to audit.
12
+ # This URI could include the actual resource (e.g. content) and the version to audit:
13
+ # http://localhost:8983/fedora/rest/test/a/b/c/abcxyz/content/fcr:versions/version1
14
+ # but it could also just be:
15
+ # http://localhost:8983/fedora/rest/test/a/b/c/abcxyz/content
16
+ def initialize(id, path, uri)
17
+ super(uri)
18
+ self.pid = id
19
+ self.path = path
20
+ self.uri = uri
15
21
  end
16
22
 
17
23
  def run
18
- if generic_file
19
- datastream = generic_file.datastreams[datastream_id]
20
- if datastream
21
- version = datastream.versions.select { |v| v.versionID == version_id}.first
22
- log = run_audit(version)
23
-
24
- # look up the user for sending the message to
25
- login = generic_file.depositor
26
- if login
27
- user = User.find_by_user_key(login)
28
- ActiveFedora::Base.logger.warn "User '#{login}' not found" unless user
29
- job_user = User.audituser()
30
- # send the user a message about the failing audit
31
- unless (log.pass == 1)
32
- message = "The audit run at #{log.created_at} for #{log.pid}:#{log.dsid}:#{log.version} was #{log.pass == 1 ? 'passing' : 'failing'}."
33
- subject = (log.pass == 1 ? PASS : FAIL)
34
- job_user.send_message(user, message, subject)
35
- end
36
- end
24
+ fixity_ok = false
25
+ log = run_audit
26
+ fixity_ok = (log.pass == 1)
27
+ unless fixity_ok
28
+ # send the user a message about the failing audit
29
+ login = generic_file.depositor
30
+ user = User.find_by_user_key(login)
31
+ logger.warn "User '#{login}' not found" unless user
32
+ job_user = User.audituser()
33
+ file_title = generic_file.title.first
34
+ message = "The audit run at #{log.created_at} for #{file_title} (#{uri}) failed."
35
+ subject = FAIL
36
+ job_user.send_message(user, message, subject)
37
+ end
38
+ fixity_ok
39
+ end
40
+
41
+ protected
42
+
43
+ def run_audit
44
+ begin
45
+ fixity_ok = ActiveFedora::FixityService.new(uri).check
46
+ rescue Ldp::NotFound
47
+ error_msg = "resource not found"
48
+ end
49
+
50
+ if fixity_ok
51
+ passing = 1
52
+ ChecksumAuditLog.prune_history(pid, path)
37
53
  else
38
- ActiveFedora::Base.logger.warn "No datastream for audit!!!!! pid: #{pid} dsid: #{datastream_id}"
54
+ logger.warn "***AUDIT*** Audit failed for #{uri} #{error_msg}"
55
+ passing = 0
39
56
  end
40
- else
41
- ActiveFedora::Base.logger.warn "No generic file for data stream audit!!!!! pid: #{pid} dsid: #{datastream_id}"
57
+ ChecksumAuditLog.create!(pass: passing, pid: pid, version: uri, dsid: path)
42
58
  end
43
- end
44
59
 
45
- private
46
- def run_audit(version)
47
- object.class.run_audit(version)
48
- end
60
+ def logger
61
+ ActiveFedora::Base.logger
62
+ end
49
63
  end