hyrax 3.0.0.pre.beta1 → 3.0.0.pre.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +157 -68
  3. data/.travis.yml +4 -1
  4. data/Gemfile +1 -0
  5. data/README.md +3 -3
  6. data/app/actors/hyrax/actors/collections_membership_actor.rb +5 -55
  7. data/app/actors/hyrax/actors/create_with_remote_files_ordered_members_actor.rb +6 -8
  8. data/app/actors/hyrax/actors/environment.rb +15 -0
  9. data/app/actors/hyrax/actors/interpret_visibility_actor.rb +22 -37
  10. data/app/assets/javascripts/hyrax/editor/controlled_vocabulary.es6 +1 -1
  11. data/app/assets/stylesheets/hyrax/_collections.scss +5 -3
  12. data/app/assets/stylesheets/hyrax/dashboard.scss +3 -3
  13. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +21 -2
  14. data/app/controllers/hyrax/homepage_controller.rb +1 -1
  15. data/app/forms/hyrax/forms/work_form.rb +1 -1
  16. data/app/helpers/hyrax/collections_helper.rb +13 -0
  17. data/app/helpers/hyrax/hyrax_helper_behavior.rb +3 -3
  18. data/app/indexers/hyrax/admin_set_indexer.rb +1 -1
  19. data/app/indexers/hyrax/basic_metadata_indexer.rb +1 -1
  20. data/app/indexers/hyrax/collection_indexer.rb +3 -3
  21. data/app/indexers/hyrax/deep_indexing_service.rb +12 -12
  22. data/app/indexers/hyrax/file_set_indexer.rb +1 -1
  23. data/app/indexers/hyrax/indexes_workflow.rb +4 -4
  24. data/app/indexers/hyrax/work_indexer.rb +1 -1
  25. data/app/models/concerns/hyrax/basic_metadata.rb +2 -0
  26. data/app/models/concerns/hyrax/collection_behavior.rb +3 -3
  27. data/app/models/concerns/hyrax/file_set/querying.rb +1 -1
  28. data/app/models/concerns/hyrax/human_readable_type.rb +2 -2
  29. data/app/models/concerns/hyrax/solr_document/characterization.rb +23 -23
  30. data/app/models/concerns/hyrax/solr_document/metadata.rb +3 -2
  31. data/app/models/concerns/hyrax/solr_document_behavior.rb +3 -3
  32. data/app/models/concerns/hyrax/user.rb +10 -2
  33. data/app/presenters/hyrax/work_show_presenter.rb +2 -2
  34. data/app/renderers/hyrax/renderers/faceted_attribute_renderer.rb +1 -1
  35. data/app/search_builders/hyrax/collection_search_builder.rb +1 -1
  36. data/app/search_builders/hyrax/deposit_search_builder.rb +1 -1
  37. data/app/search_builders/hyrax/embargo_search_builder.rb +1 -1
  38. data/app/search_builders/hyrax/lease_search_builder.rb +1 -1
  39. data/app/services/hyrax/default_middleware_stack.rb +0 -4
  40. data/app/services/hyrax/statistics/file_sets/by_format.rb +1 -1
  41. data/app/services/hyrax/statistics/works/by_resource_type.rb +1 -1
  42. data/app/services/hyrax/visibility_intention.rb +78 -0
  43. data/app/views/catalog/_index_list_default.html.erb +3 -3
  44. data/app/views/catalog/_thumbnail_list_collection.html.erb +3 -2
  45. data/app/views/hyrax/base/_attribute_rows.html.erb +1 -0
  46. data/app/views/hyrax/base/_form_files.html.erb +2 -2
  47. data/app/views/hyrax/base/_form_visibility_component.html.erb +1 -1
  48. data/app/views/hyrax/base/_show_actions.html.erb +6 -6
  49. data/app/views/hyrax/base/show.html.erb +2 -2
  50. data/app/views/hyrax/batch_edits/_check_all.html.erb +1 -1
  51. data/app/views/hyrax/batch_edits/_delete_selected.html.erb +1 -1
  52. data/app/views/hyrax/collections/_show_document_list_row.html.erb +1 -1
  53. data/app/views/hyrax/dashboard/collections/_show_document_list_row.html.erb +1 -1
  54. data/app/views/hyrax/dashboard/show_admin.html.erb +4 -4
  55. data/app/views/records/show_fields/_based_near.html.erb +1 -1
  56. data/app/views/records/show_fields/_creator.html.erb +1 -1
  57. data/app/views/records/show_fields/_keyword.html.erb +1 -1
  58. data/app/views/records/show_fields/_language.html.erb +1 -1
  59. data/app/views/records/show_fields/_publisher.html.erb +1 -1
  60. data/app/views/records/show_fields/_resource_type.html.erb +1 -1
  61. data/app/views/records/show_fields/_subject.html.erb +1 -1
  62. data/config/initializers/samvera-nesting_indexer_initializer.rb +3 -3
  63. data/config/locales/hyrax.de.yml +35 -22
  64. data/config/locales/hyrax.en.yml +22 -2
  65. data/config/locales/hyrax.es.yml +21 -1
  66. data/config/locales/hyrax.fr.yml +21 -1
  67. data/config/locales/hyrax.it.yml +21 -1
  68. data/config/locales/hyrax.pt-BR.yml +21 -1
  69. data/config/locales/hyrax.zh.yml +21 -1
  70. data/hyrax.gemspec +7 -9
  71. data/lib/generators/hyrax/templates/catalog_controller.rb +1 -1
  72. data/lib/generators/hyrax/templates/config/locales/hyrax.pt-BR.yml +10 -10
  73. data/lib/generators/hyrax/work/templates/locale.pt-BR.yml.erb +1 -1
  74. data/lib/hyrax/configuration.rb +18 -0
  75. data/lib/hyrax/engine.rb +8 -0
  76. data/lib/hyrax/transactions/container.rb +6 -0
  77. data/lib/hyrax/transactions/destroy_work.rb +21 -0
  78. data/lib/hyrax/transactions/steps/destroy_work.rb +24 -0
  79. data/lib/hyrax/version.rb +1 -1
  80. data/lib/wings.rb +45 -0
  81. data/lib/wings/active_fedora_converter.rb +56 -0
  82. data/lib/wings/model_transformer.rb +158 -0
  83. data/lib/wings/resource_factory.rb +8 -0
  84. data/lib/wings/valkyrie/metadata_adapter.rb +29 -0
  85. data/lib/wings/valkyrie/persister.rb +50 -0
  86. data/lib/wings/valkyrie/query_service.rb +43 -0
  87. data/lib/wings/valkyrie/resource_factory.rb +45 -0
  88. data/lib/wings/valkyrizable.rb +24 -0
  89. data/lib/wings/value_mapper.rb +59 -0
  90. data/spec/abilities/collection_ability_spec.rb +5 -5
  91. data/spec/abilities/permission_template_ability_spec.rb +1 -1
  92. data/spec/actors/hyrax/actors/collections_membership_actor_spec.rb +6 -175
  93. data/spec/actors/hyrax/actors/create_with_remote_files_ordered_members_actor_spec.rb +30 -22
  94. data/spec/actors/hyrax/actors/interpret_visibility_actor_spec.rb +2 -0
  95. data/spec/controllers/catalog_controller_spec.rb +1 -1
  96. data/spec/controllers/hyrax/admin/collection_types_controller_spec.rb +1 -1
  97. data/spec/controllers/hyrax/batch_edits_controller_spec.rb +9 -9
  98. data/spec/controllers/hyrax/collections_controller_spec.rb +5 -5
  99. data/spec/controllers/hyrax/dashboard/collection_members_controller_spec.rb +16 -13
  100. data/spec/controllers/hyrax/dashboard/collections_controller_spec.rb +9 -9
  101. data/spec/controllers/hyrax/dashboard/nest_collections_controller_spec.rb +1 -1
  102. data/spec/controllers/hyrax/generic_works_controller_spec.rb +10 -1
  103. data/spec/controllers/hyrax/homepage_controller_spec.rb +3 -3
  104. data/spec/controllers/hyrax/my/shares_controller_spec.rb +1 -1
  105. data/spec/features/actor_stack_spec.rb +48 -0
  106. data/spec/features/catalog_search_spec.rb +2 -2
  107. data/spec/features/collection_multi_membership_spec.rb +2 -2
  108. data/spec/features/collection_spec.rb +7 -7
  109. data/spec/features/collection_type_spec.rb +2 -2
  110. data/spec/features/dashboard/collection_spec.rb +18 -18
  111. data/spec/features/delete_work_spec.rb +1 -1
  112. data/spec/features/search_spec.rb +2 -2
  113. data/spec/features/work_show_spec.rb +5 -2
  114. data/spec/forms/hyrax/forms/batch_upload_form_spec.rb +1 -0
  115. data/spec/forms/hyrax/forms/collection_form_spec.rb +5 -5
  116. data/spec/forms/hyrax/forms/permission_template_form_spec.rb +1 -1
  117. data/spec/forms/hyrax/forms/work_form_spec.rb +2 -0
  118. data/spec/helpers/blacklight_helper_spec.rb +3 -1
  119. data/spec/helpers/hyrax/collections_helper_spec.rb +42 -0
  120. data/spec/helpers/hyrax/dashboard_helper_behavior_spec.rb +4 -4
  121. data/spec/helpers/hyrax_helper_spec.rb +8 -4
  122. data/spec/hyrax/transactions/destroy_work_spec.rb +35 -0
  123. data/spec/hyrax/transactions/steps/destroy_work_spec.rb +33 -0
  124. data/spec/indexers/hyrax/collection_indexer_spec.rb +1 -1
  125. data/spec/jobs/characterize_job_spec.rb +1 -1
  126. data/spec/lib/hyrax/resource_sync/change_list_writer_spec.rb +35 -21
  127. data/spec/lib/hyrax/resource_sync/resource_list_writer_spec.rb +1 -1
  128. data/spec/models/collection_spec.rb +18 -18
  129. data/spec/models/concerns/hyrax/collection_nesting_spec.rb +2 -2
  130. data/spec/models/file_set_spec.rb +2 -2
  131. data/spec/models/hyrax/collection_type_spec.rb +2 -2
  132. data/spec/models/user_spec.rb +26 -1
  133. data/spec/presenters/hyrax/collection_presenter_spec.rb +11 -11
  134. data/spec/presenters/hyrax/work_show_presenter_spec.rb +11 -0
  135. data/spec/search_builders/hyrax/collection_member_search_builder_spec.rb +1 -1
  136. data/spec/search_builders/hyrax/collection_search_builder_spec.rb +1 -1
  137. data/spec/search_builders/hyrax/dashboard/nested_collections_search_builder_spec.rb +1 -1
  138. data/spec/search_builders/hyrax/work_relation_spec.rb +1 -1
  139. data/spec/services/hyrax/adapters/nesting_index_adapter_spec.rb +2 -2
  140. data/spec/services/hyrax/collections/collection_member_service_spec.rb +2 -2
  141. data/spec/services/hyrax/collections/migration_service_spec.rb +27 -27
  142. data/spec/services/hyrax/collections/nested_collection_persistence_service_spec.rb +1 -1
  143. data/spec/services/hyrax/collections/nested_collection_query_service_spec.rb +38 -38
  144. data/spec/services/hyrax/curation_concern_spec.rb +1 -1
  145. data/spec/services/hyrax/default_middleware_stack_spec.rb +1 -2
  146. data/spec/services/hyrax/statistics/depositors/summary_spec.rb +1 -1
  147. data/spec/services/hyrax/statistics/works/by_resource_type_spec.rb +11 -4
  148. data/spec/services/hyrax/visibility_intention_spec.rb +144 -0
  149. data/spec/services/hyrax/workflow/changes_required_notification_spec.rb +1 -1
  150. data/spec/spec_helper.rb +10 -8
  151. data/spec/support/selectors.rb +10 -1
  152. data/spec/test_app_templates/Gemfile.extra +2 -0
  153. data/spec/test_app_templates/lib/generators/test_app_generator.rb +6 -0
  154. data/spec/views/catalog/_index_list_default.html.erb_spec.rb +3 -2
  155. data/spec/views/catalog/_thumbnail_list_collection.html.erb_spec.rb +38 -5
  156. data/spec/views/hyrax/base/_attributes.html.erb_spec.rb +1 -1
  157. data/spec/views/hyrax/base/_show_actions.html.erb_spec.rb +9 -9
  158. data/spec/views/hyrax/base/show.html.erb_spec.rb +3 -2
  159. data/spec/views/hyrax/collections/_show_document_list_row.html.erb_spec.rb +3 -2
  160. data/spec/views/hyrax/dashboard/collections/_show_document_list_row.html.erb_spec.rb +3 -2
  161. data/spec/wings/active_fedora_converter_spec.rb +31 -0
  162. data/spec/wings/model_transformer_spec.rb +288 -0
  163. data/spec/wings/valkyrie/metadata_adapter_spec.rb +10 -0
  164. data/spec/wings/valkyrie/persister_spec.rb +71 -0
  165. data/spec/wings/valkyrie/query_service_spec.rb +81 -0
  166. data/spec/wings/valkyrie/resource_factory_spec.rb +32 -0
  167. data/spec/wings/value_mapper_spec.rb +60 -0
  168. data/spec/wings_spec.rb +8 -0
  169. data/template.rb +3 -1
  170. metadata +86 -36
