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
@@ -211,6 +211,45 @@ describe CollectionsController do
211
211
  end
212
212
  end
213
213
 
214
+ describe "#delete" do
215
+ before { sign_in user }
216
+ context "when it succeeds" do
217
+ it "redirects to My Collections" do
218
+ delete :destroy, params: { id: collection }
219
+ expect(response).to have_http_status(:found)
220
+ expect(response).to redirect_to(Sufia::Engine.routes.url_helpers.dashboard_collections_path)
221
+ expect(flash[:notice]).to eq "Collection #{collection.id} was successfully deleted"
222
+ end
223
+
224
+ it "returns json" do
225
+ delete :destroy, params: { format: :json, id: collection }
226
+ expect(response).to have_http_status(:success)
227
+ json = JSON.parse(response.body)
228
+ json_description = json['description']
229
+ expect(json_description).to eq "Collection #{collection.id} was successfully deleted"
230
+ end
231
+ end
232
+ context "when an error occurs" do
233
+ before do
234
+ allow_any_instance_of(Collection).to receive(:destroy).and_return(nil)
235
+ end
236
+ it "renders the edit view" do
237
+ delete :destroy, params: { id: collection }
238
+ expect(response).to have_http_status(:unprocessable_entity)
239
+ expect(response).to render_template(:edit)
240
+ expect(flash[:notice]).to eq "Collection #{collection.id} could not be deleted"
241
+ end
242
+
243
+ it "returns json" do
244
+ delete :destroy, params: { format: :json, id: collection }
245
+ expect(response).to have_http_status(:unprocessable_entity)
246
+ json = JSON.parse(response.body)
247
+ json_description = json['description']
248
+ expect(json_description).to eq "Collection #{collection.id} could not be deleted"
249
+ end
250
+ end
251
+ end
252
+
214
253
  describe "#edit" do
215
254
  before { sign_in user }
216
255
 
@@ -44,7 +44,9 @@ describe CurationConcerns::GenericWorksController do
44
44
  it "sets breadcrumbs" do
45
45
  expect(controller).to receive(:add_breadcrumb).with('My Dashboard', Sufia::Engine.routes.url_helpers.dashboard_index_path)
46
46
  expect(controller).to receive(:add_breadcrumb).with('My Works', Sufia::Engine.routes.url_helpers.dashboard_works_path)
47
- expect(controller).to receive(:add_breadcrumb).with(I18n.t("sufia.work.browse_view"), Rails.application.routes.url_helpers.curation_concerns_generic_work_path(work))
47
+ expect(controller).to receive(:add_breadcrumb).with(work.to_s, Rails.application.routes.url_helpers.curation_concerns_generic_work_path(work))
48
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t("sufia.works.edit.breadcrumb"), String)
49
+
48
50
  get :edit, params: { id: work }
49
51
  expect(response).to be_successful
50
52
  end
@@ -186,4 +188,23 @@ describe CurationConcerns::GenericWorksController do
186
188
  end
187
189
  end
188
190
  end
191
+
192
+ describe "#delete" do
193
+ let!(:work) { create(:work, title: ['test title'], user: user) }
194
+
195
+ context "after deletion" do
196
+ it "redirects to My Works" do
197
+ delete :destroy, params: { id: work }
198
+ expect(response).to redirect_to(Sufia::Engine.routes.url_helpers.dashboard_works_path)
199
+ expect(flash[:notice]).to eq "Deleted test title"
200
+ end
201
+
202
+ it "returns json" do
203
+ delete :destroy, params: { format: :json, id: work }
204
+ json = JSON.parse(response.body)
205
+ json_description = json['description']
206
+ expect(json_description).to eq "Deleted #{work.id}"
207
+ end
208
+ end
209
+ end
189
210
  end
@@ -18,15 +18,7 @@ describe DashboardController, type: :controller do
18
18
  get :index
19
19
  expect(response).to be_successful
20
20
  expect(assigns(:user)).to eq(user)
