sufia 6.0.0 → 6.1.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 (290) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -5
  3. data/CONTRIBUTING.md +4 -4
  4. data/Gemfile +2 -1
  5. data/History.md +69 -0
  6. data/README.md +84 -4
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/images/zotero.png +0 -0
  9. data/app/assets/javascripts/sufia/featured_works.js +20 -3
  10. data/app/assets/stylesheets/generic_files.css.erb +2 -2
  11. data/app/assets/stylesheets/sufia.css.scss +2 -2
  12. data/app/assets/stylesheets/sufia/_buttons.scss +2 -2
  13. data/app/assets/stylesheets/sufia/_collections.scss +4 -4
  14. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -1
  15. data/app/assets/stylesheets/sufia/_file-listing.scss +3 -0
  16. data/app/assets/stylesheets/sufia/_modal.scss +4 -0
  17. data/app/assets/stylesheets/sufia/_settings.scss +4 -3
  18. data/app/assets/stylesheets/sufia/_styles.scss +4 -0
  19. data/app/controllers/admin/stats_controller.rb +68 -0
  20. data/app/controllers/api/items_controller.rb +78 -0
  21. data/app/controllers/api/zotero_controller.rb +70 -0
  22. data/app/controllers/authorities_controller.rb +6 -5
  23. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
  24. data/app/controllers/concerns/sufia/breadcrumbs.rb +1 -1
  25. data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +11 -0
  26. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  27. data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +1 -1
  28. data/app/controllers/concerns/sufia/files_controller_behavior.rb +23 -11
  29. data/app/controllers/concerns/sufia/my_controller_behavior.rb +1 -7
  30. data/app/controllers/concerns/sufia/users_controller_behavior.rb +1 -2
  31. data/app/controllers/my/collections_controller.rb +1 -0
  32. data/app/controllers/my/files_controller.rb +1 -1
  33. data/app/helpers/sufia/sufia_helper_behavior.rb +28 -16
  34. data/app/models/my_search_builder.rb +4 -0
  35. data/app/search_builders/sufia/my_search_builder_behavior.rb +20 -0
  36. data/app/search_builders/sufia/search_builder.rb +1 -1
  37. data/app/views/admin/stats/index.html.erb +68 -0
  38. data/app/views/collections/_action_menu.html.erb +22 -20
  39. data/app/views/collections/_collection.html.erb +1 -1
  40. data/app/views/collections/_form_for_select_collection.html.erb +5 -3
  41. data/app/views/generic_files/_show_actions.html.erb +4 -2
  42. data/app/views/generic_files/show.html.erb +1 -1
  43. data/app/views/layouts/sufia-dashboard.html.erb +5 -4
  44. data/app/views/layouts/sufia-one-column.html.erb +2 -0
  45. data/app/views/layouts/sufia-two-column.html.erb +6 -4
  46. data/app/views/my/_facet_layout.html.erb +2 -2
  47. data/app/views/my/_facets.html.erb +4 -6
  48. data/app/views/my/index.html.erb +4 -3
  49. data/app/views/users/_edit_primary.html.erb +18 -17
  50. data/app/views/users/_follower_modal.html.erb +5 -1
  51. data/app/views/users/_following_modal.html.erb +5 -1
  52. data/app/views/users/_user_info.html.erb +6 -1
  53. data/app/views/users/_zotero.html.erb +12 -0
  54. data/config/locales/sufia.en.yml +10 -1
  55. data/config/routes.rb +23 -1
  56. data/lib/generators/sufia/admin_stat_generator.rb +17 -0
  57. data/lib/generators/sufia/install_generator.rb +8 -3
  58. data/{sufia-models/lib/generators/sufia/models/templates/config/resque_admin.rb → lib/generators/sufia/templates/sufia/stats_admin.rb} +3 -3
  59. data/lib/generators/sufia/upgrade400_generator.rb +2 -2
  60. data/lib/sufia.rb +3 -0
  61. data/lib/sufia/arkivo.rb +11 -0
  62. data/lib/sufia/arkivo/actor.rb +95 -0
  63. data/lib/sufia/arkivo/config.rb +11 -0
  64. data/lib/sufia/arkivo/create_subscription_job.rb +67 -0
  65. data/lib/sufia/arkivo/metadata_munger.rb +51 -0
  66. data/lib/sufia/arkivo/schema_validator.rb +55 -0
  67. data/lib/sufia/form_builder.rb +1 -1
  68. data/lib/sufia/inflections.rb +3 -0
  69. data/lib/sufia/version.rb +1 -1
  70. data/lib/sufia/zotero.rb +6 -0
  71. data/lib/sufia/zotero/config.rb +15 -0
  72. data/solr_conf/conf/solrconfig.xml +11 -0
  73. data/spec/controllers/admin_stats_controller_spec.rb +73 -0
  74. data/spec/controllers/api/items_controller_spec.rb +476 -0
  75. data/spec/controllers/api/zotero_controller_spec.rb +178 -0
  76. data/spec/controllers/batch_edits_controller_spec.rb +7 -0
  77. data/spec/controllers/collections_controller_spec.rb +1 -1
  78. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  79. data/spec/controllers/depositors_controller_spec.rb +9 -5
  80. data/spec/controllers/generic_files_controller_spec.rb +5 -4
  81. data/spec/controllers/mailbox_controller_spec.rb +2 -2
  82. data/spec/controllers/my/collections_controller_spec.rb +1 -2
  83. data/spec/controllers/my/files_controller_spec.rb +5 -5
  84. data/spec/controllers/my/shares_controller_spec.rb +15 -3
  85. data/spec/controllers/pages_controller_spec.rb +1 -1
  86. data/spec/controllers/users_controller_spec.rb +10 -9
  87. data/spec/factories/api_items.rb +91 -0
  88. data/spec/factories/generic_files.rb +4 -0
  89. data/spec/factories/users.rb +4 -4
  90. data/spec/features/featured_item_spec.rb +26 -0
  91. data/spec/features/ingest_upload_files_spec.rb +2 -3
  92. data/spec/features/proxy_spec.rb +0 -1
  93. data/spec/helpers/permissions_helper_spec.rb +2 -2
  94. data/spec/helpers/sufia_helper_spec.rb +11 -5
  95. data/spec/inputs/select_with_help_input_spec.rb +2 -2
  96. data/spec/javascripts/helpers/.gitkeep +0 -0
  97. data/spec/javascripts/helpers/jasmine-jquery.js +832 -0
  98. data/spec/javascripts/jasmine_spec.rb +31 -0
  99. data/spec/javascripts/notify_update_link_spec.js +8 -0
  100. data/spec/javascripts/single_use_link_spec.js.coffee +23 -0
  101. data/spec/javascripts/support/jasmine.yml +124 -0
  102. data/spec/javascripts/support/jasmine_helper.rb +15 -0
  103. data/spec/javascripts/terms_of_service_spec.js.coffee +32 -0
  104. data/spec/javascripts/toggle_icon_spec.js +11 -0
  105. data/spec/jobs/active_fedora_id_based_job_spec.rb +3 -3
  106. data/spec/jobs/import_url_job_spec.rb +0 -2
  107. data/spec/lib/sufia/arkivo/actor_spec.rb +139 -0
  108. data/spec/lib/sufia/arkivo/create_subscription_job_spec.rb +54 -0
  109. data/spec/lib/sufia/arkivo/metadata_munger_spec.rb +48 -0
  110. data/spec/lib/sufia/arkivo/schema_validator_spec.rb +65 -0
  111. data/spec/lib/sufia/upload_complete_behavior_spec.rb +1 -1
  112. data/spec/lib/sufia/user_stat_importer_spec.rb +60 -0
  113. data/spec/lib/sufia/zotero/config_spec.rb +30 -0
  114. data/spec/models/collection_spec.rb +36 -7
  115. data/spec/models/file_download_stat_spec.rb +5 -5
  116. data/spec/models/file_usage_spec.rb +23 -0
  117. data/spec/models/file_view_stat_spec.rb +6 -6
  118. data/spec/models/fits_datastream_spec.rb +0 -5
  119. data/spec/models/generic_file_spec.rb +49 -14
  120. data/spec/models/local_authority_spec.rb +1 -1
  121. data/spec/models/proxy_deposit_request_spec.rb +1 -1
  122. data/spec/models/trophy_spec.rb +8 -8
  123. data/spec/models/user_spec.rb +33 -0
  124. data/spec/presenters/sufia/collection_presenter_spec.rb +1 -1
  125. data/spec/routing/api_route_spec.rb +91 -0
  126. data/spec/routing/route_spec.rb +1 -1
  127. data/spec/services/generic_file_audit_service_spec.rb +44 -8
  128. data/spec/spec_helper.rb +18 -3
  129. data/spec/support/features.rb +0 -2
  130. data/spec/support/locations.rb +0 -21
  131. data/spec/support/rake.rb +41 -0
  132. data/spec/support/selectors.rb +0 -50
  133. data/spec/tasks/rake_spec.rb +33 -12
  134. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -0
  135. data/spec/views/admin/stats/index.html.erb_spec.rb +45 -0
  136. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +0 -1
  137. data/spec/views/dashboard/index_spec.rb +1 -1
  138. data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
  139. data/spec/views/generic_file/show.html.erb_spec.rb +1 -3
  140. data/spec/views/users/_follower_modal.html.erb_spec.rb +44 -7
  141. data/spec/views/users/_following_modal.html.erb_spec.rb +49 -7
  142. data/spec/views/users/edit.html.erb_spec.rb +72 -0
  143. data/spec/views/users/show.html.erb_spec.rb +1 -1
  144. data/sufia.gemspec +6 -2
  145. data/tasks/sufia-user.rake +14 -0
  146. metadata +130 -156
  147. data/spec/lib/sufia/id_service_spec.rb +0 -32
  148. data/spec/services/noid_spec.rb +0 -9
  149. data/spec/support/poltergeist.rb +0 -11
  150. data/spec/support/rake_output.rb +0 -20
  151. data/sufia-models/.gitignore +0 -17
  152. data/sufia-models/Gemfile +0 -4
  153. data/sufia-models/LICENSE.md +0 -177
  154. data/sufia-models/README.md +0 -39
  155. data/sufia-models/Rakefile +0 -1
  156. data/sufia-models/app/actors/sufia/generic_file/actor.rb +0 -137
  157. data/sufia-models/app/jobs/active_fedora_id_based_job.rb +0 -22
  158. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +0 -7
  159. data/sufia-models/app/jobs/audit_job.rb +0 -62
  160. data/sufia-models/app/jobs/batch_update_job.rb +0 -72
  161. data/sufia-models/app/jobs/characterize_job.rb +0 -10
  162. data/sufia-models/app/jobs/create_derivatives_job.rb +0 -14
  163. data/sufia-models/app/jobs/import_url_job.rb +0 -52
  164. data/sufia-models/app/jobs/ingest_local_file_job.rb +0 -46
  165. data/sufia-models/app/jobs/resolrize_job.rb +0 -9
  166. data/sufia-models/app/models/batch.rb +0 -36
  167. data/sufia-models/app/models/checksum_audit_log.rb +0 -21
  168. data/sufia-models/app/models/concerns/sufia/ability.rb +0 -61
  169. data/sufia-models/app/models/concerns/sufia/collection_behavior.rb +0 -24
  170. data/sufia-models/app/models/concerns/sufia/file_stat_utils.rb +0 -35
  171. data/sufia-models/app/models/concerns/sufia/generic_file.rb +0 -25
  172. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +0 -28
  173. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +0 -89
  174. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +0 -13
  175. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +0 -26
  176. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +0 -343
  177. data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +0 -11
  178. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +0 -43
  179. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +0 -14
  180. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +0 -98
  181. data/sufia-models/app/models/concerns/sufia/generic_file/mime_types.rb +0 -69
  182. data/sufia-models/app/models/concerns/sufia/generic_file/permissions.rb +0 -11
  183. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +0 -31
  184. data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +0 -14
  185. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +0 -16
  186. data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +0 -37
  187. data/sufia-models/app/models/concerns/sufia/model_methods.rb +0 -20
  188. data/sufia-models/app/models/concerns/sufia/user.rb +0 -137
  189. data/sufia-models/app/models/concerns/sufia/user_usage_stats.rb +0 -15
  190. data/sufia-models/app/models/datastreams/file_content_datastream.rb +0 -4
  191. data/sufia-models/app/models/datastreams/fits_datastream.rb +0 -152
  192. data/sufia-models/app/models/domain_term.rb +0 -5
  193. data/sufia-models/app/models/featured_work.rb +0 -22
  194. data/sufia-models/app/models/file_download_stat.rb +0 -18
  195. data/sufia-models/app/models/file_usage.rb +0 -34
  196. data/sufia-models/app/models/file_view_stat.rb +0 -18
  197. data/sufia-models/app/models/follow.rb +0 -12
  198. data/sufia-models/app/models/generic_file.rb +0 -3
  199. data/sufia-models/app/models/geo_names_resource.rb +0 -18
  200. data/sufia-models/app/models/group.rb +0 -8
  201. data/sufia-models/app/models/local_authority.rb +0 -86
  202. data/sufia-models/app/models/local_authority_entry.rb +0 -3
  203. data/sufia-models/app/models/proxy_deposit_request.rb +0 -85
  204. data/sufia-models/app/models/proxy_deposit_rights.rb +0 -4
  205. data/sufia-models/app/models/single_use_link.rb +0 -42
  206. data/sufia-models/app/models/subject_local_authority_entry.rb +0 -2
  207. data/sufia-models/app/models/sufia/avatar_uploader.rb +0 -20
  208. data/sufia-models/app/models/sufia/avatar_validator.rb +0 -8
  209. data/sufia-models/app/models/sufia/collection.rb +0 -5
  210. data/sufia-models/app/models/sufia/download.rb +0 -9
  211. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -12
  212. data/sufia-models/app/models/sufia/pageview.rb +0 -9
  213. data/sufia-models/app/models/trophy.rb +0 -10
  214. data/sufia-models/app/models/user_stat.rb +0 -2
  215. data/sufia-models/app/models/version_committer.rb +0 -2
  216. data/sufia-models/app/services/sufia/analytics.rb +0 -50
  217. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +0 -83
  218. data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +0 -12
  219. data/sufia-models/app/services/sufia/id_service.rb +0 -45
  220. data/sufia-models/app/services/sufia/noid.rb +0 -22
  221. data/sufia-models/app/services/sufia/repository_audit_service.rb +0 -9
  222. data/sufia-models/config/locales/sufia.en.yml +0 -6
  223. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  224. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +0 -24
  225. data/sufia-models/lib/generators/sufia/models/fulltext_generator.rb +0 -27
  226. data/sufia-models/lib/generators/sufia/models/install_generator.rb +0 -106
  227. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  228. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +0 -24
  229. data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +0 -2
  230. data/sufia-models/lib/generators/sufia/models/templates/config/analytics.yml +0 -9
  231. data/sufia-models/lib/generators/sufia/models/templates/config/clamav.rb +0 -1
  232. data/sufia-models/lib/generators/sufia/models/templates/config/mailboxer.rb +0 -17
  233. data/sufia-models/lib/generators/sufia/models/templates/config/mime_types.rb +0 -6
  234. data/sufia-models/lib/generators/sufia/models/templates/config/redis.yml +0 -9
  235. data/sufia-models/lib/generators/sufia/models/templates/config/redis_config.rb +0 -32
  236. data/sufia-models/lib/generators/sufia/models/templates/config/resque-pool.yml +0 -1
  237. data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +0 -5
  238. data/sufia-models/lib/generators/sufia/models/templates/config/setup_mail.rb +0 -3
  239. data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +0 -223
  240. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +0 -144
  241. data/sufia-models/lib/generators/sufia/models/templates/migrations/acts_as_follower_migration.rb +0 -17
  242. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_avatars_to_users.rb +0 -15
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +0 -6
  244. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_groups_to_users.rb +0 -11
  245. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_ldap_attrs_to_user.rb +0 -27
  246. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_linkedin_to_users.rb +0 -5
  247. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  248. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_social_to_users.rb +0 -13
  249. data/sufia-models/lib/generators/sufia/models/templates/migrations/change_audit_log_pid_to_generic_file_id.rb +0 -5
  250. data/sufia-models/lib/generators/sufia/models/templates/migrations/change_proxy_deposit_request_pid_to_generic_file_id.rb +0 -5
  251. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
  252. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb +0 -10
  253. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_featured_works.rb +0 -12
  254. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_download_stats.rb +0 -12
  255. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_view_stats.rb +0 -12
  256. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +0 -50
  257. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +0 -16
  258. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +0 -11
  259. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb +0 -12
  260. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb +0 -8
  261. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb +0 -10
  262. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb +0 -19
  263. data/sufia-models/lib/generators/sufia/models/templates/migrations/create_version_committers.rb +0 -15
  264. data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +0 -18
  265. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +0 -54
  266. data/sufia-models/lib/generators/sufia/models/upgrade600_generator.rb +0 -21
  267. data/sufia-models/lib/generators/sufia/models/usagestats_generator.rb +0 -19
  268. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
  269. data/sufia-models/lib/sufia/messages.rb +0 -66
  270. data/sufia-models/lib/sufia/models.rb +0 -34
  271. data/sufia-models/lib/sufia/models/active_fedora/redis.rb +0 -43
  272. data/sufia-models/lib/sufia/models/active_record/redis.rb +0 -56
  273. data/sufia-models/lib/sufia/models/engine.rb +0 -79
  274. data/sufia-models/lib/sufia/models/file_content.rb +0 -6
  275. data/sufia-models/lib/sufia/models/file_content/versions.rb +0 -21
  276. data/sufia-models/lib/sufia/models/resque.rb +0 -36
  277. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +0 -108
  278. data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +0 -29
  279. data/sufia-models/lib/sufia/models/utils.rb +0 -22
  280. data/sufia-models/lib/sufia/models/version.rb +0 -5
  281. data/sufia-models/lib/sufia/models/virus_found_error.rb +0 -4
  282. data/sufia-models/lib/sufia/permissions.rb +0 -9
  283. data/sufia-models/lib/sufia/permissions/readable.rb +0 -20
  284. data/sufia-models/lib/sufia/permissions/writable.rb +0 -74
  285. data/sufia-models/lib/tasks/batch_cleanup.rake +0 -19
  286. data/sufia-models/lib/tasks/migrate.rake +0 -21
  287. data/sufia-models/lib/tasks/resque.rake +0 -13
  288. data/sufia-models/lib/tasks/stats_tasks.rake +0 -12
  289. data/sufia-models/lib/tasks/sufia-models_tasks.rake +0 -80
  290. data/sufia-models/sufia-models.gemspec +0 -52