@@ -1,4 +1,5 @@
1
1
  RSpec.describe Hyrax::Actors::CreateWithRemoteFilesOrderedMembersActor do
2
+ let(:null_operation) { class_double('Hyrax::Operation').as_null_object }
2
3
  let(:terminator) { Hyrax::Actors::Terminator.new }
3
4
  let(:actor) { stack.build(terminator) }
4
5
  let(:stack) do
@@ -9,41 +10,48 @@ RSpec.describe Hyrax::Actors::CreateWithRemoteFilesOrderedMembersActor do
9
10
  let(:user) { create(:user) }
10
11
  let(:ability) { Ability.new(user) }
11
12
  let(:work) { create(:generic_work, user: user) }
12
- let(:url1) { "https://dl.dropbox.com/fake/blah-blah.filepicker-demo.txt.txt" }
13
- let(:url2) { "https://dl.dropbox.com/fake/blah-blah.Getting%20Started.pdf" }
13
+ let(:urls) { ["https://dl.dropbox.com/fake/blah-blah.filepicker-demo.txt.txt", "https://dl.dropbox.com/fake/blah-blah.Getting%20Started.pdf"] }
14
+ let(:filenames) { ['filepicker-demo.txt.txt', 'Getting%20Started.pdf'] }
14
15
 
