sufia 7.2.0 → 7.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +2 -0
  3. data/.rubocop.yml +3 -0
  4. data/.rubocop_todo.yml +1 -2
  5. data/.travis.yml +0 -1
  6. data/Gemfile +2 -1
  7. data/README.md +23 -106
  8. data/app/actors/sufia/apply_permission_template_actor.rb +19 -0
  9. data/app/actors/sufia/create_with_remote_files_actor.rb +2 -2
  10. data/app/actors/sufia/default_admin_set_actor.rb +42 -0
  11. data/app/actors/sufia/interpret_visibility_actor.rb +115 -0
  12. data/app/assets/images/collection.png +0 -0
  13. data/app/assets/javascripts/sufia.js +6 -0
  14. data/app/assets/javascripts/sufia/admin/admin_set/participants.es6 +9 -0
  15. data/app/assets/javascripts/sufia/admin/admin_set/visibility.es6 +134 -0
  16. data/app/assets/javascripts/sufia/admin/admin_set_controls.es6 +11 -0
  17. data/app/assets/javascripts/sufia/app.js +27 -5
  18. data/app/assets/javascripts/sufia/autocomplete.es6 +15 -0
  19. data/app/assets/javascripts/sufia/autocomplete/work.es6 +29 -0
  20. data/app/assets/javascripts/sufia/dashboard_actions.js +2 -4
  21. data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +14 -2
  22. data/app/assets/javascripts/sufia/save_work/uploaded_files.es6 +7 -2
  23. data/app/assets/javascripts/sufia/save_work/visibility_component.es6 +245 -4
  24. data/app/assets/javascripts/sufia/select_work_type.es6 +38 -0
  25. data/app/assets/javascripts/sufia/workflow_actions_affix.js +14 -0
  26. data/app/assets/stylesheets/sufia/_dashboard.scss +50 -29
  27. data/app/assets/stylesheets/sufia/_footer.scss +30 -0
  28. data/app/assets/stylesheets/sufia/_header.scss +3 -4
  29. data/app/assets/stylesheets/sufia/_home-page.scss +10 -8
  30. data/app/assets/stylesheets/sufia/_select_work_type.scss +43 -0
  31. data/app/assets/stylesheets/sufia/_sufia.scss +4 -1
  32. data/app/assets/stylesheets/sufia/_variables.scss +3 -0
  33. data/app/assets/stylesheets/sufia/admin.scss +66 -169
  34. data/app/assets/stylesheets/sufia/blacklight_gallery.scss +17 -0
  35. data/app/authorities/qa/authorities/find_works.rb +15 -0
  36. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
  37. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +26 -13
  38. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +25 -0
  39. data/app/controllers/concerns/sufia/controller.rb +8 -0
  40. data/app/controllers/concerns/sufia/deny_access_override_behavior.rb +1 -1
  41. data/app/controllers/concerns/sufia/file_sets_controller_behavior.rb +5 -14
  42. data/app/controllers/concerns/sufia/homepage_controller_behavior.rb +2 -0
  43. data/app/controllers/concerns/sufia/users_controller_behavior.rb +18 -7
  44. data/app/controllers/concerns/sufia/works_controller_behavior.rb +13 -10
  45. data/app/controllers/my/collections_controller.rb +5 -0
  46. data/app/controllers/my/shares_controller.rb +5 -0
  47. data/app/controllers/my/works_controller.rb +5 -0
  48. data/app/controllers/stats_controller.rb +1 -1
  49. data/app/controllers/sufia/admin/admin_sets_controller.rb +20 -2
  50. data/app/controllers/sufia/admin/permission_template_accesses_controller.rb +15 -0
  51. data/app/controllers/sufia/admin/permission_templates_controller.rb +29 -0
  52. data/app/controllers/sufia/admin_controller.rb +2 -0
  53. data/app/controllers/sufia/trophies_controller.rb +0 -2
  54. data/app/forms/sufia/forms/admin_set_form.rb +19 -0
  55. data/app/forms/sufia/forms/batch_edit_form.rb +16 -6
  56. data/app/forms/sufia/forms/batch_upload_form.rb +3 -2
  57. data/app/forms/sufia/forms/permission_template_form.rb +115 -0
  58. data/app/forms/sufia/forms/work_form.rb +6 -0
  59. data/app/helpers/batch_edits_helper.rb +1 -1
  60. data/app/helpers/sufia/citations_behavior.rb +0 -5
  61. data/app/helpers/sufia/citations_behaviors/formatters.rb +0 -1
  62. data/app/helpers/sufia/sufia_helper_behavior.rb +38 -6
  63. data/app/indexers/sufia/collection_indexer.rb +6 -0
  64. data/app/jobs/batch_create_job.rb +7 -15
  65. data/app/models/batch_upload_item.rb +2 -0
  66. data/app/models/concerns/sufia/ability.rb +12 -1
  67. data/app/models/sufia/permission_template.rb +102 -0
  68. data/app/models/sufia/permission_template_access.rb +18 -0
  69. data/app/presenters/sufia/admin_set_presenter.rb +1 -1
  70. data/app/presenters/sufia/model_icon.rb +7 -0
  71. data/app/presenters/sufia/select_type_list_presenter.rb +37 -0
  72. data/app/presenters/sufia/select_type_presenter.rb +35 -0
  73. data/app/presenters/sufia/work_show_presenter.rb +0 -2
  74. data/app/search_builders/collection_search_builder.rb +0 -2
  75. data/app/search_builders/sufia/admin_set_search_builder.rb +24 -0
  76. data/app/search_builders/sufia/catalog_search_builder.rb +10 -4
  77. data/app/search_builders/sufia/find_works_search_builder.rb +44 -0
  78. data/app/search_builders/sufia/my_search_builder_behavior.rb +0 -4
  79. data/app/search_builders/sufia/my_works_search_builder.rb +1 -1
  80. data/app/services/sufia/actor_factory.rb +6 -2
  81. data/app/services/sufia/admin_set_create_service.rb +22 -0
  82. data/app/services/sufia/admin_set_service.rb +46 -16
  83. data/app/services/sufia/collection_thumbnail_path_service.rb +10 -0
  84. data/app/services/sufia/workflow/abstract_notification.rb +39 -0
  85. data/app/services/sufia/workflow/changes_required_notification.rb +22 -0
  86. data/app/services/sufia/workflow/complete_notification.rb +22 -0
  87. data/app/services/sufia/workflow/pending_review_notification.rb +21 -0
  88. data/app/services/sufia/workflow/workflow_by_admin_set_strategy.rb +15 -0
  89. data/app/views/_masthead.html.erb +4 -4
  90. data/app/views/_toolbar.html.erb +31 -9
  91. data/app/views/_user_util_links.html.erb +7 -7
  92. data/app/views/batch_edits/edit.html.erb +24 -12
  93. data/app/views/catalog/_thumbnail_list_collection.html.erb +1 -1
  94. data/app/views/collections/_form.html.erb +2 -2
  95. data/app/views/collections/_media_display.html.erb +1 -1
  96. data/app/views/curation_concerns/base/_find_work_widget.html.erb +16 -0
  97. data/app/views/curation_concerns/base/_form.html.erb +6 -0
  98. data/app/views/curation_concerns/base/_form_child_work_relationships.html.erb +1 -1
  99. data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
  100. data/app/views/curation_concerns/base/_form_parent_work_relationships.html.erb +43 -0
  101. data/app/views/curation_concerns/base/_form_progress.html.erb +7 -4
  102. data/app/views/curation_concerns/base/_form_relationships.html.erb +6 -6
  103. data/app/views/curation_concerns/base/_form_share.html.erb +1 -2
  104. data/app/views/curation_concerns/base/_guts4form.html.erb +1 -1
  105. data/app/views/curation_concerns/base/_social_media.html.erb +1 -1
  106. data/app/views/curation_concerns/base/_workflow_actions_widget.erb +3 -0
  107. data/app/views/curation_concerns/base/edit.html.erb +1 -1
  108. data/app/views/curation_concerns/base/new.html.erb +1 -1
  109. data/app/views/curation_concerns/base/show.html.erb +4 -1
  110. data/app/views/curation_concerns/file_sets/_show_actions.html.erb +0 -3
  111. data/app/views/dashboard/_create_work_action.html.erb +20 -0
  112. data/app/views/dashboard/_index_partials/_heading_actions.html.erb +9 -22
  113. data/app/views/layouts/admin.html.erb +8 -68
  114. data/app/views/layouts/curation_concerns/1_column.html.erb +4 -31
  115. data/app/views/layouts/homepage.html.erb +15 -45
  116. data/app/views/layouts/sufia-dashboard.html.erb +1 -36
  117. data/app/views/layouts/sufia.html.erb +49 -0
  118. data/app/views/my/_document_list.html.erb +1 -1
  119. data/app/views/my/_facet_limit.html.erb +2 -2
  120. data/app/views/my/_index_partials/_default_group.html.erb +10 -10
  121. data/app/views/my/_index_partials/_list_collections.html.erb +1 -1
  122. data/app/views/my/_sort_and_per_page.html.erb +8 -8
  123. data/app/views/records/edit_fields/_rights.html.erb +0 -1
  124. data/app/views/shared/_footer.html.erb +1 -1
  125. data/app/views/shared/_select_work_type_modal.html.erb +34 -0
  126. data/app/views/sufia/admin/_collections.html.erb +31 -0
  127. data/app/views/sufia/admin/_sidebar.html.erb +35 -23
  128. data/app/views/sufia/admin/admin_sets/_form.html.erb +38 -15
  129. data/app/views/sufia/admin/admin_sets/_form_metadata.html.erb +2 -0
  130. data/app/views/sufia/admin/admin_sets/_form_participant_table.html.erb +21 -0
  131. data/app/views/sufia/admin/admin_sets/_form_participants.html.erb +68 -0
  132. data/app/views/sufia/admin/admin_sets/_form_visibility.html.erb +58 -0
  133. data/app/views/sufia/admin/admin_sets/index.html.erb +29 -33
  134. data/app/views/sufia/admin/admin_sets/show.html.erb +3 -0
  135. data/app/views/sufia/admin/show.html.erb +22 -19
  136. data/app/views/sufia/batch_uploads/_form.html.erb +2 -1
  137. data/app/views/sufia/homepage/index.html.erb +11 -3
  138. data/app/views/sufia/uploads/_js_templates.html.erb +15 -11
  139. data/app/views/users/_user_row.html.erb +10 -0
  140. data/app/views/users/index.html.erb +1 -12
  141. data/config/features.rb +2 -0
  142. data/config/locales/sufia.en.yml +122 -37
  143. data/config/routes.rb +4 -1
  144. data/db/migrate/20161021175854_create_permission_template.rb +11 -0
  145. data/db/migrate/20161021180154_create_permission_template_access.rb +11 -0
  146. data/db/migrate/20161116222307_add_release_to_permission_templates.rb +6 -0
  147. data/lib/generators/sufia/install_generator.rb +12 -3
  148. data/lib/generators/sufia/templates/catalog_controller.rb +3 -13
  149. data/lib/generators/sufia/templates/workflow.json.erb +65 -0
  150. data/lib/generators/sufia/upgrade700_generator.rb +1 -1
  151. data/lib/generators/sufia/work/templates/locale.en.yml.erb +37 -0
  152. data/lib/generators/sufia/{work_generator.rb → work/work_generator.rb} +25 -5
  153. data/lib/sufia.rb +0 -1
  154. data/lib/sufia/engine.rb +7 -0
  155. data/lib/sufia/move_all_works_to_admin_set.rb +8 -0
  156. data/lib/sufia/version.rb +1 -1
  157. data/lib/tasks/migrate.rake +8 -0
  158. data/spec/actors/sufia/apply_permission_template_actor_spec.rb +64 -0
  159. data/spec/actors/sufia/create_with_remote_files_actor_spec.rb +8 -0
  160. data/spec/actors/sufia/default_admin_set_actor_spec.rb +43 -0
  161. data/spec/actors/sufia/interpret_visibility_actor_spec.rb +266 -0
  162. data/spec/authorities/qa/authorities/find_works_spec.rb +55 -0
  163. data/spec/controllers/batch_edits_controller_spec.rb +1 -6
  164. data/spec/controllers/citations_controller_spec.rb +49 -10
  165. data/spec/controllers/collections_controller_spec.rb +39 -0
  166. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +22 -1
  167. data/spec/controllers/dashboard_controller_spec.rb +0 -8
  168. data/spec/controllers/depositors_controller_spec.rb +2 -2
  169. data/spec/controllers/downloads_controller_spec.rb +2 -2
  170. data/spec/controllers/my/collections_controller_spec.rb +5 -0
  171. data/spec/controllers/my/shares_controller_spec.rb +5 -0
  172. data/spec/controllers/my/works_controller_spec.rb +5 -0
  173. data/spec/controllers/stats_controller_spec.rb +1 -1
  174. data/spec/controllers/sufia/admin/admin_sets_controller_spec.rb +33 -5
  175. data/spec/controllers/sufia/admin/permission_template_accesses_controller_spec.rb +36 -0
  176. data/spec/controllers/sufia/admin/permission_templates_controller_spec.rb +46 -0
  177. data/spec/controllers/sufia/admin_controller_spec.rb +6 -0
  178. data/spec/controllers/sufia/batch_uploads_controller_spec.rb +40 -42
  179. data/spec/controllers/sufia/homepage_controller_spec.rb +14 -0
  180. data/spec/controllers/sufia/trophies_controller_spec.rb +17 -4
  181. data/spec/controllers/users_controller_spec.rb +13 -4
  182. data/spec/factories/permission_template_accesses.rb +5 -0
  183. data/spec/factories/permission_templates.rb +5 -0
  184. data/spec/factories/sipity_entities.rb +7 -0
  185. data/spec/factories/users.rb +4 -0
  186. data/spec/factories/workflow_states.rb +6 -0
  187. data/spec/factories/workflows.rb +5 -0
  188. data/spec/features/admin_admin_set_spec.rb +6 -4
  189. data/spec/features/batch_edit_spec.rb +0 -1
  190. data/spec/features/collection_spec.rb +4 -4
  191. data/spec/features/edit_work_spec.rb +1 -0
  192. data/spec/features/work_show_spec.rb +10 -0
  193. data/spec/forms/sufia/forms/admin_set_form_spec.rb +2 -1
  194. data/spec/forms/sufia/forms/batch_edit_form_spec.rb +30 -0
  195. data/spec/forms/sufia/forms/permission_template_form_spec.rb +196 -0
  196. data/spec/forms/sufia/forms/work_form_spec.rb +35 -1
  197. data/spec/helpers/batch_edits_helper_spec.rb +4 -4
  198. data/spec/helpers/blacklight_helper_spec.rb +1 -1
  199. data/spec/helpers/sufia_helper_spec.rb +39 -7
  200. data/spec/indexers/sufia/collection_indexer_spec.rb +12 -0
  201. data/spec/javascripts/autocomplete_spec.js.coffee +46 -6
  202. data/spec/javascripts/visibility_component_spec.js +491 -0
  203. data/spec/jobs/batch_create_job_spec.rb +27 -28
  204. data/spec/lib/sufia/arkivo_spec.rb +14 -0
  205. data/spec/lib/sufia/controlled_vocabulary/importer/downloader_spec.rb +31 -0
  206. data/spec/lib/sufia/move_all_works_to_admin_set_spec.rb +13 -0
  207. data/spec/lib/sufia/zotero_spec.rb +8 -0
  208. data/spec/models/sufia/ability_spec.rb +54 -14
  209. data/spec/models/sufia/permission_template_spec.rb +144 -0
  210. data/spec/models/sufia/user_usage_stats_spec.rb +8 -2
  211. data/spec/presenters/sufia/homepage_presenter_spec.rb +1 -1
  212. data/spec/presenters/sufia/select_type_list_presenter_spec.rb +26 -0
  213. data/spec/presenters/sufia/select_type_presenter_spec.rb +21 -0
  214. data/spec/search_builder/sufia/admin_set_search_builder_spec.rb +57 -0
  215. data/spec/search_builder/sufia/catalog_search_builder_spec.rb +40 -14
  216. data/spec/search_builder/sufia/find_works_search_builder_spec.rb +60 -0
  217. data/spec/search_builder/sufia/my_shares_search_builder_spec.rb +4 -1
  218. data/spec/search_builder/sufia/single_admin_set_search_builder_spec.rb +5 -1
  219. data/spec/services/sufia/actor_factory_spec.rb +13 -5
  220. data/spec/services/sufia/admin_set_create_service_spec.rb +27 -0
  221. data/spec/services/sufia/admin_set_service_spec.rb +104 -17
  222. data/spec/services/sufia/workflow/changes_required_notification_spec.rb +32 -0
  223. data/spec/services/sufia/workflow/complete_notification_spec.rb +32 -0
  224. data/spec/services/sufia/workflow/pending_review_notification_spec.rb +31 -0
  225. data/spec/services/sufia/workflow/workflow_by_admin_set_strategy_spec.rb +22 -0
  226. data/spec/spec_helper.rb +24 -5
  227. data/spec/support/proxies.rb +1 -1
  228. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
  229. data/spec/views/_toolbar.html.erb_spec.rb +23 -6
  230. data/spec/views/batch_edits/edit.html.erb_spec.rb +7 -1
  231. data/spec/views/collections/_form_for_select_collection.html.erb_spec.rb +1 -3
  232. data/spec/views/curation_concerns/base/_find_work_widget.html.erb_spec.rb +22 -0
  233. data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +7 -0
  234. data/spec/views/curation_concerns/base/_form_child_work_relationships.html.erb_spec.rb +1 -0
  235. data/spec/views/curation_concerns/base/_form_parent_work_relationships.html.erb_spec.rb +114 -0
  236. data/spec/views/curation_concerns/base/_form_progress.html.erb_spec.rb +3 -2
  237. data/spec/views/curation_concerns/base/_social_media.html.erb_spec.rb +1 -1
  238. data/spec/views/curation_concerns/base/edit.html.erb_spec.rb +1 -1
  239. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +5 -1
  240. data/spec/views/curation_concerns/file_sets/_show_actions.html.erb_spec.rb +2 -2
  241. data/spec/views/dashboard/create_work_action.html.erb_spec.rb +27 -0
  242. data/spec/views/dashboard/index_spec.rb +7 -2
  243. data/spec/views/my/_sort_and_per_page.html.erb_spec.rb +33 -0
  244. data/spec/views/shared/select_work_type_modal.html.erb_spec.rb +32 -0
  245. data/spec/views/sufia/admin/admin_sets/_form.html.erb_spec.rb +18 -0
  246. data/spec/views/sufia/admin/admin_sets/_form_participants.html.erb_spec.rb +13 -0
  247. data/spec/views/sufia/admin/admin_sets/_form_visibility.html.erb_spec.rb +23 -0
  248. data/spec/views/sufia/batch_uploads/_form.html.erb_spec.rb +2 -12
  249. data/spec/views/sufia/homepage/index.html.erb_spec.rb +29 -8
  250. data/sufia.gemspec +5 -6
  251. data/tasks/sufia-dev.rake +6 -10
  252. data/template.rb +15 -0
  253. metadata +140 -28
  254. data/app/assets/stylesheets/sufia/widgets.css +0 -288
  255. data/app/helpers/sufia/citations_behaviors/formatters/endnote_formatter.rb +0 -49
  256. data/app/models/domain_term.rb +0 -4
  257. data/app/views/citations/file.html.erb +0 -0
  258. data/app/views/records/_rights_modal.html.erb +0 -1
  259. data/db/migrate/20160328222160_create_local_authorities.rb +0 -50
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ # Note: test app generates multiple work types (concerns) now
4
+ describe Sufia::SelectTypeListPresenter do
5
+ let(:instance) { described_class.new(user) }
6
+ let(:user) { nil }
7
+
8
+ describe "#many?" do
9
+ subject { instance.many? }
10
+
11
+ context 'without a logged in user' do
12
+ it { is_expected.to be false }
13
+ end
14
+
15
+ context 'with a logged in user' do
16
+ let(:user) { create(:user) }
17
+ it { is_expected.to be true }
18
+ context "if authorized_models returns only one" do
19
+ before do
20
+ allow(instance).to receive(:authorized_models).and_return([double])
21
+ end
22
+ it { is_expected.to be false }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Sufia::SelectTypePresenter do
4
+ let(:instance) { described_class.new(model) }
5
+ let(:model) { GenericWork }
6
+
7
+ describe "#icon_class" do
8
+ subject { instance.icon_class }
9
+ it { is_expected.to eq 'fa fa-file-text-o' }
10
+ end
11
+
12
+ describe "#description" do
13
+ subject { instance.description }
14
+ it { is_expected.to eq 'Generic work works' }
15
+ end
16
+
17
+ describe "#name" do
18
+ subject { instance.name }
19
+ it { is_expected.to eq 'Generic Work' }
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::AdminSetSearchBuilder do
4
+ let(:context) do
5
+ double(blacklight_config: CatalogController.blacklight_config,
6
+ current_ability: ability)
7
+ end
8
+ let(:ability) do
9
+ instance_double(Ability,
10
+ admin?: false,
11
+ user_groups: [],
12
+ current_user: user)
13
+ end
14
+ let(:user) { create(:user) }
15
+ let(:builder) { described_class.new(context, access) }
16
+ subject { builder.to_h }
17
+
18
+ context "when searching for read access" do
19
+ let(:access) { :read }
20
+ it 'is successful' do
21
+ expect(subject['fq']).to eq ["edit_access_person_ssim:#{user.user_key} OR discover_access_person_ssim:#{user.user_key} OR read_access_person_ssim:#{user.user_key}",
22
+ "{!terms f=has_model_ssim}AdminSet",
23
+ "-suppressed_bsi:true"]
24
+ end
25
+ end
26
+
27
+ context "when searching for deposit access" do
28
+ let(:access) { :deposit }
29
+ let(:permission_template1) { create(:permission_template, admin_set_id: 7) }
30
+ let(:permission_template2) { create(:permission_template, admin_set_id: 8) }
31
+ let(:permission_template3) { create(:permission_template, admin_set_id: 9) }
32
+
33
+ before do
34
+ create(:permission_template_access,
35
+ permission_template: permission_template1,
36
+ agent_type: 'user',
37
+ agent_id: user.user_key,
38
+ access: 'deposit')
39
+ create(:permission_template_access,
40
+ permission_template: permission_template2,
41
+ agent_type: 'user',
42
+ agent_id: user.user_key,
43
+ access: 'manage')
44
+ create(:permission_template_access,
45
+ permission_template: permission_template3,
46
+ agent_type: 'user',
47
+ agent_id: user.user_key,
48
+ access: 'view')
49
+ end
50
+
51
+ it 'is successful' do
52
+ expect(subject['fq']).to eq ["{!terms f=id}7,8",
53
+ "{!terms f=has_model_ssim}AdminSet",
54
+ "-suppressed_bsi:true"]
55
+ end
56
+ end
57
+ end
@@ -1,22 +1,48 @@
1
1
  describe Sufia::CatalogSearchBuilder do