@@ -5,23 +5,21 @@ describe "Rake tasks" do
5
5
 
6
6
  describe "sufia:empty_batches" do
7
7
  before do
8
- load File.expand_path("../../../sufia-models/lib/tasks/batch_cleanup.rake", __FILE__)
9
- Rake::Task.define_task(:environment)
8
+ load_rake_environment [File.expand_path("../../../sufia-models/lib/tasks/batch_cleanup.rake", __FILE__)]
10
9
  end
11
- after { Rake::Task["sufia:empty_batches"].reenable }
12
- subject { capture_stdout { Rake::Task["sufia:empty_batches"].invoke } }
10
+ subject { run_task "sufia:empty_batches" }
13
11
 
14
12
  context "without an empty batch" do
15
- it { is_expected.to be_empty }
13
+ it { is_expected.to eq "Output: \n Errors:" }
16
14
  end
17
15
 
18
16
  context "with an empty batch" do
19
17
  before { Batch.create("empty-batch") }
20
- it { is_expected.to start_with("empty-batch contains no files - to delete, rerun with the remove option") }
18
+ it { is_expected.to start_with("Output: empty-batch contains no files - to delete, rerun with the remove option") }
21
19
 
22
20
  describe "removing the empty batch" do
23
- subject { capture_stdout { Rake::Task["sufia:empty_batches"].invoke("remove") } }
24
- it { is_expected.to start_with("empty-batch contains no files - deleted") }
21
+ subject { run_task "sufia:empty_batches", "remove" }
22
+ it { is_expected.to start_with("Output: empty-batch contains no files - deleted") }
25
23
  end