21
- end
22
-
23
- it "gathers the user's recent activity" do
24
- get :index
25
21
  expect(assigns(:activity)).to be_empty
26
- end
27
-
28
- it "gathers the user's notifications" do
29
- get :index
30
22
  expect(assigns(:notifications)).to be_truthy
31
23
  end
32
24
 
@@ -2,7 +2,7 @@ describe DepositorsController do
2
2
  let(:user) { create(:user) }
3
3
  let(:grantee) { create(:user) }
4
4
 
5
- describe "as a logged in user" do
5
+ context "as a logged in user" do
6
6
  before do
7
7
  sign_in user
8
8
  end
@@ -51,7 +51,7 @@ describe DepositorsController do
51
51
  end
52
52
  end
53
53
 
54
- describe "as a user without access" do
54
+ context "as a user without access" do
55
55
  before do
56
56
  sign_in create(:user)
57
57
  end
@@ -54,6 +54,7 @@ describe DownloadsController, type: :controller do
54
54
  end
55
55
 
56
56
  describe "when not logged in as reader" do
57
+ let(:default_image) { ActionController::Base.helpers.image_path 'default.png' }
57
58
  before do
58
59
  sign_in create(:user)
59
60
  end
@@ -61,8 +62,7 @@ describe DownloadsController, type: :controller do
61
62
  describe "show" do
62
63
  it "denies access" do
63
64
  get :show, params: { id: file }
64
- expect(response).to redirect_to root_path
65
- expect(flash[:alert]).to eq 'You are not authorized to access this page.'
65
+ expect(response).to redirect_to default_image
66
66
  end
67
67
  end
68
68
  end
@@ -26,5 +26,10 @@ describe My::CollectionsController, type: :controller do
26
26
  expect(assigns[:document_list].map(&:id)).to contain_exactly(first_collection.id)
27
27
  end
28
28
  end
29
+
30
+ describe "#search_facet_path" do
31
+ subject { controller.send(:search_facet_path, id: 'keyword_sim') }
32
+ it { is_expected.to eq "/dashboard/collections/facet/keyword_sim" }
33
+ end
29
34
  end
30
35
  end
@@ -38,4 +38,9 @@ describe My::SharesController, type: :controller do
38
38
  end
39
39
  end
40
40
  end
41
+
42
+ describe "#search_facet_path" do
43
+ subject { controller.send(:search_facet_path, id: 'keyword_sim') }
44
+ it { is_expected.to eq "/dashboard/shares/facet/keyword_sim" }
45
+ end
41
46
  end
@@ -40,4 +40,9 @@ describe My::WorksController, type: :controller do
40
40
  expect(assigns(:add_files_to_collection)).to eql('12345')
41
41
  end
42
42
  end
43
+
44
+ describe "#search_facet_path" do
45
+ subject { controller.send(:search_facet_path, id: 'keyword_sim') }
46
+ it { is_expected.to eq "/dashboard/works/facet/keyword_sim" }
47
+ end
43
48
  end
@@ -59,7 +59,7 @@ describe StatsController do
59
59
  expect(Sufia::WorkUsage).to receive(:new).with(work.id).and_return(usage)
60
60
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.my.works'), Sufia::Engine.routes.url_helpers.dashboard_works_path)
61
61
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
62
- expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.work.browse_view'), main_app.curation_concerns_generic_work_path(work))
62
+ expect(controller).to receive(:add_breadcrumb).with("Test title", main_app.curation_concerns_generic_work_path(work))
63
63
  get :work, params: { id: work }
64
64
  expect(response).to be_success
65
65
  expect(response).to render_template('stats/work')
@@ -55,9 +55,9 @@ describe Sufia::Admin::AdminSetsController do
55
55
  end
56
56
 
57
57
  describe "#create" do
58
- let(:service) { instance_double(Sufia::AdminSetService) }
58
+ let(:service) { instance_double(Sufia::AdminSetCreateService) }
59
59
  before do