2
- let(:builder) { described_class.new([], self) }
3
- let(:solr_params) { { q: user_query } }
2
+ let(:context) { double }
3
+ let(:builder) { described_class.new(context).with(blacklight_params) }
4
+ let(:solr_params) { Blacklight::Solr::Request.new }
5
+ let(:blacklight_params) { { q: user_query } }
6
+ let(:user_query) { "find me" }
4
7
 
5
- context "with a user query" do
6
- let(:user_query) { "find me" }
7
- it "creates a valid solr join for works and files" do
8
- builder.show_works_or_works_that_contain_files(solr_params)
9
- expect(solr_params[:user_query]).to eq user_query
10
- expect(solr_params[:q]).to eq "{!lucene}_query_:\"{!dismax v=$user_query}\" _query_:\"{!join from=id to=file_set_ids_ssim}{!dismax v=$user_query}\""
8
+ describe "#show_works_or_works_that_contain_files" do
9
+ subject { builder.show_works_or_works_that_contain_files(solr_params) }
10
+
11
+ context "with a user query" do
12
+ it "creates a valid solr join for works and files" do
13
+ subject
14
+ expect(solr_params[:user_query]).to eq user_query
15
+ expect(solr_params[:q]).to eq "{!lucene}_query_:\"{!dismax v=$user_query}\" _query_:\"{!join from=id to=file_set_ids_ssim}{!dismax v=$user_query}\""
16
+ end
17
+ end
18
+
19
+ context "without a user query" do
20
+ let(:blacklight_params) { {} }
21
+ it "does not modify the query" do
22
+ subject
23
+ expect(solr_params[:user_query]).to be_nil
24
+ expect(solr_params[:q]).to be_nil
25
+ end
26
+ end
27
+
28
+ context "when doing a fielded search" do
29
+ let(:blacklight_params) { { q: user_query, search_field: 'depositor' } }
30
+ # Blacklight sets up these values when we've done a fielded search.
31
+ # Here we're ensuring they aren't wiped out
32
+ let(:solr_params) { Blacklight::Solr::Request.new("q" => "{!qf=depositor_ssim pf=depositor_ssim}\"#{user_query}\"") }
33
+ it "does not modify the query" do
34
+ subject
35
+ expect(solr_params[:user_query]).to be_nil
36
+ expect(solr_params[:q]).to eq '{!qf=depositor_ssim pf=depositor_ssim}"find me"'
37
+ end
11
38
  end
