sufia 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +146 -0
  3. data/.travis.yml +4 -7
  4. data/Gemfile +2 -0
  5. data/History.md +29 -1
  6. data/README.md +25 -9
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/stylesheets/sufia/_collections.scss +15 -0
  9. data/app/assets/stylesheets/sufia/_file-listing.scss +7 -0
  10. data/app/assets/stylesheets/sufia/_home-page.scss +10 -0
  11. data/app/builders/sufia/bootstrap_breadcrumbs_builder.rb +3 -5
  12. data/app/controllers/admin/stats_controller.rb +1 -76
  13. data/app/controllers/api/items_controller.rb +4 -6
  14. data/app/controllers/api/zotero_controller.rb +5 -5
  15. data/app/controllers/authorities_controller.rb +5 -1
  16. data/app/controllers/batch_edits_controller.rb +3 -3
  17. data/app/controllers/concerns/sufia/admin/depositor_stats.rb +41 -0
  18. data/app/controllers/concerns/sufia/admin/stats_behavior.rb +94 -0
  19. data/app/controllers/concerns/sufia/batch_controller_behavior.rb +16 -18
  20. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +54 -56
  21. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -6
  22. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +39 -39
  23. data/app/controllers/concerns/sufia/controller.rb +10 -10
  24. data/app/controllers/concerns/sufia/dashboard_controller_behavior.rb +17 -18
  25. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +9 -12
  26. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +6 -7
  27. data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +39 -40
  28. data/app/controllers/concerns/sufia/files_controller/upload_complete_behavior.rb +1 -1
  29. data/app/controllers/concerns/sufia/files_controller_behavior.rb +109 -110
  30. data/app/controllers/concerns/sufia/homepage_controller.rb +8 -8
  31. data/app/controllers/concerns/sufia/my_controller_behavior.rb +13 -10
  32. data/app/controllers/concerns/sufia/single_use_links_controller_behavior.rb +11 -14
  33. data/app/controllers/concerns/sufia/single_use_links_viewer_controller_behavior.rb +27 -21
  34. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +17 -17
  35. data/app/controllers/concerns/sufia/users_controller_behavior.rb +54 -54
  36. data/app/controllers/contact_form_controller.rb +1 -1
  37. data/app/controllers/content_blocks_controller.rb +11 -12
  38. data/app/controllers/directory_controller.rb +2 -3
  39. data/app/controllers/featured_work_lists_controller.rb +1 -1
  40. data/app/controllers/featured_works_controller.rb +2 -4
  41. data/app/controllers/homepage_controller.rb +1 -2
  42. data/app/controllers/mailbox_controller.rb +12 -32
  43. data/app/controllers/my/collections_controller.rb +3 -4
  44. data/app/controllers/my/files_controller.rb +4 -6
  45. data/app/controllers/my/highlights_controller.rb +4 -6
  46. data/app/controllers/my/shares_controller.rb +3 -5
  47. data/app/controllers/pages_controller.rb +1 -3
  48. data/app/controllers/single_use_links_controller.rb +0 -1
  49. data/app/controllers/single_use_links_viewer_controller.rb +0 -1
  50. data/app/controllers/static_controller.rb +1 -0
  51. data/app/forms/sufia/forms/collection_edit_form.rb +2 -2
  52. data/app/helpers/batch_edits_helper.rb +1 -3
  53. data/app/helpers/content_block_helper.rb +7 -8
  54. data/app/helpers/generic_file_helper.rb +23 -24
  55. data/app/helpers/sufia/blacklight_override.rb +6 -7
  56. data/app/helpers/sufia/dashboard_helper_behavior.rb +4 -7
  57. data/app/helpers/sufia/permissions_helper.rb +3 -4
  58. data/app/helpers/sufia/sufia_helper_behavior.rb +30 -29
  59. data/app/helpers/trophy_helper.rb +15 -15
  60. data/app/inputs/select_with_modal_help_input.rb +3 -3
  61. data/app/inputs/with_help_icon.rb +4 -4
  62. data/app/jobs/content_delete_event_job.rb +0 -1
  63. data/app/jobs/content_depositor_change_event_job.rb +1 -2
  64. data/app/jobs/event_job.rb +0 -1
  65. data/app/jobs/user_unfollow_event_job.rb +1 -0
  66. data/app/models/concerns/sufia/solr_document_behavior.rb +1 -2
  67. data/app/models/contact_form.rb +6 -6
  68. data/app/models/content_block.rb +1 -2
  69. data/app/models/featured_work_list.rb +3 -5
  70. data/app/models/user_mailbox.rb +44 -0
  71. data/app/presenters/sufia/collection_presenter.rb +6 -8
  72. data/app/presenters/sufia/generic_file_presenter.rb +2 -2
  73. data/app/presenters/sufia/presenter_renderer.rb +2 -2
  74. data/app/presenters/sufia/version_list_presenter.rb +1 -1
  75. data/app/presenters/sufia/version_presenter.rb +3 -6
  76. data/app/search_builders/deposit_search_builder.rb +19 -0
  77. data/app/search_builders/sufia/my_search_builder_behavior.rb +1 -2
  78. data/app/search_builders/sufia/search_builder.rb +1 -3
  79. data/app/uploaders/tinymce_asset_uploader.rb +0 -2
  80. data/app/views/_controls.html.erb +5 -5
  81. data/app/views/admin/stats/_deposits.html.erb +19 -0
  82. data/app/views/admin/stats/index.html.erb +2 -0
  83. data/app/views/batch_edits/edit.html.erb +2 -2
  84. data/app/views/collections/_edit_actions.html.erb +3 -3
  85. data/app/views/collections/_form_for_select_collection.html.erb +2 -2
  86. data/app/views/collections/_sort_and_per_page.html.erb +12 -9
  87. data/app/views/collections/_view_type_group.html.erb +1 -1
  88. data/app/views/collections/edit.html.erb +5 -5
  89. data/app/views/collections/show.html.erb +7 -6
  90. data/app/views/homepage/_announcement.html.erb +5 -0
  91. data/app/views/homepage/_home.html.erb +1 -0
  92. data/app/views/my/_sort_and_per_page.html.erb +14 -10
  93. data/app/views/my/index.html.erb +1 -1
  94. data/app/views/pages/show.html.erb +0 -2
  95. data/app/views/single_use_links/new_download.html.erb +1 -1
  96. data/app/views/single_use_links_viewer/show.html.erb +1 -1
  97. data/app/views/users/_notify_link.html.erb +1 -1
  98. data/app/views/users/_notify_number.html.erb +2 -2
  99. data/config/initializers/simple_form.rb +1 -1
  100. data/config/initializers/simple_form_bootstrap.rb +1 -1
  101. data/config/locales/sufia.en.yml +4 -0
  102. data/config/routes.rb +2 -3
  103. data/lib/generators/sufia/admin_stat_generator.rb +0 -3
  104. data/lib/generators/sufia/install_generator.rb +8 -9
  105. data/lib/generators/sufia/templates/catalog_controller.rb +2 -3
  106. data/lib/generators/sufia/templates/config/action_dispatch_http_upload_monkey_patch.rb +1 -0
  107. data/lib/generators/sufia/upgrade400_generator.rb +9 -9
  108. data/lib/generators/sufia/upgrade600_generator.rb +1 -4
  109. data/lib/sufia.rb +2 -2
  110. data/lib/sufia/arkivo/actor.rb +1 -1
  111. data/lib/sufia/arkivo/create_subscription_job.rb +30 -30
  112. data/lib/sufia/arkivo/metadata_munger.rb +7 -7
  113. data/lib/sufia/arkivo/schema_validator.rb +1 -1
  114. data/lib/sufia/single_use_error.rb +0 -1
  115. data/lib/sufia/version.rb +1 -1
  116. data/lib/sufia/zotero/config.rb +13 -13
  117. data/spec/actors/generic_file/actor_spec.rb +17 -18
  118. data/spec/controllers/admin_stats_controller_spec.rb +56 -5
  119. data/spec/controllers/api/zotero_controller_spec.rb +10 -9
  120. data/spec/controllers/authorities_controller_spec.rb +8 -8
  121. data/spec/controllers/batch_controller_spec.rb +19 -20
  122. data/spec/controllers/batch_edits_controller_spec.rb +8 -9
  123. data/spec/controllers/catalog_controller_spec.rb +7 -9
  124. data/spec/controllers/collections_controller_spec.rb +30 -32
  125. data/spec/controllers/content_blocks_controller_spec.rb +4 -4
  126. data/spec/controllers/dashboard_controller_spec.rb +12 -12
  127. data/spec/controllers/depositors_controller_spec.rb +8 -8
  128. data/spec/controllers/downloads_controller_spec.rb +10 -11
  129. data/spec/controllers/featured_work_lists_controller_spec.rb +4 -4
  130. data/spec/controllers/featured_works_controller_spec.rb +11 -12
  131. data/spec/controllers/generic_files_controller_spec.rb +154 -125
  132. data/spec/controllers/homepage_controller_spec.rb +22 -15
  133. data/spec/controllers/mailbox_controller_spec.rb +20 -36
  134. data/spec/controllers/my/collections_controller_spec.rb +4 -5
  135. data/spec/controllers/my/files_controller_spec.rb +10 -11
  136. data/spec/controllers/my/highlights_controller_spec.rb +4 -5
  137. data/spec/controllers/my/shares_controller_spec.rb +12 -14
  138. data/spec/controllers/my_controller_spec.rb +1 -3
  139. data/spec/controllers/pages_controller_spec.rb +4 -4
  140. data/spec/controllers/single_use_links_controller_spec.rb +1 -3
  141. data/spec/controllers/single_use_links_viewer_controller_spec.rb +1 -2
  142. data/spec/controllers/static_controller_spec.rb +1 -1
  143. data/spec/controllers/tinymce_assets_controller_spec.rb +8 -9
  144. data/spec/controllers/transfers_controller_spec.rb +19 -19
  145. data/spec/controllers/users_controller_spec.rb +33 -35
  146. data/spec/factories/api_items.rb +2 -2
  147. data/spec/factories/content_blocks.rb +1 -1
  148. data/spec/factories/featured_works.rb +1 -1
  149. data/spec/factories/generic_files.rb +3 -3
  150. data/spec/factories/users.rb +7 -8
  151. data/spec/features/browse_dashboard_files_spec.rb +14 -18
  152. data/spec/features/browse_files_spec.rb +3 -4
  153. data/spec/features/catalog_search_spec.rb +3 -5
  154. data/spec/features/cloud_upload_spec.rb +2 -2
  155. data/spec/features/collection_spec.rb +21 -21
  156. data/spec/features/contact_form_spec.rb +10 -11
  157. data/spec/features/display_dashboard_spec.rb +5 -9
  158. data/spec/features/edit_file_spec.rb +8 -9
  159. data/spec/features/featured_item_spec.rb +1 -1
  160. data/spec/features/ingest_upload_files_spec.rb +5 -5
  161. data/spec/features/notifications_spec.rb +2 -6
  162. data/spec/features/ownership_transfer_spec.rb +2 -2
  163. data/spec/features/proxy_spec.rb +2 -2
  164. data/spec/features/search_spec.rb +3 -4
  165. data/spec/features/single_use_links_spec.rb +1 -1
  166. data/spec/features/users_spec.rb +4 -5
  167. data/spec/forms/collection_edit_form_spec.rb +2 -2
  168. data/spec/forms/generic_file_edit_form_spec.rb +6 -7
  169. data/spec/helpers/batch_edits_helper_spec.rb +9 -13
  170. data/spec/helpers/content_block_helper_spec.rb +3 -3
  171. data/spec/helpers/dashboard_helper_spec.rb +19 -24
  172. data/spec/helpers/generic_file_helper_spec.rb +5 -7
  173. data/spec/helpers/sufia_helper_spec.rb +43 -54
  174. data/spec/helpers/trophy_helper_spec.rb +5 -5
  175. data/spec/inputs/multi_value_with_help_input_spec.rb +1 -2
  176. data/spec/inputs/select_with_help_input_spec.rb +19 -15
  177. data/spec/javascripts/jasmine_spec.rb +4 -5
  178. data/spec/javascripts/support/jasmine_helper.rb +9 -9
  179. data/spec/jobs/active_fedora_id_based_job_spec.rb +7 -5
  180. data/spec/jobs/audit_job_spec.rb +7 -7
  181. data/spec/jobs/batch_update_job_spec.rb +5 -6
  182. data/spec/jobs/characterize_job_spec.rb +1 -1
  183. data/spec/jobs/content_depositor_change_event_job_spec.rb +1 -1
  184. data/spec/jobs/create_derivatives_job_spec.rb +5 -5
  185. data/spec/jobs/event_jobs_spec.rb +16 -16
  186. data/spec/jobs/import_url_job_spec.rb +36 -5
  187. data/spec/jobs/ingest_local_file_job_spec.rb +31 -20
  188. data/spec/jobs/sufia_resque_queue_spec.rb +1 -1
  189. data/spec/lib/sufia/analytics_spec.rb +0 -1
  190. data/spec/lib/sufia/arkivo/actor_spec.rb +6 -6
  191. data/spec/lib/sufia/arkivo/schema_validator_spec.rb +18 -18
  192. data/spec/lib/sufia/breadcrumbs_spec.rb +5 -6
  193. data/spec/lib/sufia/messages_spec.rb +11 -12
  194. data/spec/lib/sufia/readable_permissions_spec.rb +8 -10
  195. data/spec/lib/sufia/upload_complete_behavior_spec.rb +6 -7
  196. data/spec/lib/sufia/user_stat_importer_spec.rb +30 -33
  197. data/spec/lib/sufia/writable_permissions_spec.rb +1 -3
  198. data/spec/lib/sufia/zotero/config_spec.rb +4 -6
  199. data/spec/models/ability_spec.rb +11 -9
  200. data/spec/models/batch_spec.rb +13 -13
  201. data/spec/models/characterization_spec.rb +2 -3
  202. data/spec/models/checksum_audit_log_spec.rb +18 -19
  203. data/spec/models/collection_spec.rb +11 -12
  204. data/spec/models/content_block_spec.rb +33 -22
  205. data/spec/models/download_spec.rb +3 -5
  206. data/spec/models/featured_work_list_spec.rb +3 -3
  207. data/spec/models/featured_work_spec.rb +12 -14
  208. data/spec/models/file_content_datastream_spec.rb +9 -7
  209. data/spec/models/file_download_stat_spec.rb +34 -40
  210. data/spec/models/file_usage_spec.rb +46 -52
  211. data/spec/models/file_view_stat_spec.rb +35 -41
  212. data/spec/models/fits_datastream_spec.rb +23 -25
  213. data/spec/models/generic_file/visibility_spec.rb +10 -5
  214. data/spec/models/generic_file_spec.rb +86 -88
  215. data/spec/models/geo_names_resource_spec.rb +3 -5
  216. data/spec/models/local_authority_spec.rb +30 -33
  217. data/spec/models/pageview_spec.rb +3 -3
  218. data/spec/models/proxy_deposit_request_spec.rb +3 -3
  219. data/spec/models/single_use_link_spec.rb +36 -36
  220. data/spec/models/solr_document_spec.rb +3 -6
  221. data/spec/models/trophy_spec.rb +8 -9
  222. data/spec/models/user_mailbox_spec.rb +62 -0
  223. data/spec/models/user_spec.rb +28 -29
  224. data/spec/presenters/presenter_renderer_spec.rb +1 -1
  225. data/spec/presenters/sufia/generic_file_presenter_spec.rb +5 -5
  226. data/spec/presenters/sufia/version_list_presenter_spec.rb +2 -2
  227. data/spec/presenters/sufia/version_presenter_spec.rb +1 -1
  228. data/spec/routing/featured_works_route_spec.rb +4 -4
  229. data/spec/routing/ownership_transfers_route_spec.rb +1 -1
  230. data/spec/routing/route_spec.rb +89 -89
  231. data/spec/services/generic_file_audit_service_spec.rb +8 -8
  232. data/spec/services/repository_audit_service_spec.rb +7 -3
  233. data/spec/spec_helper.rb +5 -4
  234. data/spec/support/features/session_helpers.rb +1 -1
  235. data/spec/support/input_support.rb +1 -2
  236. data/spec/support/rake.rb +1 -1
  237. data/spec/support/selectors.rb +1 -6
  238. data/spec/support/statistic_helper.rb +1 -1
  239. data/spec/support/uploaded_file_monkeypatch.rb +1 -1
  240. data/spec/tasks/rake_spec.rb +3 -5
  241. data/spec/views/admin/stats/index.html.erb_spec.rb +16 -16
  242. data/spec/views/batch/edit.html.erb_spec.rb +1 -3
  243. data/spec/views/batch_edits/check_all_spec.rb +5 -5
  244. data/spec/views/batch_edits/edit.html.erb_spec.rb +1 -3
  245. data/spec/views/catalog/index.html.erb_spec.rb +1 -3
  246. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +4 -5
  247. data/spec/views/collections/_form.html.erb_spec.rb +5 -3
  248. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +7 -8
  249. data/spec/views/collections/_show_document_list.erb_spec.rb +4 -6
  250. data/spec/views/dashboard/index_spec.rb +14 -21
  251. data/spec/views/generic_file/_browse_everything.html.erb_spec.rb +2 -2
  252. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +8 -9
  253. data/spec/views/generic_file/edit.html.erb_spec.rb +7 -7
  254. data/spec/views/generic_file/show.html.erb_spec.rb +24 -25
  255. data/spec/views/generic_file/stats.html.erb_spec.rb +19 -19
  256. data/spec/views/homepage/_announcement.html.erb_spec.rb +51 -0
  257. data/spec/views/homepage/_featured_works.html.erb_spec.rb +5 -9
  258. data/spec/views/homepage/_home_header.html.erb_spec.rb +2 -2
  259. data/spec/views/my/facet.html.erb_spec.rb +4 -4
  260. data/spec/views/single_use_links/new_download.html.erb_spec.rb +28 -0
  261. data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +29 -0
  262. data/spec/views/users/_follower_modal.html.erb_spec.rb +7 -8
  263. data/spec/views/users/_following_modal.html.erb_spec.rb +4 -5
  264. data/spec/views/users/_notify_number.html.erb_spec.rb +2 -5
  265. data/spec/views/users/_user_util_links.html.erb_spec.rb +5 -8
  266. data/spec/views/users/index.html.erb_spec.rb +4 -6
  267. data/spec/views/users/show.html.erb_spec.rb +4 -7
  268. data/tasks/sufia-dev.rake +19 -3
  269. metadata +20 -5
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe TransfersController, :type => :controller do
3
+ describe TransfersController, type: :controller do
4
4
  describe "with a signed in user" do
