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

Sign up to get free protection for your applications and to get access to all the features.
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}"