12
39
  end
13
40
 
14
- context "with out a user query" do
15
- let(:user_query) { nil }
16
- it "does not modify the query" do
17
- builder.show_works_or_works_that_contain_files(solr_params)
18
- expect(solr_params[:user_query]).to be_nil
19
- expect(solr_params[:q]).to be_nil
41
+ describe "#show_only_active_records" do
42
+ subject { builder.show_only_active_records(solr_params) }
43
+ it "includes suppressed switch" do
44
+ subject
45
+ expect(solr_params[:fq]).to eq ["-suppressed_bsi:true"]
20
46
  end
21
47
  end
22
48
  end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sufia::FindWorksSearchBuilder do
4
+ let(:controller) { Qa::TermsController.new }
5
+ let(:user) { create(:user) }
6
+ let(:ability) { instance_double(Ability, admin?: false, user_groups: [], current_user: user) }
7
+ let(:q) { "foo" }
8
+ let(:params) { ActionController::Parameters.new(q: q, id: work.id, user: user.email, controller: "qa/terms", action: "search", vocab: "find_works") }
9
+
10
+ let(:context) do
11
+ double(current_ability: ability,
12
+ current_user: user,
13
+ params: params)
14
+ end
15
+ let!(:work) { create(:generic_work, :public, title: ['foo'], user: user) }
16
+
17
+ let(:builder) { described_class.new(context) }
18
+ let(:solr_params) { Blacklight::Solr::Request.new }
19
+
20
+ describe "#filter_on_title" do
21
+ subject { builder.filter_on_title(solr_params) }
22
+ it "is successful" do
23
+ subject
24
+ expect(solr_params[:fq]).to eq [ActiveFedora::SolrQueryBuilder.construct_query(title_tesim: q)]
25
+ end
26
+ end
27
+
28
+ describe "#show_only_other_works" do
29
+ subject { builder.show_only_other_works(solr_params) }
30
+ it "is successful" do
31
+ subject
32
+ expect(solr_params[:fq]).to eq ["-" + ActiveFedora::SolrQueryBuilder.construct_query_for_ids([work.id])]
33
+ end
34
+ end
35
+
36
+ describe "#show_only_works_not_child" do
37
+ subject { builder.show_only_works_not_child(solr_params) }
38
+ it "is successful" do
39
+ subject
40
+ ids = ActiveFedora::SolrService.query("{!field f=id}#{work.id}", fl: "member_ids_ssim").flat_map { |x| x.fetch("member_ids_ssim", []) }
41
+ expect(solr_params[:fq]).to eq ["-" + ActiveFedora::SolrQueryBuilder.construct_query_for_ids([ids])]
42
+ end
43
+ end
44
+
45
+ describe "#show_only_works_not_parent" do
46
+ subject { builder.show_only_works_not_parent(solr_params) }
47
+ it "is successful" do
48
+ subject
49
+ expect(solr_params[:fq]).to eq ["-" + ActiveFedora::SolrQueryBuilder.construct_query(member_ids_ssim: work.id)]
50
+ end
51
+ end
52
+
53
+ describe "#only_works?" do
54
+ subject { builder.only_works? }
55
+ it "is successful" do
56
+ subject
57
+ expect(subject). to eq true
58
+ end
59
+ end
60
+ end
@@ -10,6 +10,8 @@ describe Sufia::MySharesSearchBuilder do
10
10
  end