15
16
  let(:remote_files) do
16
- [{ url: url1,
17
- expires: "2014-03-31T20:37:36.214Z",
18
- file_name: "filepicker-demo.txt.txt" },
19
- { url: url2,
20
- expires: "2014-03-31T20:37:36.731Z",
21
- file_name: "Getting+Started.pdf" }]
17
+ urls.collect.with_index do |url, index|
18
+ { url: url, expires: "2014-03-31T20:37:36.214Z", file_name: filenames[index] }
19
+ end
22
20
  end
21
+
23
22
  let(:attributes) { { remote_files: remote_files } }
24
23
  let(:environment) { Hyrax::Actors::Environment.new(work, ability, attributes) }
25
24
 
26
25
  before do
26
+ allow(Hyrax::Operation).to receive(:create!).and_return(null_operation)
27
27
  allow(terminator).to receive(:create).and_return(true)
28
28
  end
29
29
 
30
30
  context "with two file_sets" do
31
- let(:remote_files) do
32
- [{ url: url1,
33
- expires: "2014-03-31T20:37:36.214Z",
34
- file_name: "filepicker-demo.txt.txt" },
35
- { url: url2,
36
- expires: "2014-03-31T20:37:36.731Z",
37
- file_name: "Getting+Started.pdf" }]
38
- end
39
-
40
31
  it "attaches files and passes ordered_members to OrderedMembersActor in correct order" do