26
24
  end
27
25
  end
@@ -30,8 +28,7 @@ describe "Rake tasks" do
30
28
  let(:namespaced_id) { "sufia:123" }
31
29
  let(:corrected_id) { "123" }
32
30
  before do
33
- load File.expand_path("../../../sufia-models/lib/tasks/migrate.rake", __FILE__)
34
- Rake::Task.define_task(:environment)
31
+ load_rake_environment [File.expand_path("../../../sufia-models/lib/tasks/migrate.rake", __FILE__)]
35
32
  end
36
33
 
37
34
  describe "deleting the namespace from ProxyDepositRequest#generic_file_id" do
@@ -39,7 +36,7 @@ describe "Rake tasks" do
39
36
  let(:receiver) { FactoryGirl.find_or_create(:archivist) }
40
37
  before do
41
38
  ProxyDepositRequest.create(generic_file_id: namespaced_id, sending_user: sender, receiving_user: receiver, sender_comment: "please take this")
42
- Rake::Task["sufia:migrate:proxy_deposits"].invoke
39
+ run_task "sufia:migrate:proxy_deposits"
43
40
  end
44
41
  subject { ProxyDepositRequest.first.generic_file_id }
45
42
  it { is_expected.to eql corrected_id }
@@ -48,11 +45,35 @@ describe "Rake tasks" do
48
45
  describe "deleting the namespace from ChecksumAuditLog#generic_file_id" do