5
5
  let(:another_user) { FactoryGirl.find_or_create(:jill) }
6
6
  let(:user) { FactoryGirl.find_or_create(:archivist) }
@@ -38,7 +38,7 @@ describe TransfersController, :type => :controller do
38
38
  before do
39
39
  incoming_file.destroy
40
40
  end
41
- it "should not show that file" do
41
+ it "does not show that file" do
42
42
  get :index
43
43
  expect(response).to be_success
44
44
  expect(assigns[:incoming]).to be_empty
@@ -54,7 +54,7 @@ describe TransfersController, :type => :controller do
54
54
  end
55
55
  end
56
56
  context 'when user is the depositor' do
57
- it "should be successful" do
57
+ it "is successful" do
58
58
  sign_in user
59
59
  get :new, id: file
60
60
  expect(response).to be_success
@@ -72,11 +72,11 @@ describe TransfersController, :type => :controller do
72
72
  f.save!
73
73
  end
74
74
  end
75
- it "should be successful" do
75
+ it "is successful" do
76
76
  allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
77
- expect {
78
- post :create, id: file, proxy_deposit_request: {transfer_to: another_user.user_key}
79
- }.to change(ProxyDepositRequest, :count).by(1)
77
+ expect do
78
+ post :create, id: file, proxy_deposit_request: { transfer_to: another_user.user_key }
79
+ end.to change(ProxyDepositRequest, :count).by(1)
80
80
  expect(response).to redirect_to @routes.url_helpers.transfers_path