11
11
  let(:builder) { described_class.new(scope) }
12
12
 
13
+ let(:solr_params) { { q: user_query } }
14
+
13
15
  before do
14
16
  allow(builder).to receive(:gated_discovery_filters).and_return(["access_filter1", "access_filter2"])
15
17
  allow(ActiveFedora::SolrQueryBuilder).to receive(:construct_query_for_rel)
@@ -21,7 +23,8 @@ describe Sufia::MySharesSearchBuilder do
21
23
 
22
24
  it "filters things we have access to in which we are not the depositor" do
23
25
  expect(subject).to eq ["access_filter1 OR access_filter2",
24
- "{!terms f=has_model_ssim}GenericWork,Collection",
26
+ "{!terms f=has_model_ssim}GenericWork,Atlas,Collection",
27
+ "-suppressed_bsi:true",
25
28
  "-depositor"]
26
29
  end
27
30
  end
@@ -12,6 +12,10 @@ RSpec.describe Sufia::SingleAdminSetSearchBuilder do
12
12
  expect(builder).to receive(:find_one)
13
13
  end
14
14
  subject { builder.with(id: '123').query.fetch('fq') }
15
- it { is_expected.to match_array ["", "{!terms f=has_model_ssim}AdminSet"] }
15
+ it do
16
+ is_expected.to match_array ["",
17
+ "-suppressed_bsi:true",
18
+ "{!terms f=has_model_ssim}AdminSet"]
19
+ end
16
20
  end