49
46
  before do
50
47
  ChecksumAuditLog.create(generic_file_id: namespaced_id)
51
- Rake::Task["sufia:migrate:audit_logs"].invoke
48
+ run_task "sufia:migrate:audit_logs"
52
49
  end
53
50
  subject { ChecksumAuditLog.first.generic_file_id }
54
51
  it { is_expected.to eql corrected_id }
55
52
  end
56
53
  end
57
54
 
55
+ describe "sufia:user:list_emails" do
56
+ let!(:user1) { FactoryGirl.create(:user) }
57
+ let!(:user2) { FactoryGirl.create(:user) }
58
+
59
+ before do
60
+ load_rake_environment [File.expand_path("../../../tasks/sufia-user.rake", __FILE__)]
61
+ end
62
+
63
+ it "creates a file" do
64
+ run_task "sufia:user:list_emails"
65
+ expect(File.exist?("user_emails.txt")).to be_truthy
66
+ expect(IO.read("user_emails.txt")).to include(user1.email, user2.email)
67
+ File.delete("user_emails.txt")
68
+ end
69
+
70
+ it "creates a file I give it" do
71
+ run_task "sufia:user:list_emails", "abc123.txt"
72
+ expect(File.exist?("user_emails.txt")).not_to be_truthy
73
+ expect(File.exist?("abc123.txt")).to be_truthy
74
+ expect(IO.read("abc123.txt")).to include(user1.email, user2.email)
75
+ File.delete("abc123.txt")
76
+ end
77
+ end
78
+
58
79
  end