60
- allow(Sufia::AdminSetService).to receive(:new)
60
+ allow(Sufia::AdminSetCreateService).to receive(:new)
61
61
  .with(AdminSet, user)
62
62
  .and_return(service)
63
63
  end
@@ -66,7 +66,8 @@ describe Sufia::Admin::AdminSetsController do
66
66
  it 'creates file sets' do
67
67
  expect(service).to receive(:create).and_return(true)
68
68
  post :create, params: { admin_set: { title: 'Test title',
69
- description: 'test description' } }
69
+ description: 'test description',
70
+ workflow_name: 'default' } }
70
71
  expect(response).to be_redirect
71
72
  end
72
73
  end
@@ -108,15 +109,42 @@ describe Sufia::Admin::AdminSetsController do
108
109
 
109
110
  describe "#update" do
110
111
  let(:admin_set) { create(:admin_set, edit_users: [user]) }
112
+ let(:permission_template) { Sufia::PermissionTemplate.find_or_create_by(admin_set_id: admin_set.id) }
111
113
  it 'updates a record' do
112
114
  # Prevent a save which causes Fedora to complain it doesn't know the referenced node.
113
115
  expect_any_instance_of(AdminSet).to receive(:save).and_return(true)
114
116
  patch :update, params: { id: admin_set,
115
- admin_set: { title: "Improved title",
116
- thumbnail_id: "mw22v559x" } }
117
+ admin_set: { title: "Improved title", thumbnail_id: "mw22v559x", workflow_name: "one_step_mediated_deposit" } }
117
118
  expect(response).to be_redirect
118
119
  expect(assigns[:admin_set].title).to eq ['Improved title']
119
120
  expect(assigns[:admin_set].thumbnail_id).to eq 'mw22v559x'
121
+ expect(permission_template.workflow_name).to eq 'one_step_mediated_deposit'
122
+ end
123
+ end
124
+
125
+ describe "#destroy" do
126
+ let(:admin_set) { create(:admin_set, edit_users: [user]) }
127
+ context "with empty admin set" do
128
+ it "deletes the admin set" do
129
+ delete :destroy, params: { id: admin_set }
130
+ expect(response).to have_http_status(:found)
131
+ expect(response).to redirect_to(Sufia::Engine.routes.url_helpers.admin_admin_sets_path)
132
+ expect(flash[:notice]).to eq "Administrative set successfully deleted"
133
+ end
134
+ end
135
+ context "with a non-empty admin set" do
136
+ let(:work) { create(:generic_work, user: user) }
137
+ before do
138
+ admin_set.members << work
139
+ admin_set.reload
140
+ end
141
+ it "detaches the works and deletes the admin set" do
142
+ delete :destroy, params: { id: admin_set }
143
+ expect(response).to have_http_status(:found)
144
+ expect(response).to redirect_to(Sufia::Engine.routes.url_helpers.admin_admin_sets_path)
145
+ expect(flash[:notice]).to eq "Administrative set successfully deleted"
146
+ expect(GenericWork.exists?(work.id)).to be true
147
+ end
120
148
  end
121
149
  end