81
81
  expect(flash[:notice]).to eq('Transfer request created')
82
82
  proxy_request = another_user.proxy_deposit_requests.first
@@ -87,10 +87,10 @@ describe TransfersController, :type => :controller do
87
87
  expect(notification.subject).to eq("Ownership Change Request")
88
88
  expect(notification.body).to eq("<a href=\"/users/#{user.user_key}\">#{user.name}</a> wants to transfer a file to you. Review all <a href=\"#{@routes.url_helpers.transfers_path}\">transfer requests</a>")
89
89
  end
90
- it "should give an error if the user is not found" do
91
- expect {
92
- post :create, id: file, proxy_deposit_request: {transfer_to: 'foo' }
93
- }.not_to change(ProxyDepositRequest, :count)
90
+ it "gives an error if the user is not found" do
91
+ expect do
92
+ post :create, id: file, proxy_deposit_request: { transfer_to: 'foo' }
93
+ end.not_to change(ProxyDepositRequest, :count)
94
94
  expect(assigns[:proxy_deposit_request].errors[:transfer_to]).to eq(['must be an existing user'])
95
95
  expect(response).to redirect_to(root_path)
96
96
  end
@@ -105,21 +105,21 @@ describe TransfersController, :type => :controller do
105
105
  f.request_transfer_to(user)