17
21
  end
@@ -1,18 +1,22 @@
1
- describe Sufia::ActorFactory do
1
+ describe Sufia::ActorFactory, :no_clean do
2
2
  let(:work) { GenericWork.new }
3
3
  let(:user) { double }
4
4
 
5
5
  describe '.stack_actors' do
6
6
  subject { described_class.stack_actors(work) }
7
7
  it do
8
- is_expected.to eq [Sufia::CreateWithRemoteFilesActor,
8
+ is_expected.to eq [CurationConcerns::OptimisticLockValidator,
9
+ Sufia::CreateWithRemoteFilesActor,
9
10
  Sufia::CreateWithFilesActor,
10
11
  CurationConcerns::Actors::AddToCollectionActor,
11
12
  CurationConcerns::Actors::AddToWorkActor,
12
13
  CurationConcerns::Actors::AssignRepresentativeActor,
13
14
  CurationConcerns::Actors::AttachFilesActor,
14
15
  CurationConcerns::Actors::ApplyOrderActor,
15
- CurationConcerns::Actors::InterpretVisibilityActor,
16
+ Sufia::InterpretVisibilityActor,
17
+ Sufia::DefaultAdminSetActor,
18
+ CurationConcerns::Actors::InitializeWorkflowActor,
19
+ Sufia::ApplyPermissionTemplateActor,
16
20
  CurationConcerns::Actors::GenericWorkActor]
17
21
  end
18
22
  end
@@ -21,16 +25,20 @@ describe Sufia::ActorFactory do
21
25
  subject { described_class.build(work, user) }
22
26
  it "has the correct stack frames" do
23
27
  expect(subject.more_actors).to eq [
28
+ Sufia::CreateWithRemoteFilesActor,
24
29
  Sufia::CreateWithFilesActor,
25
30
  CurationConcerns::Actors::AddToCollectionActor,
26
31
  CurationConcerns::Actors::AddToWorkActor,
27
32
  CurationConcerns::Actors::AssignRepresentativeActor,
28
33
  CurationConcerns::Actors::AttachFilesActor,
29
34
  CurationConcerns::Actors::ApplyOrderActor,
30
- CurationConcerns::Actors::InterpretVisibilityActor,
35
+ Sufia::InterpretVisibilityActor,
36
+ Sufia::DefaultAdminSetActor,
37
+ CurationConcerns::Actors::InitializeWorkflowActor,
38
+ Sufia::ApplyPermissionTemplateActor,
31
39
  CurationConcerns::Actors::GenericWorkActor
32
40
  ]
33
- expect(subject.first_actor_class).to eq Sufia::CreateWithRemoteFilesActor
41
+ expect(subject.first_actor_class).to eq CurationConcerns::OptimisticLockValidator
34
42
  end
35
43
  end
36
44
 
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Sufia::AdminSetCreateService do
4
+ let(:admin_set) { AdminSet.new(title: ['test']) }
5
+ let(:service) { described_class.new(admin_set, user) }
6
+ let(:user) { create(:user) }
7
+
8
+ describe "#create" do
9
+ subject { service.create }
10
+
11
+ context "when the admin_set is valid" do
12
+ it "is successful" do
13
+ expect do
14
+ expect(subject).to be true
15
+ end.to change { admin_set.persisted? }.from(false).to(true)
16
+ expect(admin_set.read_groups).to eq ['public']
17
+ expect(admin_set.edit_groups).to eq ['admin']
18
+ expect(admin_set.creator).to eq [user.user_key]
19
+ end
20
+ end
21
+
22
+ context "when the admin_set is invalid" do
23
+ let(:admin_set) { AdminSet.new } # Missing title
24
+ it { is_expected.to be false }
25
+ end
26
+ end
27
+ end
@@ -1,27 +1,114 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe Sufia::AdminSetService do
4
- let(:admin_set) { AdminSet.new(title: ['test']) }
5
- let(:service) { described_class.new(admin_set, user) }
3
+ RSpec.describe Sufia::AdminSetService, :no_clean do
4
+ let(:controller) { ::CatalogController.new }
5
+ let(:context) do
6
+ double(current_ability: Ability.new(user),
7
+ repository: controller.repository,
8
+ blacklight_config: controller.blacklight_config)
9
+ end
10
+ let(:service) { described_class.new(context) }
6
11
  let(:user) { create(:user) }
7
12
 
8
- describe "#create" do
9
- subject { service.create }
10
-
11
- context "when the admin_set is valid" do
12
- it "is successful" do
13
- expect do
14
- expect(subject).to be true
15
- end.to change { admin_set.persisted? }.from(false).to(true)
16
- expect(admin_set.read_groups).to eq ['public']
17
- expect(admin_set.edit_groups).to eq ['admin']
18
- expect(admin_set.creator).to eq [user.user_key]
13
+ describe '#search_results_with_work_count' do
14
+ let(:access) { :read }
15
+ subject { service.search_results_with_work_count(access) }
16
+ let(:documents) { [doc1, doc2, doc3] }
17
+ let(:doc1) { SolrDocument.new(id: 'xyz123') }
18
+ let(:doc2) { SolrDocument.new(id: 'yyx123') }
19
+ let(:doc3) { SolrDocument.new(id: 'zxy123') }
20
+ let(:connection) { instance_double(RSolr::Client) }
21
+ let(:results) do
22
+ { 'facet_counts' =>
23
+ {
24
+ 'facet_fields' =>
25
+ {
26
+ 'isPartOf_ssim' => [doc1.id, 8, doc2.id, 2]
27
+ }
28
+ } }
29
+ end
30
+
31
+ before do
32
+ allow(service).to receive(:search_results).and_return(documents)
33
+ allow(ActiveFedora::SolrService.instance).to receive(:conn).and_return(connection)
34
+ allow(connection).to receive(:get).with("select", params: { fq: "{!terms f=isPartOf_ssim}xyz123,yyx123,zxy123",
35
+ "facet.field" => "isPartOf_ssim" }).and_return(results)
36
+ end
37
+
38
+ it "returns rows with document in the first column and count in the second column" do
39
+ expect(subject).to eq [[doc1, 8], [doc2, 2], [doc3, nil]]
40
+ end
41
+ end
42
+
43
+ describe "#select_options" do
44
+ subject { service.select_options }
45
+
46
+ context "with permission_template visibility" do
47
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Public Set') }
48
+ let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'Private Set') }
49
+ let!(:permission_template1) { create(:permission_template, admin_set_id: '123', visibility: 'open') }
50
+ let!(:permission_template2) { create(:permission_template, admin_set_id: '345', visibility: 'restricted') }
51
+
52
+ before do
53
+ allow(service).to receive(:search_results)
54
+ .with(:read)
55
+ .and_return([solr_doc1, solr_doc2])
56
+ end
57
+
58
+ it do
59
+ is_expected.to eq [['Public Set', '123', { 'data-visibility' => 'open' }],
60
+ ['Private Set', '345', { 'data-visibility' => 'restricted' }]]
61
+ end
62
+ end
63
+
64
+ context "with permission_template release_date" do
65
+ let(:today) { Time.zone.today }
66
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Fixed Release Date Set') }
67
+ let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'No Delay Set') }
68
+ let(:solr_doc3) { instance_double(SolrDocument, id: '567', to_s: 'One Year Max Embargo Set') }
69
+ let(:solr_doc4) { instance_double(SolrDocument, id: '789', to_s: 'Release Before Date Set') }
70
+ let!(:permission_template1) { create(:permission_template, admin_set_id: '123', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_FIXED, release_date: today + 2.days) }
71
+ let!(:permission_template2) { create(:permission_template, admin_set_id: '345', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_NO_DELAY) }
72
+ let!(:permission_template3) { create(:permission_template, admin_set_id: '567', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_1_YEAR) }
73
+ let!(:permission_template4) { create(:permission_template, admin_set_id: '789', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_BEFORE_DATE, release_date: today + 1.month) }
74
+
75
+ before do
76
+ allow(service).to receive(:search_results)
77
+ .with(:read)
78
+ .and_return([solr_doc1, solr_doc2, solr_doc3, solr_doc4])
79
+ end
80
+
81
+ it do
82
+ is_expected.to eq [['Fixed Release Date Set', '123', { 'data-release-date' => today + 2.days }],
83
+ ['No Delay Set', '345', { 'data-release-date' => today }],
84
+ ['One Year Max Embargo Set', '567', { 'data-release-date' => today + 1.year, 'data-release-before-date' => true }],
85
+ ['Release Before Date Set', '789', { 'data-release-date' => today + 1.month, 'data-release-before-date' => true }]]
19
86
  end
20
87
  end
21
88
 
22
- context "when the admin_set is invalid" do
23
- let(:admin_set) { AdminSet.new } # Missing title
24
- it { is_expected.to be false }
89
+ context "with empty permission_template" do
90
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Empty Template Set') }
91
+ let!(:permission_template1) { create(:permission_template, admin_set_id: '567') }
92
+
93
+ before do
94
+ allow(service).to receive(:search_results)
95
+ .with(:read)
96
+ .and_return([solr_doc1])
97
+ end
98
+
99
+ it { is_expected.to eq [['Empty Template Set', '123', {}]] }
100
+ end
101
+
102
+ context "with no permission_template" do
103
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'No Template Set') }
104
+
105
+ before do
106
+ allow(service).to receive(:search_results)
107
+ .with(:read)
108
+ .and_return([solr_doc1])
109
+ end
110
+
111
+ it { is_expected.to eq [['No Template Set', '123', {}]] }
25
112
  end
26
113
  end
27
114
  end