41
- expect(Hyrax::Actors::OrderedMembersActor).to receive(:new).with([FileSet, FileSet], user).and_return(Hyrax::Actors::OrderedMembersActor)
42
- expect(Hyrax::Actors::OrderedMembersActor).to receive(:attach_ordered_members_to_work).with(work)
43
- expect(ImportUrlJob).to receive(:perform_later).with(FileSet, Hyrax::Operation, {}).twice
32
+ expect(ImportUrlJob).to receive(:perform_later).with(FileSet, null_operation, {}).twice
44
33
  expect(actor.create(environment)).to be true
45
- expect(actor.ordered_members.first.label).to eq('filepicker-demo.txt.txt')
46
- expect(actor.ordered_members.last.label).to eq('Getting+Started.pdf')
34
+ expect(work.ordered_members.to_a.collect(&:label)).to eq(filenames)
35
+ end
36
+ end
37
+
38
+ context "with two environments processed by the same actor instance simultaneously" do
39
+ let(:work2) { create(:generic_work, user: user) }
40
+ let(:environments) { [environment, Hyrax::Actors::Environment.new(work2, ability, attributes)] }
41
+
42
+ # rubocop:disable RSpec/ExampleLength
43
+ it "attaches the correct FileSets to the correct works in the correct order" do
44
+ expect(ImportUrlJob).to receive(:perform_later).with(FileSet, null_operation, {}).exactly(4).times
45
+ threads = environments.collect do |env|
46
+ Thread.new do
47
+ Rails.application.reloader.wrap do
48
+ expect(actor.create(env)).to be true
49
+ expect(env.curation_concern.ordered_members.to_a.collect(&:label)).to eq(filenames)
50
+ end
51
+ end
52
+ end
53
+ threads.each(&:join)
47
54
  end
55
+ # rubocop:enable RSpec/ExampleLength
48
56
  end
49
57
  end
@@ -114,6 +114,7 @@ RSpec.describe Hyrax::Actors::InterpretVisibilityActor do
114
114
  expect(curation_concern.visibility_during_embargo).to eq 'authenticated'
115
115
  expect(curation_concern.visibility_after_embargo).to eq 'open'
116
116
  expect(curation_concern.visibility).to eq 'authenticated'
117
+ expect(curation_concern.reload).to be_under_embargo
117
118
  end
118
119
  end
119
120
 
@@ -429,6 +430,7 @@ RSpec.describe Hyrax::Actors::InterpretVisibilityActor do
429
430
  expect(curation_concern.visibility_during_lease).to eq 'open'
430
431
  expect(curation_concern.visibility_after_lease).to eq 'restricted'
431
432
  expect(curation_concern.visibility).to eq 'open'
433
+ expect(curation_concern.reload.lease).not_to be_new_record
432
434
  end
433
435
  end
434
436
 
@@ -39,7 +39,7 @@ RSpec.describe CatalogController, type: :controller do
39
39
  end
40
40
 
41
41
  context 'with collections' do
42
- let(:collection) { create(:public_collection, keyword: ['rocks']) }
42
+ let(:collection) { create(:public_collection_lw, keyword: ['rocks']) }
43
43
  let(:objects) { [collection, rocks, clouds] }
44
44
 
45
45
  it 'finds collections' do
@@ -306,7 +306,7 @@ RSpec.describe Hyrax::Admin::CollectionTypesController, type: :controller, clean
306
306
  end
307
307
 
308
308
  context "when collections exist of this type" do
309
- let!(:collection) { create(:collection, collection_type_gid: collection_type_to_destroy.gid) }
309
+ let!(:collection) { create(:collection_lw, collection_type_gid: collection_type_to_destroy.gid) }
310
310
 
311
311
  it "doesn't delete the collection type or collection" do
312
312
  delete :destroy, params: { id: collection_type_to_destroy }
@@ -174,15 +174,15 @@ RSpec.describe Hyrax::BatchEditsController, type: :controller do
174
174
  let(:user) { create(:user) }
175
175
 
176
176
  let(:collection1) do
177
- create(:public_collection, title: ["My First Collection"],
178
- description: ["My incredibly detailed description of the collection"],
179
- user: user)
177
+ create(:public_collection_lw, title: ["My First Collection"],
178
+ description: ["My incredibly detailed description of the collection"],
179
+ user: user)
180
180
  end
181
181
 
182
182
  let(:collection2) do
183
- create(:public_collection, title: ["My Other Collection"],
184
- description: ["My incredibly detailed description of the other collection"],
185
- user: user)
183
+ create(:public_collection_lw, title: ["My Other Collection"],
184
+ description: ["My incredibly detailed description of the other collection"],
185
+ user: user)
186
186
  end