106
106
  end
107
107
  end
108
- it "should be successful when retaining access rights" do
108
+ it "is successful when retaining access rights" do
109
109
  put :accept, id: user.proxy_deposit_requests.first
110
110
  expect(response).to redirect_to @routes.url_helpers.transfers_path
111
111
  expect(flash[:notice]).to eq("Transfer complete")
112
112
  expect(assigns[:proxy_deposit_request].status).to eq('accepted')
113
113
  expect(incoming_file.reload.edit_users).to eq([another_user.user_key, user.user_key])
114
114
  end
115
- it "should be successful when resetting access rights" do
115
+ it "is successful when resetting access rights" do
116
116
  put :accept, id: user.proxy_deposit_requests.first, reset: true
117
117
  expect(response).to redirect_to @routes.url_helpers.transfers_path
118
118
  expect(flash[:notice]).to eq("Transfer complete")
119
119
  expect(assigns[:proxy_deposit_request].status).to eq('accepted')
120
120
  expect(incoming_file.reload.edit_users).to eq([user.user_key])
121
121
  end
122
- it "should handle sticky requests " do
122
+ it "handles sticky requests" do
123
123
  put :accept, id: user.proxy_deposit_requests.first, sticky: true
124
124
  expect(response).to redirect_to @routes.url_helpers.transfers_path