122
150
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Sufia::Admin::PermissionTemplateAccessesController do
4
+ routes { Sufia::Engine.routes }
5
+ before do
6
+ sign_in create(:user)
7
+ end
8
+ let(:sufia) { Sufia::Engine.routes.url_helpers }
9
+ let(:permission_template_access) { create(:permission_template_access) }
10
+ let(:admin_set_id) { permission_template_access.permission_template.admin_set_id }
11
+
12
+ context "without admin privleges" do
13
+ describe "destroy" do
14
+ before do
15
+ allow(controller.current_ability).to receive(:test_edit).with(admin_set_id).and_return(false)
16
+ end
17
+ it "is unauthorized" do
18
+ delete :destroy, params: { id: permission_template_access }
19
+ expect(response).to be_unauthorized
20
+ end
21
+ end
22
+ end
23
+
24
+ context "when signed in as an admin" do
25
+ describe "update" do
26
+ it "is successful" do
27
+ expect(controller).to receive(:authorize!).with(:destroy, permission_template_access)
28
+ expect do
29
+ delete :destroy, params: { id: permission_template_access }
30
+ end.to change { Sufia::PermissionTemplateAccess.count }.by(-1)
31
+ expect(response).to redirect_to(sufia.edit_admin_admin_set_path(admin_set_id, anchor: 'participants'))
32
+ expect(flash[:notice]).to eq 'Permissions updated'
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Sufia::Admin::PermissionTemplatesController do
4
+ routes { Sufia::Engine.routes }
5
+ before do
6
+ sign_in create(:user)
7
+ end
8
+ let(:sufia) { Sufia::Engine.routes.url_helpers }
9
+
10
+ context "without admin privleges" do
11
+ describe "update" do
12
+ let(:permission_template) { create(:permission_template) }
13
+
14
+ it "is unauthorized" do
15
+ put :update, params: { id: permission_template, admin_set_id: 999 }
16
+ expect(response).to be_unauthorized
17
+ end
18
+ end
19
+ end
20
+
21
+ let(:form) { instance_double(Sufia::Forms::PermissionTemplateForm) }
22
+ before do
23
+ allow(Sufia::Forms::PermissionTemplateForm).to receive(:new).with(permission_template).and_return(form)
24
+ end
25
+
26
+ context "when signed in as an admin" do
27
+ describe "update participants" do
28
+ let(:admin_set) { create(:admin_set) }
29
+ let!(:permission_template) { Sufia::PermissionTemplate.create!(admin_set_id: admin_set.id) }
30
+ let(:grant_attributes) { [{ "agent_type" => "user", "agent_id" => "bob", "access" => "view" }] }
31
+ let(:input_params) do
32
+ { admin_set_id: admin_set.id,
33
+ sufia_permission_template: form_attributes }
34
+ end
35
+ let(:form_attributes) { { visibility: 'open', access_grants_attributes: grant_attributes } }
36
+
37
+ it "is successful" do
38
+ expect(controller).to receive(:authorize!).with(:update, permission_template)
39
+ expect(form).to receive(:update).with(ActionController::Parameters.new(form_attributes).permit!)
40
+ put :update, params: input_params
41
+ expect(response).to redirect_to(sufia.edit_admin_admin_set_path(admin_set, anchor: 'participants'))
42
+ expect(flash[:notice]).to eq 'Permissions updated'
43
+ end
44
+ end
45
+ end
46
+ end
@@ -2,12 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe Sufia::AdminController do
4
4
  describe '#show' do
5
+ let(:service) { instance_double(Sufia::AdminSetService, search_results_with_work_count: results) }
6
+ let(:results) { instance_double(Array) }
7
+
5
8
  before do
6
9
  allow(controller).to receive(:authorize!).with(:read, :admin_dashboard).and_return(true)
10
+ allow(Sufia::AdminSetService).to receive(:new).and_return(service)
7
11
  end
12
+
8
13
  it "is successful" do
9
14
  get :show
10
15
  expect(response).to be_success
16
+ expect(assigns[:admin_set_rows]).to eq results
11
17
  end
12
18
  end
13
19
  end
@@ -1,6 +1,31 @@
1
1
  describe Sufia::BatchUploadsController do
2
2
  let(:user) { create(:user) }
3
+ let(:expected_types) do
4
+ { '1' => 'Article',
5
+ '2' => ['Article', 'Text'] }
6
+ end
7
+ let(:expected_individual_params) do
8
+ { '1' => 'foo',
9
+ '2' => 'bar' }
10
+ end
11
+ let(:expected_shared_params) do
12
+ { 'keyword' => [], 'visibility' => 'open', :model => 'GenericWork' }
13
+ end
14
+ let(:batch_upload_item) do
15
+ { keyword: [""], visibility: 'open', payload_concern: 'GenericWork' }
16
+ end
17
+ let(:post_params) do
18
+ {
19
+ title: expected_individual_params,
20
+ resource_type: expected_types,
21
+ uploaded_files: ['1', '2'],
22
+ batch_upload_item: batch_upload_item
23
+ }
24
+ end
25
+
3
26
  before do