187
187
 
188
188
  let!(:work1) { create(:work, title: ["First of the Assets"], member_of_collections: [collection1], user: user) }
@@ -204,9 +204,9 @@ RSpec.describe Hyrax::BatchEditsController, type: :controller do
204
204
  let(:user2) { create(:user) }
205
205
 
206
206
  let(:collection3) do
207
- create(:public_collection, title: ["User2's Collection"],
208
- description: ["Collection created by user2"],
209
- user: user2)
207
+ create(:public_collection_lw, title: ["User2's Collection"],
208
+ description: ["Collection created by user2"],
209
+ user: user2)
210
210
  end
211
211
 
212
212
  before do
@@ -4,16 +4,16 @@ RSpec.describe Hyrax::CollectionsController do
4
4
  let(:other) { build(:user) }
5
5
 
6
6
  let(:collection) do
7
- create(:public_collection, title: ["My collection"],
8
- description: ["My incredibly detailed description of the collection"],
9
- user: user)
7
+ create(:public_collection_lw, title: ["My collection"],
8
+ description: ["My incredibly detailed description of the collection"],
9
+ user: user)
10
10
  end
11
11
 
12
12
  let(:asset1) { create(:work, title: ["First of the Assets"], user: user) }
13
13
  let(:asset2) { create(:work, title: ["Second of the Assets"], user: user) }
14
14
  let(:asset3) { create(:work, title: ["Third of the Assets"], user: user) }
15
- let(:asset4) { create(:collection, title: ["First subcollection"], user: user) }
16
- let(:asset5) { create(:collection, title: ["Second subcollection"], user: user) }
15
+ let(:asset4) { build(:collection_lw, title: ["First subcollection"], user: user) }
16
+ let(:asset5) { build(:collection_lw, title: ["Second subcollection"], user: user) }
17
17
  let(:unowned_asset) { create(:work, user: other) }
18
18
 
19
19
  let(:collection_attrs) do
@@ -10,20 +10,23 @@ RSpec.describe Hyrax::Dashboard::CollectionMembersController, :clean_repo do
10
10
  let(:work_5_read) { create(:work, id: 'work-5-read', title: ["Other's work with read access"], user: other, read_users: [user]) }
11
11
  let(:work_6_noaccess) { create(:work, id: 'work-6-no_access', title: ["Other's work with no access"], user: other) }
12
12
 
13
- let(:coll_1_own) { create(:private_collection, id: 'col-1-own', title: ['User created'], user: user, create_access: true) }
13
+ let(:coll_1_own) { create(:private_collection_lw, id: 'col-1-own', title: ['User created'], user: user, with_permission_template: true) }
14
14
  let(:coll_2_mgr) do
15
- create(:private_collection, id: 'col-2-mgr', title: ['User has manage access'], user: other,
16
- with_permission_template: { manage_users: [user] }, create_access: true)
15
+ create(:private_collection_lw, id: 'col-2-mgr', title: ['User has manage access'], user: other,
16
+ with_permission_template: { manage_users: [user] })
17
17
  end
18
18
  let(:coll_3_dep) do
19
- create(:private_collection, id: 'col-3-dep', title: ['User has deposit access'], user: other,
20
- with_permission_template: { deposit_users: [user] }, create_access: true)
19
+ create(:private_collection_lw, id: 'col-3-dep', title: ['User has deposit access'], user: other,
20
+ with_permission_template: { deposit_users: [user] })
21
21
  end
22
22
  let(:coll_4_view) do
23
- create(:private_collection, id: 'col-4-dep', title: ['User has view access'], user: other,
24
- with_permission_template: { view_users: [user] }, create_access: true)
23
+ create(:private_collection_lw, id: 'col-4-dep', title: ['User has view access'], user: other,
24
+ with_permission_template: { view_users: [user] })
25
+ end
26
+ let(:coll_5_noaccess) do
27
+ create(:private_collection_lw, id: 'col-5-no_access', title: ['Other user created'],
28
+ user: other, with_permission_template: true)
25
29
  end
26
- let(:coll_5_noaccess) { create(:private_collection, id: 'col-5-no_access', title: ['Other user created'], user: other, create_access: true) }
27
30
 
28
31
  describe '#update_members' do
29
32
  context 'when user created the collection' do
@@ -95,7 +98,7 @@ RSpec.describe Hyrax::Dashboard::CollectionMembersController, :clean_repo do
95
98
  end
96
99
 
97
100
  context 'and user adds a subcollection' do
98
- let(:parent_collection) { create(:private_collection, id: 'pcol', title: ['User created another'], user: user, create_access: true) }
101
+ let(:parent_collection) { create(:private_collection_lw, id: 'pcol', title: ['User created another'], user: user, with_permission_template: true) }
99
102
 
100
103
  it 'adds collection user created' do
101
104
  expect do
@@ -209,8 +212,8 @@ RSpec.describe Hyrax::Dashboard::CollectionMembersController, :clean_repo do
209
212
 
210
213
  context 'and user adds a subcollection' do
211
214
  let(:parent_collection) do