125
125
  expect(flash[:notice]).to eq("Transfer complete")
@@ -136,7 +136,7 @@ describe TransfersController, :type => :controller do
136
136
  f.request_transfer_to(another_user)
137
137
  end
138
138
  end
139
- it "should not allow me" do
139
+ it "does not allow me" do
140
140
  put :accept, id: another_user.proxy_deposit_requests.first
141
141
  expect(response).to redirect_to root_path
142
142
  expect(flash[:alert]).to eq("You are not authorized to access this page.")
@@ -153,7 +153,7 @@ describe TransfersController, :type => :controller do
153
153
  f.request_transfer_to(user)
154
154
  end
155
155
  end
156
- it "should be successful" do
156
+ it "is successful" do
157
157
  put :reject, id: user.proxy_deposit_requests.first
158
158
  expect(response).to redirect_to @routes.url_helpers.transfers_path
159
159
  expect(flash[:notice]).to eq("Transfer rejected")
@@ -169,7 +169,7 @@ describe TransfersController, :type => :controller do
169
169
  f.request_transfer_to(another_user)
170
170
  end
171
171
  end
172
- it "should not allow me" do
172
+ it "does not allow me" do
173
173
  put :reject, id: another_user.proxy_deposit_requests.first
174
174
  expect(response).to redirect_to root_path
175
175
  expect(flash[:alert]).to eq("You are not authorized to access this page.")
@@ -186,7 +186,7 @@ describe TransfersController, :type => :controller do
186
186
  f.request_transfer_to(another_user)
187
187
  end
188
188
  end
189
- it "should be successful" do
189
+ it "is successful" do
190
190
  delete :destroy, id: another_user.proxy_deposit_requests.first
191
191
  expect(response).to redirect_to @routes.url_helpers.transfers_path
192
192
  expect(flash[:notice]).to eq("Transfer canceled")
@@ -201,7 +201,7 @@ describe TransfersController, :type => :controller do
201
201
  f.request_transfer_to(user)
202
202
  end
203
203
  end
204
- it "should not allow me" do
204
+ it "does not allow me" do
205
205
  delete :destroy, id: user.proxy_deposit_requests.first
206
206
  expect(response).to redirect_to root_path
207
207
  expect(flash[:alert]).to eq("You are not authorized to access this page.")
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe UsersController, :type => :controller do
3
+ describe UsersController, type: :controller do
4
4
  let(:user) { FactoryGirl.create(:user) }
5
5
  before(:each) do
6
6
  sign_in user
@@ -18,7 +18,7 @@ describe UsersController, :type => :controller do
18
18
  it "redirects to root if user does not exist" do
19
19
  get :show, id: 'johndoe666'
20
20
  expect(response).to redirect_to(root_path)
21
- expect(flash[:alert]).to include ("User 'johndoe666' does not exist")
21
+ expect(flash[:alert]).to include("User 'johndoe666' does not exist")
22
22
  end
23
23
 
24
24
  describe "when the user has trophies" do
@@ -35,7 +35,6 @@ describe UsersController, :type => :controller do
35
35
  expect(response).to be_success
36
36
  expect(assigns[:trophies]).to match_array([file1, file2, file3])
37
37
  end
38
-
39
38
  end
40
39
  end
41
40
  describe "#index" do
@@ -43,25 +42,25 @@ describe UsersController, :type => :controller do
43
42
  let!(:u2) { FactoryGirl.create(:user) }
44
43
 
45
44
  describe "requesting html" do
46
- it "should test users" do
45
+ it "tests users" do
47
46
  get :index
48
47
  expect(assigns[:users]).to include(u1, u2)
49
48
  expect(response).to be_successful
50
49
  end
51
50
  end
52
51
  describe "requesting json" do
53
- it "should display users" do
52
+ it "displays users" do
54
53
  get :index, format: :json
55
54
  expect(response).to be_successful
56
55
  json = JSON.parse(response.body)
57
- expect(json.map{|u| u['id']}).to include(u1.email, u2.email)
58
- expect(json.map{|u| u['text']}).to include(u1.email, u2.email)
56
+ expect(json.map { |u| u['id'] }).to include(u1.email, u2.email)
57
+ expect(json.map { |u| u['text'] }).to include(u1.email, u2.email)
59
58
  end
60
59
  end
61
60
 
62
- describe "query users" do
61
+ describe "query users" do
63
62
  it "finds the expected user via email" do
64
- get :index, uq: u1.email
63
+ get :index, uq: u1.email
65
64
  expect(assigns[:users]).to include(u1)
66
65
  expect(assigns[:users]).to_not include(u2)
67
66
  expect(response).to be_successful
@@ -73,7 +72,7 @@ describe UsersController, :type => :controller do
73
72
  u2.display_name = "Jr. Architect"
74
73
  u2.save
75
74
  allow_any_instance_of(User).to receive(:display_name).and_return("Dr. Curator", "Jr.Archivist")
76
- get :index, uq: u1.display_name
75
+ get :index, uq: u1.display_name
77
76
  expect(assigns[:users]).to include(u1)
78
77
  expect(assigns[:users]).to_not include(u2)
79
78
  expect(response).to be_successful
@@ -138,21 +137,20 @@ describe UsersController, :type => :controller do
138
137
  expect(response).to be_success
139
138
  expect(assigns[:trophies]).to match_array([file1, file2, file3])
140
139
  end
141
-
142
140
  end
143
141
  end
144
142
 
145
143
  describe "#update" do
146
144
  context "the profile of another user" do
147
145
  let(:another_user) { FactoryGirl.create(:user) }
148
- it "should not allow other users to update" do
146
+ it "does not allow other users to update" do
149
147
  post :update, id: another_user.user_key, user: { avatar: nil }