27
+ # allow(user).to receive(:can?).with(:create, GenericWork).and_return(true)
28
+ # allow(user).to receive(:can?).with(:create, Atlas).and_return(true)
4
29
  sign_in user
5
30
  end
6
31
 
@@ -14,59 +39,33 @@ describe Sufia::BatchUploadsController do
14
39
 
15
40
  describe "#create" do
16
41
  context "enquing a update job" do
17
- let(:expected_types) do
18
- if Rails.version < '5.0.0'
19
- { '1' => 'Article' }
20
- else
21
- ActionController::Parameters.new('1' => 'Article')
22
- end
23
- end
24
- let(:expected_individual_params) do
25
- if Rails.version < '5.0.0'
26
- { '1' => 'foo' }
27
- else
28
- ActionController::Parameters.new('1' => 'foo')
29
- end
30
- end
31
- let(:expected_shared_params) do
32
- if Rails.version < '5.0.0'
33
- { keyword: [], visibility: 'open' }
34
- else
35
- ActionController::Parameters.new(keyword: [], visibility: 'open').permit!
36
- end
37
- end
38
-
39
42
  it "is successful" do
40
43
  expect(BatchCreateJob).to receive(:perform_later)
41
44
  .with(user,
42
45
  expected_individual_params,
43
46
  expected_types,
44
- ['1'],
47
+ ['1', '2'],
45
48
  expected_shared_params,
46
- CurationConcerns::Operation)
47
- post :create, params: {
48
- title: { '1' => 'foo' },
49
- resource_type: { '1' => 'Article' },
50
- uploaded_files: ['1'],
51
- batch_upload_item: { keyword: [""], visibility: 'open' }
52
- }
49
+ a_kind_of(Sufia::BatchCreateOperation))
50
+ post :create, params: post_params
53
51
  expect(response).to redirect_to Sufia::Engine.routes.url_helpers.dashboard_works_path
54
52
  expect(flash[:notice]).to include("Your files are being processed")
55
53
  end
56
54
  end
57
55
 
58
56
  describe "when submiting works on behalf of another user" do
57
+ let(:batch_upload_item) do
58
+ {
59
+ payload_concern: Atlas,
60
+ permissions_attributes: [
61
+ { type: "group", name: "public", access: "read" }
62
+ ],
63
+ on_behalf_of: 'elrayle'
64
+ }
65
+ end
59
66
  it "redirects to my shares page" do
60
67
  allow(BatchCreateJob).to receive(:perform_later)
61
- post :create, params: {
62
- batch_upload_item: {
63
- permissions_attributes: [
64
- { type: "group", name: "public", access: "read" }
65
- ],
66
- on_behalf_of: 'elrayle'
67
- },
68
- uploaded_files: ['1']
69
- }
68
+ post :create, params: post_params
70
69
  expect(response).to redirect_to Sufia::Engine.routes.url_helpers.dashboard_shares_path
71
70
  end
72
71
  end
@@ -75,9 +74,7 @@ describe Sufia::BatchUploadsController do
75
74
  describe "attributes_for_actor" do
76
75
  subject { controller.send(:attributes_for_actor) }
77
76
  before do
78
- controller.params = { title: { '1' => 'foo' },
79
- uploaded_files: ['1'],
80
- batch_upload_item: { keyword: [""], visibility: 'open' } }
77
+ controller.params = post_params
81
78
  end
82
79
  let(:expected_shared_params) do
83
80
  if Rails.version < '5.0.0'
@@ -87,6 +84,7 @@ describe Sufia::BatchUploadsController do
87
84
  end
88
85
  end
89
86
  it "excludes uploaded_files and title" do
87
+ expect(subject).not_to include('title', :title, 'uploaded_files', :uploaded_files)
90
88
  expect(subject).to eq expected_shared_params
91
89
  end
92
90
  end