@@ -11,6 +11,10 @@ class TestAppGenerator < Rails::Generators::Base
11
11
  generate "browse_everything:config"
12
12
  end
13
13
 
14
+ def banner
15
+ say_status("info", "TEST ENVIRONMENT OVERRIDES", :blue)
16
+ end
17
+
14
18
  def add_analytics_config
15
19
  append_file 'config/analytics.yml' do
16
20
  "\n" +
@@ -27,4 +31,12 @@ class TestAppGenerator < Rails::Generators::Base
27
31
  gsub_file "config/initializers/sufia.rb",
28
32
  "config.analytics = false", "config.analytics = true"
29
33
  end
34
+
35
+ def enable_arkivo_api
36
+ generate 'sufia:models:arkivo_api'
37
+ end
38
+
39
+ def relax_routing_constraint
40
+ gsub_file 'config/initializers/arkivo_constraint.rb', 'false', 'true'
41
+ end
30
42
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe "admin/stats/index.html.erb" do
4
+ context "default depositors" do
5
+ let(:top_5_active_users) do
6
+ users = {}
7
+ 5.times { |i| users[i.to_s] = i}
8
+ users
9
+ end
10
+ before do
11
+ assign(:files_count, {})
12
+ assign(:top_formats, [])
13
+ assign(:users_stats, {})
14
+ assign(:recent_users, [])
15
+ assign(:active_users, top_5_active_users)
16
+ render
17
+ end
18
+ it "should show top 5 depositors and option to view more" do
19
+ expect(rendered).to have_content("(top 5)")
20
+ expect(rendered).to have_content("View top 20")
21
+ end
22
+ end
23
+
24
+ context "top 20 depositors" do
25
+ let(:top_20_active_users) do
26
+ users = {}
27
+ 20.times { |i| users[i.to_s] = i}
28
+ users
29
+ end
30
+ before do
31
+ assign(:files_count, {})
32
+ assign(:top_formats, [])
33
+ assign(:users_stats, {})
34
+ assign(:recent_users, [])
35
+ assign(:active_users, top_20_active_users)
36
+ params[:dep_count] = 20
37
+ render
38
+ end
39
+ it "should show top 20 depositors, without an option to view more" do
40
+ expect(rendered).to have_content("(top 20)")
41
+ expect(rendered).to_not have_content("View top 20")
42
+ end
43
+ end
44
+
45
+ end
@@ -24,7 +24,6 @@ describe 'catalog/_sort_and_per_page.html.erb', :type => :view do
24
24
 