150
148
  expect(response).to redirect_to(@routes.url_helpers.profile_path(another_user.to_param))
151
149
  expect(flash[:alert]).to include("Permission denied: cannot access this page.")
152
150
  end
153
151
  end
154
152
 
155
- it "should set an avatar and redirect to profile" do
153
+ it "sets an avatar and redirect to profile" do
156
154
  expect(user.avatar?).to be false
157
155
  s1 = double('one')
158
156
  expect(UserEditProfileEventJob).to receive(:new).with(user.user_key).and_return(s1)
@@ -163,14 +161,14 @@ describe UsersController, :type => :controller do
163
161
  expect(flash[:notice]).to include("Your profile has been updated")
164
162
  expect(User.find_by_user_key(user.user_key).avatar?).to be true
165
163
  end
166
- it "should validate the content type of an avatar" do
164
+ it "validates the content type of an avatar" do
167
165
  expect(Sufia.queue).to receive(:push).never
168
166
  f = fixture_file_upload('/image.jp2', 'image/jp2')
169
167
  post :update, id: user.user_key, user: { avatar: f }
170
168
  expect(response).to redirect_to(@routes.url_helpers.edit_profile_path(user.to_param))
171
169
  expect(flash[:alert]).to include("Avatar You are not allowed to upload \"jp2\" files, allowed types: jpg, jpeg, png, gif, bmp, tif, tiff")
172
170
  end
173
- it "should validate the size of an avatar" do
171
+ it "validates the size of an avatar" do
174
172
  f = fixture_file_upload('/4-20.png', 'image/png')
175
173
  expect(Sufia.queue).to receive(:push).never
176
174
  post :update, id: user.user_key, user: { avatar: f }
@@ -184,7 +182,7 @@ describe UsersController, :type => :controller do
184
182
  user.update(avatar: f)
185
183
  end
186
184
 
187
- it "should delete an avatar" do
185
+ it "deletes an avatar" do
188
186
  s1 = double('one')
189
187
  expect(UserEditProfileEventJob).to receive(:new).with(user.user_key).and_return(s1)
190
188
  expect(Sufia.queue).to receive(:push).with(s1).once
@@ -195,7 +193,7 @@ describe UsersController, :type => :controller do
195
193
  end
196
194
  end
197
195
 
198
- it "should refresh directory attributes" do
196
+ it "refreshes directory attributes" do
199
197
  s1 = double('one')
200
198
  expect(UserEditProfileEventJob).to receive(:new).with(user.user_key).and_return(s1)
201
199
  expect(Sufia.queue).to receive(:push).with(s1).once
@@ -205,13 +203,13 @@ describe UsersController, :type => :controller do
205
203
  expect(flash[:notice]).to include("Your profile has been updated")
206
204
  end
207
205
 
208
- it "should set an social handles" do
206
+ it "sets an social handles" do
209
207
  expect(user.twitter_handle).to be_blank
210
208
  expect(user.facebook_handle).to be_blank
211
209
  expect(user.googleplus_handle).to be_blank
212
210
  expect(user.linkedin_handle).to be_blank
213
211
  expect(user.orcid).to be_blank
214
- post :update, id: user.user_key, user: { twitter_handle: 'twit', facebook_handle: 'face', googleplus_handle: 'goo', linkedin_handle:"link", orcid: '0000-0000-1111-2222' }
212
+ post :update, id: user.user_key, user: { twitter_handle: 'twit', facebook_handle: 'face', googleplus_handle: 'goo', linkedin_handle: "link", orcid: '0000-0000-1111-2222' }
215
213
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
216
214
  expect(flash[:notice]).to include("Your profile has been updated")
217
215
  u = User.find_by_user_key(user.user_key)
@@ -234,10 +232,10 @@ describe UsersController, :type => :controller do
234
232
  before do
235
233
  user.trophies.create!(generic_file_id: file.id)
236
234
  end
237
- it "should remove a trophy" do
238
- expect {
239
- post :update, id: user.user_key, 'remove_trophy_'+file.id => 'yes'
240
- }.to change { user.trophies.count }.by(-1)
235
+ it "removes a trophy" do
236
+ expect do
237
+ post :update, id: user.user_key, 'remove_trophy_' + file.id => 'yes'
238
+ end.to change { user.trophies.count }.by(-1)
241
239
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
242
240
  expect(flash[:notice]).to include("Your profile has been updated")
243
241
  end
@@ -246,7 +244,7 @@ describe UsersController, :type => :controller do
246
244
 
247
245
  describe "#follow" do
248
246
  let(:another_user) { FactoryGirl.create(:user) }
249
- it "should follow another user if not already following, and log an event" do
247
+ it "follows another user if not already following, and log an event" do
250
248
  expect(user.following?(another_user)).to be false
251
249
  s1 = double('one')
252
250
  expect(UserFollowEventJob).to receive(:new).with(user.user_key, another_user.user_key).and_return(s1)
@@ -255,14 +253,14 @@ describe UsersController, :type => :controller do
255
253
  expect(response).to redirect_to(@routes.url_helpers.profile_path(another_user.to_param))
256
254
  expect(flash[:notice]).to include("You are following #{another_user.user_key}")
257
255
  end
258
- it "should redirect to profile if already following and not log an event" do
256
+ it "redirects to profile if already following and not log an event" do
259
257
  allow_any_instance_of(User).to receive(:following?).with(another_user).and_return(true)
260
258
  expect(Sufia.queue).to receive(:push).never
261
259
  post :follow, id: another_user.user_key
262
260
  expect(response).to redirect_to(@routes.url_helpers.profile_path(another_user.to_param))
263
261
  expect(flash[:notice]).to include("You are following #{another_user.user_key}")
264
262
  end