212
- create(:private_collection, id: 'pcol-mgr', title: ['User has manage access to another'], user: other,
213
- with_permission_template: { manage_users: [user] }, create_access: true)
215
+ create(:private_collection_lw, id: 'pcol-mgr', title: ['User has manage access to another'], user: other,
216
+ with_permission_template: { manage_users: [user] })
214
217
  end
215
218
 
216
219
  it 'adds collection user created' do
@@ -325,8 +328,8 @@ RSpec.describe Hyrax::Dashboard::CollectionMembersController, :clean_repo do
325
328
 
326
329
  context 'and user adds a subcollection' do
327
330
  let(:parent_collection) do
328
- create(:private_collection, id: 'pcol-dep', title: ['User has deposit access to another'], user: other,
329
- with_permission_template: { deposit_users: [user] }, create_access: true)
331
+ create(:private_collection_lw, id: 'pcol-dep', title: ['User has deposit access to another'], user: other,
332
+ with_permission_template: { deposit_users: [user] })
330
333
  end
331
334
 
332
335
  it 'adds collection user created' do
@@ -5,16 +5,16 @@ RSpec.describe Hyrax::Dashboard::CollectionsController, :clean_repo do
5
5
  let(:collection_type_gid) { create(:user_collection_type).gid }
6
6
 
7
7
  let(:collection) do
8
- create(:public_collection, title: ["My collection"],
9
- description: ["My incredibly detailed description of the collection"],
10
- user: user)
8
+ create(:public_collection_lw, title: ["My collection"],
9
+ description: ["My incredibly detailed description of the collection"],
10
+ user: user)
11
11
  end
12
12
 
13
13
  let(:asset1) { create(:work, title: ["First of the Assets"], user: user) }
14
14
  let(:asset2) { create(:work, title: ["Second of the Assets"], user: user) }
15
15
  let(:asset3) { create(:work, title: ["Third of the Assets"], user: user) }
16
- let(:asset4) { create(:collection, title: ["First subcollection"], user: user) }
17
- let(:asset5) { create(:collection, title: ["Second subcollection"], user: user) }
16
+ let(:asset4) { build(:collection_lw, title: ["First subcollection"], user: user) }
17
+ let(:asset5) { build(:collection_lw, title: ["Second subcollection"], user: user) }
18
18
  let(:unowned_asset) { create(:work, user: other) }
19
19
 
20
20
  let(:collection_attrs) do
@@ -82,7 +82,7 @@ RSpec.describe Hyrax::Dashboard::CollectionsController, :clean_repo do
82
82
  }
83
83
 
84
84
  expect(assigns[:collection].member_objects).to eq [asset1]
85
- asset_results = ActiveFedora::SolrService.instance.conn.get "select", params: { fq: ["id:\"#{asset1.id}\""], fl: ['id', Solrizer.solr_name(:collection)] }
85
+ asset_results = ActiveFedora::SolrService.instance.conn.get "select", params: { fq: ["id:\"#{asset1.id}\""], fl: ['id', ActiveFedora.index_field_mapper.solr_name(:collection)] }
86
86
  expect(asset_results["response"]["numFound"]).to eq 1
87
87
  doc = asset_results["response"]["docs"].first
88
88
  expect(doc["id"]).to eq asset1.id
@@ -112,7 +112,7 @@ RSpec.describe Hyrax::Dashboard::CollectionsController, :clean_repo do
112
112
  end
113
113
 
114
114
  context "when params includes parent_id" do
115
- let(:parent_collection) { create(:collection, title: ['Parent']) }
115
+ let(:parent_collection) { create(:collection_lw, title: ['Parent']) }
116
116
 
117
117
  it "creates a collection as a subcollection of parent" do
118
118
  parent_collection
@@ -189,7 +189,7 @@ RSpec.describe Hyrax::Dashboard::CollectionsController, :clean_repo do
189
189
  let(:asset1) { create(:generic_work, user: user) }
190
190
  let(:asset2) { create(:generic_work, user: user) }
191
191
  let(:asset3) { create(:generic_work, user: user) }
192
- let(:collection2) { create(:collection, title: ['Some Collection'], user: user) }
192
+ let(:collection2) { create(:collection_lw, title: ['Some Collection'], user: user) }
193
193
 
194
194
  before do
195
195
  [asset1, asset2, asset3].each do |asset|
@@ -233,7 +233,7 @@ RSpec.describe Hyrax::Dashboard::CollectionsController, :clean_repo do
233
233
  end
234
234
 
235
235
  context "when update fails" do
236
- let(:collection) { create(:collection, id: '12345') }
236
+ let(:collection) { build(:collection_lw, id: '12345') }
237
237
  let(:repository) { instance_double(Blacklight::Solr::Repository, search: result) }
238
238
  let(:result) { double(documents: [], total: 0) }
239
239
 
@@ -2,7 +2,7 @@ RSpec.describe Hyrax::Dashboard::NestCollectionsController do
2
2
  routes { Hyrax::Engine.routes }
3
3
  let(:child_id) { 'child1' }
4
4
  let(:child) { instance_double(Collection, title: ["Awesome Child"]) }
5
- let(:parent) { create(:collection, id: 'parent1', collection_type_settings: :nestable, title: ["Uncool Parent"]) }
5
+ let(:parent) { create(:collection_lw, id: 'parent1', collection_type_settings: :nestable, title: ["Uncool Parent"]) }
6
6
 