25
25
  it 'displays the relevance option for sorting' do
26
26
  render
27
- page = Capybara::Node::Simple.new(rendered)
28
27
  expect(rendered).to include("<li><a href=\"/catalog?sort=score+desc%2C+date_uploaded_dtsi+desc\">relevance</a></li>")
29
28
  end
30
29
 
@@ -88,7 +88,7 @@ describe "dashboard/index.html.erb", :type => :view do
88
88
  end
89
89
 
90
90
  it "should show the statistics before the profile" do
91
- expect(@sidebar).to match /Your Statistics.*Charles Francis Xavier/m
91
+ expect(@sidebar).to match(/Your Statistics.*Charles Francis Xavier/m)
92
92
  end
93
93
  end
94
94
 
@@ -33,7 +33,7 @@ describe 'generic_files/edit.html.erb', :no_clean do
33
33
 
34
34
  let(:page) do
35
35
  render
36
- page = Capybara::Node::Simple.new(rendered)
36
+ Capybara::Node::Simple.new(rendered)
37
37
  end
38
38
 
39
39
  it "should only draw one resource_type multiselect" do
@@ -7,9 +7,7 @@ describe 'generic_files/show.html.erb', :type => :view do
7
7
  twitter_handle: 'bot4lib')
8
8
  }
9
9
 
10
- let(:content) do
11
- content = double('content', versions: [], mimeType: 'application/pdf')
12
- end
10
+ let(:content){ double('content', versions: [], mimeType: 'application/pdf') }
13
11
 
14
12
  let(:generic_file) do