265
- it "should redirect to profile if user attempts to self-follow and not log an event" do
263
+ it "redirects to profile if user attempts to self-follow and not log an event" do
266
264
  expect(Sufia.queue).to receive(:push).never
267
265
  post :follow, id: user.user_key
268
266
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
@@ -272,7 +270,7 @@ describe UsersController, :type => :controller do
272
270
 
273
271
  describe "#unfollow" do
274
272
  let(:another_user) { FactoryGirl.create(:user) }
275
- it "should unfollow another user if already following, and log an event" do
273
+ it "unfollows another user if already following, and log an event" do
276
274
  allow_any_instance_of(User).to receive(:following?).with(another_user).and_return(true)
277
275
  s1 = double('one')
278
276
  expect(UserUnfollowEventJob).to receive(:new).with(user.user_key, another_user.user_key).and_return(s1)
@@ -281,14 +279,14 @@ describe UsersController, :type => :controller do
281
279
  expect(response).to redirect_to(@routes.url_helpers.profile_path(another_user.to_param))
282
280
  expect(flash[:notice]).to include("You are no longer following #{another_user.user_key}")
283
281
  end
284
- it "should redirect to profile if not following and not log an event" do
282
+ it "redirects to profile if not following and not log an event" do
285
283
  allow(user).to receive(:following?).with(another_user).and_return(false)
286
284
  expect(Sufia.queue).to receive(:push).never
287
285
  post :unfollow, id: another_user.user_key
288
286
  expect(response).to redirect_to(@routes.url_helpers.profile_path(another_user.to_param))
289
287
  expect(flash[:notice]).to include("You are no longer following #{another_user.user_key}")
290
288
  end
291
- it "should redirect to profile if user attempts to self-follow and not log an event" do
289
+ it "redirects to profile if user attempts to self-follow and not log an event" do
292
290
  expect(Sufia.queue).to receive(:push).never
293
291
  post :unfollow, id: user.user_key
294
292
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
@@ -301,19 +299,19 @@ describe UsersController, :type => :controller do
301
299
  let(:file_id) { file.id }
302
300
  let(:another_user) { FactoryGirl.create(:user) }
303
301
 
304
- it "should trophy a file" do
305
- post :toggle_trophy, {id: user.user_key, file_id: file_id}
302
+ it "trophies a file" do
303
+ post :toggle_trophy, id: user.user_key, file_id: file_id
306
304
  json = JSON.parse(response.body)
307
305
  expect(json['user_id']).to eq user.id
308
306
  expect(json['generic_file_id']).to eq file_id
309
307
  end
310
- it "should not trophy a file for a different user" do
311
- post :toggle_trophy, {id: another_user.user_key, file_id: file_id}
308
+ it "does not trophy a file for a different user" do
309
+ post :toggle_trophy, id: another_user.user_key, file_id: file_id
312
310
  expect(response).to_not be_success
313
311
  end
314
- it "should not trophy a file with no edit privs" do
312
+ it "does not trophy a file with no edit privs" do
315
313
  sign_in another_user
316
- post :toggle_trophy, {id: another_user.user_key, file_id: file_id}
314
+ post :toggle_trophy, id: another_user.user_key, file_id: file_id
317
315
  expect(response).to_not be_success
318
316
  end
319
317
  end
@@ -26,7 +26,7 @@ FactoryGirl.define do
26
26
  {
27
27
  creatorType: 'contributor',
28
28
  name: 'Jane Doeski'
29
- },
29
+ }
30
30
  ],
31
31
  description: 'This was funded by the NSF in 2013',
32
32
  publisher: 'National Science Foundation',
@@ -70,7 +70,7 @@ FactoryGirl.define do
70
70
  {
71
71
  creatorType: 'inventor',
72
72
  name: 'Babs McGee'
73
- },
73
+ }
74
74
  ],
75
75
  rights: 'http://creativecommons.org/licenses/by-sa/3.0/us/',