7
7
  describe '#blacklight_config' do
8
8
  subject { controller.blacklight_config }
@@ -534,7 +534,7 @@ RSpec.describe Hyrax::GenericWorksController do
534
534
 
535
535
  describe '#destroy' do
536
536
  let(:work_to_be_deleted) { create(:private_generic_work, user: user) }
537
- let(:parent_collection) { create(:collection) }
537
+ let(:parent_collection) { build(:collection_lw) }
538
538
 
539
539
  it 'deletes the work' do
540
540
  delete :destroy, params: { id: work_to_be_deleted }
@@ -618,5 +618,14 @@ RSpec.describe Hyrax::GenericWorksController do
618
618
  get :manifest, params: { id: work, format: :html }
619
619
  expect(response.body).to eq "{\"test\":\"manifest\"}"
620
620
  end
621
+
622
+ describe "when there are html tags in the labels or description" do
623
+ let(:manifest_factory) { double(to_h: { label: "The title<img src=xx:x onerror=eval('\x61ler\x74(1)') />", description: ["Some description <script>something</script> here..."] }) }
624
+
625
+ it "sanitizes the labels and description" do
626
+ get :manifest, params: { id: work, format: :json }
627
+ expect(response.body).to include "{\"label\":\"The title\\u003cimg\\u003e\",\"description\":[\"Some description here...\"]}"
628
+ end
629
+ end
621
630
  end
622
631
  end
@@ -48,7 +48,7 @@ RSpec.describe Hyrax::HomepageController, type: :controller do
48
48
  it "includes only GenericWork objects in recent documents" do
49
49
  get :index
50
50
  assigns(:recent_documents).each do |doc|
51
- expect(doc[Solrizer.solr_name("has_model", :symbol)]).to eql ["GenericWork"]
51
+ expect(doc[ActiveFedora.index_field_mapper.solr_name("has_model", :symbol)]).to eql ["GenericWork"]
52
52
  end
53
53
  end
54
54
 
@@ -60,8 +60,8 @@ RSpec.describe Hyrax::HomepageController, type: :controller do
60
60
  old_to_solr = gw3.method(:to_solr)
61
61
  allow(gw3).to receive(:to_solr) do
62
62
  old_to_solr.call.merge(
63
- Solrizer.solr_name('system_create', :stored_sortable, type: :date) => 1.day.ago.iso8601,
64
- Solrizer.solr_name('date_uploaded', :stored_sortable, type: :date) => 1.day.ago.iso8601
63
+ ActiveFedora.index_field_mapper.solr_name('system_create', :stored_sortable, type: :date) => 1.day.ago.iso8601,
64
+ ActiveFedora.index_field_mapper.solr_name('date_uploaded', :stored_sortable, type: :date) => 1.day.ago.iso8601
65
65
  )
66
66
  end
67
67
  gw3.save
@@ -15,7 +15,7 @@ RSpec.describe Hyrax::My::SharesController, type: :controller do
15
15
  let!(:shared_with_me) { create(:work, user: other_user, edit_users: [user, other_user]) }
16
16
  let!(:read_shared_with_me) { create(:work, user: other_user, read_users: [user, other_user]) }
17
17
  let!(:shared_with_someone_else) { create(:work, user: other_user, edit_users: [someone_else, other_user]) }
18
- let!(:my_collection) { create(:public_collection, user: user) }
18
+ let!(:my_collection) { create(:public_collection_lw, user: user) }
19
19
 
20
20
  it "responds with success" do
21
21
  get :index
@@ -0,0 +1,48 @@
1
+ require 'rails_helper'
2
+
3
+ # Integration tests for the full midddleware stack
4
+ RSpec.describe Hyrax::DefaultMiddlewareStack, :clean_repo do
5
+ subject(:actor) { stack.build(Hyrax::Actors::Terminator.new) }
6
+ let(:ability) { ::Ability.new(user) }
7
+ let(:attributes) { {} }
8
+ let(:stack) { described_class.build_stack }
9
+ let(:terminator) { Hyrax::Actors::Terminator.new }
10
+ let(:user) { FactoryBot.create(:user) }
11
+ let(:work) { FactoryBot.build(:work) }
12
+ let(:env) { Hyrax::Actors::Environment.new(work, ability, attributes) }
13
+
14
+ let(:delayed_failure_actor) do
15
+ Class.new(Hyrax::Actors::AbstractActor) do
16
+ def create(env)
17
+ next_actor.create(env) && raise('ALWAYS RAISE')
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '#create' do
23
+ it 'persists the work' do
24
+ expect { actor.create(env) }
25
+ .to change { work.persisted? }
26
+ .to true
27
+ end
28
+
29
+ context 'when failing on the way back up the actor stack' do
30
+ before { stack.insert_before(Hyrax::Actors::ModelActor, delayed_failure_actor) }
31
+
32
+ before(:context) do
33
+ Hyrax.config.enable_noids = true
34
+ # we need to mint once to set the `rand` database column and
35
+ # make minter behavior predictable
36
+ ::Noid::Rails.config.minter_class.new.mint
37
+ end
38
+
39
+ after(:context) { Hyrax.config.enable_noids = false }
40
+
41
+ it 'leaves a valid minter state', :aggregate_failures do
42
+ expect { actor.create(env) }.to raise_error 'ALWAYS RAISE'
43
+
44
+ expect(GenericWork.new.assign_id).not_to eq work.id
45
+ end
46
+ end
47
+ end
48
+ end
@@ -14,7 +14,7 @@ RSpec.describe 'catalog searching', type: :feature do
14
14
  create(:public_work, title: ["Jack's Research"], keyword: ['jacks_keyword', 'shared_keyword'])