15
13
  stub_model(GenericFile, id: '123',
@@ -1,18 +1,55 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'users/_follower_modal.html.erb', :type => :view do
4
- let(:user) { FactoryGirl.create(:user, display_name: "Frank") }
4
+ let(:frank) { FactoryGirl.create(:user, display_name: "Frank") }
5
+ let(:page) { Capybara::Node::Simple.new(rendered) }
5
6
 
6
7
  before do
7
- assign :followers, [user]
8
+ assign :user, view_user
9
+ allow(controller).to receive(:current_user).and_return(current_user)
10
+ assign :followers, followers
11
+ render
8
12
  end
9
13
 
10
- it "should draw user list" do
11
- render
12
- page = Capybara::Node::Simple.new(rendered)
13
- expect(page).to have_link "Frank", href: "/users/#{user.to_param}"
14
+ context "when followers" do
15
+ let(:view_user) { }
16
+ let(:current_user) { }
17
+ let(:followers) { [frank]}
18
+
19
+ it "draws user list" do
20
+ expect(page).to have_link "Frank", href: "/users/#{frank.to_param}"
21
+ end
14
22
  end
15
23
 
16
- end
17
24
 
25
+ context "when no followers" do
26
+ let(:followers) { []}
27
+ let(:view_user) { frank }
28
+
29
+ context "when logged in " do
30
+ context "when current user has no followers" do
31
+ let(:current_user) { frank }
32
+
33
+ it "indicates the lack of followers for you" do
34
+ expect(page).to have_text "No one is following you."
35
+ end
36
+ end
18
37
 
38
+ context "when another user has no followers" do
39
+ let(:current_user) { stub_model(User) }
40
+
41
+ it "indicates the lack of followers for this user" do
42
+ expect(page).to have_text "No one is following this user."
43
+ end
44
+ end
45
+ end
46
+
47
+ context "when not logged in" do
48
+ let(:current_user) { }
49
+
50
+ it "indicates the lack of followers for this user" do
51
+ expect(page).to have_text "No one is following this user."
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,18 +1,60 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'users/_following_modal.html.erb', :type => :view do
4
- let(:user) { FactoryGirl.create(:user, display_name: "Frank") }
5
4
 
6
5
  before do
7
- assign :following, [user]
6
+ assign :following, following
7
+ assign :user, view_user
8
+ allow(controller).to receive(:current_user).and_return(current_user)
9
+ render
8
10
  end
11
+ let(:frank) { FactoryGirl.create(:user, display_name: "Frank") }
12
+ let(:page) { Capybara::Node::Simple.new(rendered) }
9
13
 
10
- it "should draw user list" do
11
- render
12
- page = Capybara::Node::Simple.new(rendered)
13
- expect(page).to have_link "Frank", href: "/users/#{user.to_param}"
14
+ context "when following users" do
15
+ let(:following) { [frank] }
16
+ let(:current_user) { frank }
17
+ let(:view_user) { }
18
+
19
+ it "draws user list" do
20
+ expect(page).to have_link "Frank", href: "/users/#{frank.to_param}"
21
+ end
14
22
  end
15
23
 
16
- end
24
+ context "when not following users" do
25
+ let(:following) { [] }
26
+
27
+ context "when logged in" do
28
+ let(:current_user) { frank }
29
+
30
+ before do
31
+ assign :user, frank
32
+ end
17
33
 
34
+ context "when current user is not following anyone" do
35
+ let(:view_user) { frank }
18
36
 
37
+ it "indicates that you are not following anyone" do
38
+ expect(page).to have_text "You are not following anyone."
39
+ end
40
+ end
41
+
42
+ context "when another user is not following anyone" do
43
+ let(:view_user) { stub_model(User) }
44
+
45
+ it "indicates the user is not following anyone" do
46
+ expect(page).to have_text "This user is not following anyone."
47
+ end
48
+ end
49
+ end
50
+
51
+ context "when not logged in" do
52
+ let(:current_user) { }
53
+ let(:view_user) { frank }
54
+
55
+ it "indicates the user is not following anyone" do
56
+ expect(page).to have_text "This user is not following anyone."
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'users/edit.html.erb', type: :view do
4
+ let(:user) { stub_model(User, user_key: 'mjg') }
5
+
6
+ before do
7
+ allow(view).to receive(:signed_in?).and_return(true)
8
+ allow(view).to receive(:current_user).and_return(user)
9
+ assign(:user, user)
10
+ assign(:followers, [])
11
+ assign(:following, [])
12
+ assign(:trophies, [])
13
+ assign(:events, [])
14
+ end
15
+
16
+ it "shows an ORCID field" do
17
+ render
18
+ expect(rendered).to match(/ORCID Profile/)
19
+ end
20
+
21
+ context 'with Zotero integration enabled' do
22
+ before do
23
+ allow(Sufia.config).to receive(:arkivo_api) { true }
24
+ end
25
+
26
+ it 'shows a Zotero label' do
27
+ render
28
+ expect(rendered).to match(/Zotero Profile/)
29
+ end
30
+
31
+ context 'with a userID already set on the user instance' do
32
+ before do
33
+ allow(user).to receive(:zotero_userid) { '12345' }
34
+ render
35
+ end
36
+
37
+ it 'shows a link to the Zotero profile' do
38
+ expect(rendered).to have_link("Connected!", href: "https://www.zotero.org/users/12345")
39
+ end
40
+ end
41
+
42
+ context 'with no existing token' do
43
+ before { render }
44
+
45
+ it 'shows a Zotero OAuth button' do
46
+ expect(rendered).to have_css('a#zotero')
47
+ end
48
+ end
49
+
50
+ context 'with an existing token, in the production env' do
51
+ before do
52
+ allow(Rails.env).to receive(:production?) { true }
53
+ render
54
+ end
55
+
56
+ it 'shows a Zotero OAuth button' do
57
+ expect(rendered).to have_css('a#zotero')
58
+ end
59
+ end
60
+ end
61
+
62
+ context 'with Zotero integration disabled' do
63
+ before do
64
+ allow(Sufia.config).to receive(:arkivo_api) { false }
65
+ end
66
+
67
+ it 'hides a Zotero OAuth button' do
68
+ render
69
+ expect(subject).not_to have_css('a#zotero')
70
+ end
71
+ end
72
+ end
@@ -26,7 +26,7 @@ describe 'users/show.html.erb', :type => :view do
26
26
 
27
27
  it "should have the vitals" do
28
28
  render
29
- expect(rendered).to match /Joined on #{join_date.strftime("%b %d, %Y")}/
29
+ expect(rendered).to match(/Joined on #{join_date.strftime("%b %d, %Y")}/)
30
30
  end
31
31
 
32
32
  context "with trophy" do
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.summary = %q{Sufia was extracted from ScholarSphere developed by Penn State University}
9
9
  gem.homepage = "http://github.com/projecthydra/sufia"
10
10
 
11
- gem.files = `git ls-files`.split($\)
11
+ gem.files = `git ls-files | grep -v ^sufia-models`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "sufia"
@@ -19,7 +19,8 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'sufia-models', version
20
20
  gem.add_dependency 'blacklight_advanced_search', ['>= 5.1.4', '< 6.0']
21
21
  gem.add_dependency 'blacklight', '~> 5.12'
22
- gem.add_dependency 'tinymce-rails', '~> 4.0.19'
22
+ gem.add_dependency 'railties', '>= 4.2.0'
23
+ gem.add_dependency 'tinymce-rails', '~> 4.1'
23
24
  gem.add_dependency 'tinymce-rails-imageupload', '~> 4.0.16.beta'
24
25
 
25
26
  # sass-rails is typically generated into the app's gemfile by `rails new`
@@ -40,6 +41,8 @@ Gem::Specification.new do |gem|
40
41
  gem.add_dependency 'breadcrumbs_on_rails', '~> 2.3.0'
41
42
  gem.add_dependency 'select2-rails', '~> 3.5.9'
42
43
  gem.add_dependency "devise", "~> 3.0"
44
+ gem.add_dependency 'json-schema'
45
+ gem.add_dependency 'oauth'
43
46
 
44
47
  gem.add_development_dependency 'engine_cart', '~> 0.5'
45
48
  gem.add_development_dependency 'mida', '~> 0.3'
@@ -51,4 +54,5 @@ Gem::Specification.new do |gem|
51
54
  gem.add_development_dependency "poltergeist", "~> 1.5"
52
55
  gem.add_development_dependency "factory_girl_rails", '~> 4.4'
53
56
  gem.add_development_dependency "equivalent-xml", '~> 0.5'
57
+ gem.add_development_dependency "jasmine", '~> 2.3'
54
58
  end
@@ -0,0 +1,14 @@
1
+ namespace :sufia do
2
+ namespace :user do
3
+
4
+ desc "list user's email"
5
+ task "list_emails", [:file_name] => :environment do |cmd, args|
6
+ file_name = args[:file_name]
7
+ file_name ||= "user_emails.txt"
8
+ users = User.all.map {|user| user.email}.reject {|email| email.blank?}
9
+ f = File.new(file_name, "w")
10
+ f.write(users.join(", "))
11
+ f.close
12
+ end
13
+ end
14
+ end