76
76
  tags: [
@@ -1,4 +1,4 @@
1
1
  FactoryGirl.define do
2
- factory :content_block do |cb|
2
+ factory :content_block do |_cb|
3
3
  end
4
4
  end
@@ -1,4 +1,4 @@
1
1
  FactoryGirl.define do
2
- factory :featured_work do |u|
2
+ factory :featured_work do |_u|
3
3
  end
4
4
  end
@@ -23,7 +23,7 @@ FactoryGirl.define do
23
23
  initialize_with { new(id: id) }
24
24
  read_groups ["public"]
25
25
  resource_type ["Dissertation"]
26
- subject %w"lorem ipsum dolor sit amet"
26
+ subject %w(lorem ipsum dolor sit amet)
27
27
  title ["fake_document.pdf"]
28
28
  before(:create) do |gf|
29
29
  gf.title = ["Fake PDF Title"]
@@ -34,7 +34,7 @@ FactoryGirl.define do
34
34
  id "fixturemp3"
35
35
  end
36
36
  initialize_with { new(id: id) }
37
- subject %w"consectetur adipisicing elit"
37
+ subject %w(consectetur adipisicing elit)
38
38
  title ["Test Document MP3.mp3"]
39
39
  read_groups ["public"]
40
40
  end
@@ -46,7 +46,7 @@ FactoryGirl.define do
46
46
  resource_type ["Audio", "Dataset"]
47
47
  read_groups ["public"]
48
48
  title ["Fake Wav File.wav"]
49
- subject %w"sed do eiusmod tempor incididunt ut labore"
49
+ subject %w(sed do eiusmod tempor incididunt ut labore)
50
50
  end
51
51
  end
52
52
  end
@@ -19,31 +19,30 @@ FactoryGirl.define do
19
19
 
20
20
  # Create examples of single file successes and failures
21
21
  (1..10).each do |number|
22
- file = MockFile.new(number.to_s, "Single File #{number.to_s}")
23
- User.batchuser().send_message(user, message.single_success("single-batch-success", file), message.success_subject, false)
24
- User.batchuser().send_message(user, message.single_failure("single-batch-failure", file), message.failure_subject, false)
22
+ file = MockFile.new(number.to_s, "Single File #{number}")
23
+ User.batchuser.send_message(user, message.single_success("single-batch-success", file), message.success_subject, false)
24
+ User.batchuser.send_message(user, message.single_failure("single-batch-failure", file), message.failure_subject, false)
25
25
  end
26
26
 
27
27
  # Create examples of mulitple file successes and failures
28
28
  files = []
29
29
  (1..50).each do |number|
30
- files << MockFile.new(number.to_s, "File #{number.to_s}")
30
+ files << MockFile.new(number.to_s, "File #{number}")
31
31
  end
32
- User.batchuser().send_message(user, message.multiple_success("multiple-batch-success", files), message.success_subject, false)
33
- User.batchuser().send_message(user, message.multiple_failure("multiple-batch-failure", files), message.failure_subject, false)
32
+ User.batchuser.send_message(user, message.multiple_success("multiple-batch-success", files), message.success_subject, false)
33
+ User.batchuser.send_message(user, message.multiple_failure("multiple-batch-failure", files), message.failure_subject, false)
34
34
  end
35
35
  end
36
36
 
37
37
  factory :curator do
38
38
  email 'curator1@example.com'
39
39
  end
40
-
41
40
  end
42
41
  end
43
42
 
44
43
  class MockFile
45
44
  attr_accessor :to_s, :id
46
- def initialize id, string
45
+ def initialize(id, string)
47
46
  self.id = id
48
47
  self.to_s = string
49
48
  end
@@ -11,7 +11,7 @@ describe "Browse Dashboard", type: :feature do
11
11
  context "within dashboard" do
12
12
  let(:handles) { [:public_pdf] }
13
13
 
14
- it "should search your files by default" do
14
+ it "searches your files by default" do
15
15
  visit "/dashboard"
16
16
  fill_in "q", with: "PDF"
17
17
  click_button "search-submit-header"
@@ -20,16 +20,15 @@ describe "Browse Dashboard", type: :feature do
20
20
  end
21
21
 
22
22
  context "within my files page" do
23
-
24
23
  before do
25
24
  visit "/dashboard/files"
26
25
  end
27
26
 
28
27
  context "no files" do
29
- let(:handles) { [ ] }
28
+ let(:handles) { [] }
30
29
 
31
- it "should link to my other tabs" do
32
- # TODO this would make a good view test.
30
+ it "links to my other tabs" do
31
+ # TODO: this would make a good view test.
33
32
  ["My Collections", "My Highlights", "Files Shared with Me"].each do |tab|
34
33
  within("#my_nav") do
35
34
  click_link(tab)
@@ -40,10 +39,10 @@ describe "Browse Dashboard", type: :feature do
40
39
  end
41
40
 
42
41
  context "with one file" do
43
- let(:handles) { [ :public_pdf ] }
42
+ let(:handles) { [:public_pdf] }
44
43
 
45
- it "should display all the necessary information" do
46
- # TODO this would make a good view test.
44
+ it "displays all the necessary information" do
45
+ # TODO: this would make a good view test.
47
46
  within("#document_#{fixtures.first.id}") do
48
47
  click_button("Select an action")
49
48
  end
@@ -62,9 +61,8 @@ describe "Browse Dashboard", type: :feature do
62
61
  let(:handles) { [:public_pdf, :public_mp3, :public_wav] }
63
62
 
64
63
  it "allows you to interact your own files" do
65
-
66
- #refreshes the page of files
67
- # TODO this would make a good view test.
64
+ # refreshes the page of files
65
+ # TODO: this would make a good view test.
68
66
  click_button "Refresh"
69
67
  within("#document_#{fixtures.first.id}") do
70
68
  click_button("Select an action")
@@ -72,7 +70,7 @@ describe "Browse Dashboard", type: :feature do
72
70
  expect(page).to have_content("Download File")
73
71
  end
74
72
 
75
- # allows you to search your own files and remove constraints
73
+ # allows you to search your own files and remove constraints
76
74
  fill_in "q", with: "PDF"
77
75
  click_button "search-submit-header"
78
76
  expect(page).to have_content("Fake PDF Title")
@@ -83,7 +81,7 @@ describe "Browse Dashboard", type: :feature do
83
81
  end
84
82
  expect(page).to have_content("Fake Wav File")
85
83
 
86
- # allows you to browse facets
84
+ # allows you to browse facets
87
85
  visit "/dashboard/files"
88
86
  click_link "Subject"
89
87
  click_link "more Subjects"
@@ -93,8 +91,8 @@ describe "Browse Dashboard", type: :feature do
93
91
  end
94
92
  expect(page).to have_content("File Details")
95
93
 
96
- # allows me to edit files (from the fixtures)
97
- # TODO this would make a good view test.
94
+ # allows me to edit files (from the fixtures)
95
+ # TODO: this would make a good view test.
98
96
  visit "/dashboard/files"
99
97
 
100
98
  fill_in "q", with: "Wav"
@@ -103,15 +101,13 @@ describe "Browse Dashboard", type: :feature do
103
101
  click_link "Edit File"
104
102
  expect(page).to have_content("Edit Fake Wav File.wav")
105
103
 
106
- # allows me to edit files in batches"
104
+ # allows me to edit files in batches"
107
105
  visit "/dashboard/files"
108
106
 
109
107
  first('input#check_all').click
110
108
  click_button('Edit Selected')
111
109
  expect(page).to have_content('3 files')
112
-
113
110
  end
114
111
  end
115
112
  end
116
-
117
113
  end