15
15
  end
16
16
 
17
- let!(:collection) { create(:public_collection, keyword: ['collection_keyword', 'shared_keyword']) }
17
+ let!(:collection) { create(:public_collection_lw, keyword: ['collection_keyword', 'shared_keyword']) }
18
18
 
19
19
  it 'performing a search' do
20
20
  within('#search-form-header') do
@@ -30,7 +30,7 @@ RSpec.describe 'catalog searching', type: :feature do
30
30
  end
31
31
 
32
32
  context 'with public works and private collections', clean_repo: true do
33
- let!(:collection) { create(:private_collection) }
33
+ let!(:collection) { build(:private_collection_lw) }
34
34
 
35
35
  let!(:jills_work) do
36
36
  create(:public_work, title: ["Jill's Research"], keyword: ['jills_keyword'], member_of_collections: [collection])
@@ -11,7 +11,7 @@ RSpec.describe 'Adding a work to multiple collections', type: :feature, clean_re
11
11
  end
12
12
 
13
13
  describe 'when both collections support multiple membership' do
14
- let(:old_collection) { create(:collection_lw, user: admin_user, collection_type_gid: multi_membership_type_1.gid, title: ['OldCollectionTitle']) }
14
+ let(:old_collection) { build(:collection_lw, user: admin_user, collection_type_gid: multi_membership_type_1.gid, title: ['OldCollectionTitle']) }
15
15
  let!(:work) { create(:generic_work, user: admin_user, member_of_collections: [old_collection], title: ['The highly valued work that everyone wants in their collection']) }
16
16
 
17
17
  context 'and are of different types' do
@@ -56,7 +56,7 @@ RSpec.describe 'Adding a work to multiple collections', type: :feature, clean_re
56
56
  end
57
57
 
58
58
  describe 'when both collections require single membership' do
59
- let(:old_collection) { create(:collection_lw, user: admin_user, collection_type_gid: single_membership_type_1.gid, title: ['OldCollectionTitle']) }
59
+ let(:old_collection) { build(:collection_lw, user: admin_user, collection_type_gid: single_membership_type_1.gid, title: ['OldCollectionTitle']) }
60
60
  let!(:work) do
61
61
  create(:generic_work,
62
62
  user: admin_user,
@@ -1,17 +1,17 @@
1
1
  RSpec.describe 'collection', type: :feature, clean_repo: true do
2
2
  let(:user) { create(:user) }
3
3
 
4
- let(:collection1) { create(:public_collection, user: user) }
5
- let(:collection2) { create(:public_collection, user: user) }
4
+ let(:collection1) { create(:public_collection_lw, user: user) }
5
+ let(:collection2) { create(:public_collection_lw, user: user) }
6
6
 
7
7
  describe 'collection show page' do
8
8
  let(:collection) do
9
- create(:public_collection, user: user, description: ['collection description'], collection_type_settings: :nestable)
9
+ create(:public_collection_lw, user: user, description: ['collection description'], collection_type_settings: :nestable)
10
10
  end
11
11
  let!(:work1) { create(:work, title: ["King Louie"], member_of_collections: [collection], user: user) }
12
12
  let!(:work2) { create(:work, title: ["King Kong"], member_of_collections: [collection], user: user) }
13
- let!(:col1) { create(:public_collection, title: ["Sub-collection 1"], member_of_collections: [collection], user: user) }
14
- let!(:col2) { create(:public_collection, title: ["Sub-collection 2"], member_of_collections: [collection], user: user) }
13
+ let!(:col1) { create(:public_collection_lw, title: ["Sub-collection 1"], member_of_collections: [collection], user: user) }
14
+ let!(:col2) { create(:public_collection_lw, title: ["Sub-collection 2"], member_of_collections: [collection], user: user) }
15
15
 
16
16
  before do
17
17
  sign_in user
@@ -90,7 +90,7 @@ RSpec.describe 'collection', type: :feature, clean_repo: true do
90
90
 
91
91
  sign_in user
92
92
  end
93
- let(:collection) { create(:named_collection, user: user) }
93
+ let(:collection) { create(:named_collection_lw, user: user) }
94
94
 
95
95
  it "shows a collection with a listing of Descriptive Metadata and catalog-style search results" do
96
96
  visit "/collections/#{collection.id}"
@@ -112,7 +112,7 @@ RSpec.describe 'collection', type: :feature, clean_repo: true do
112
112
 
113
113
  sign_in user
114
114
  end
115
- let(:collection) { create(:named_collection, user: user) }
115
+ let(:collection) { create(:named_collection_lw, user: user) }
116
116
 
117
117
  it "shows a collection with a listing of Descriptive Metadata and catalog-style search results" do
118
118
  visit "/collections/#{collection.id}"