sufia 6.0.0 → 6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -5
- data/CONTRIBUTING.md +4 -4
- data/Gemfile +2 -1
- data/History.md +69 -0
- data/README.md +84 -4
- data/SUFIA_VERSION +1 -1
- data/app/assets/images/zotero.png +0 -0
- data/app/assets/javascripts/sufia/featured_works.js +20 -3
- data/app/assets/stylesheets/generic_files.css.erb +2 -2
- data/app/assets/stylesheets/sufia.css.scss +2 -2
- data/app/assets/stylesheets/sufia/_buttons.scss +2 -2
- data/app/assets/stylesheets/sufia/_collections.scss +4 -4
- data/app/assets/stylesheets/sufia/_dashboard.scss +1 -1
- data/app/assets/stylesheets/sufia/_file-listing.scss +3 -0
- data/app/assets/stylesheets/sufia/_modal.scss +4 -0
- data/app/assets/stylesheets/sufia/_settings.scss +4 -3
- data/app/assets/stylesheets/sufia/_styles.scss +4 -0
- data/app/controllers/admin/stats_controller.rb +68 -0
- data/app/controllers/api/items_controller.rb +78 -0
- data/app/controllers/api/zotero_controller.rb +70 -0
- data/app/controllers/authorities_controller.rb +6 -5
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
- data/app/controllers/concerns/sufia/breadcrumbs.rb +1 -1
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +11 -0
- data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +23 -11
- data/app/controllers/concerns/sufia/my_controller_behavior.rb +1 -7
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +1 -2
- data/app/controllers/my/collections_controller.rb +1 -0
- data/app/controllers/my/files_controller.rb +1 -1
- data/app/helpers/sufia/sufia_helper_behavior.rb +28 -16
- data/app/models/my_search_builder.rb +4 -0
- data/app/search_builders/sufia/my_search_builder_behavior.rb +20 -0
- data/app/search_builders/sufia/search_builder.rb +1 -1
- data/app/views/admin/stats/index.html.erb +68 -0
- data/app/views/collections/_action_menu.html.erb +22 -20
- data/app/views/collections/_collection.html.erb +1 -1
- data/app/views/collections/_form_for_select_collection.html.erb +5 -3
- data/app/views/generic_files/_show_actions.html.erb +4 -2
- data/app/views/generic_files/show.html.erb +1 -1
- data/app/views/layouts/sufia-dashboard.html.erb +5 -4
- data/app/views/layouts/sufia-one-column.html.erb +2 -0
- data/app/views/layouts/sufia-two-column.html.erb +6 -4
- data/app/views/my/_facet_layout.html.erb +2 -2
- data/app/views/my/_facets.html.erb +4 -6
- data/app/views/my/index.html.erb +4 -3
- data/app/views/users/_edit_primary.html.erb +18 -17
- data/app/views/users/_follower_modal.html.erb +5 -1
- data/app/views/users/_following_modal.html.erb +5 -1
- data/app/views/users/_user_info.html.erb +6 -1
- data/app/views/users/_zotero.html.erb +12 -0
- data/config/locales/sufia.en.yml +10 -1
- data/config/routes.rb +23 -1
- data/lib/generators/sufia/admin_stat_generator.rb +17 -0
- data/lib/generators/sufia/install_generator.rb +8 -3
- data/{sufia-models/lib/generators/sufia/models/templates/config/resque_admin.rb → lib/generators/sufia/templates/sufia/stats_admin.rb} +3 -3
- data/lib/generators/sufia/upgrade400_generator.rb +2 -2
- data/lib/sufia.rb +3 -0
- data/lib/sufia/arkivo.rb +11 -0
- data/lib/sufia/arkivo/actor.rb +95 -0
- data/lib/sufia/arkivo/config.rb +11 -0
- data/lib/sufia/arkivo/create_subscription_job.rb +67 -0
- data/lib/sufia/arkivo/metadata_munger.rb +51 -0
- data/lib/sufia/arkivo/schema_validator.rb +55 -0
- data/lib/sufia/form_builder.rb +1 -1
- data/lib/sufia/inflections.rb +3 -0
- data/lib/sufia/version.rb +1 -1
- data/lib/sufia/zotero.rb +6 -0
- data/lib/sufia/zotero/config.rb +15 -0
- data/solr_conf/conf/solrconfig.xml +11 -0
- data/spec/controllers/admin_stats_controller_spec.rb +73 -0
- data/spec/controllers/api/items_controller_spec.rb +476 -0
- data/spec/controllers/api/zotero_controller_spec.rb +178 -0
- data/spec/controllers/batch_edits_controller_spec.rb +7 -0
- data/spec/controllers/collections_controller_spec.rb +1 -1
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/depositors_controller_spec.rb +9 -5
- data/spec/controllers/generic_files_controller_spec.rb +5 -4
- data/spec/controllers/mailbox_controller_spec.rb +2 -2
- data/spec/controllers/my/collections_controller_spec.rb +1 -2
- data/spec/controllers/my/files_controller_spec.rb +5 -5
- data/spec/controllers/my/shares_controller_spec.rb +15 -3
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/users_controller_spec.rb +10 -9
- data/spec/factories/api_items.rb +91 -0
- data/spec/factories/generic_files.rb +4 -0
- data/spec/factories/users.rb +4 -4
- data/spec/features/featured_item_spec.rb +26 -0
- data/spec/features/ingest_upload_files_spec.rb +2 -3
- data/spec/features/proxy_spec.rb +0 -1
- data/spec/helpers/permissions_helper_spec.rb +2 -2
- data/spec/helpers/sufia_helper_spec.rb +11 -5
- data/spec/inputs/select_with_help_input_spec.rb +2 -2
- data/spec/javascripts/helpers/.gitkeep +0 -0
- data/spec/javascripts/helpers/jasmine-jquery.js +832 -0
- data/spec/javascripts/jasmine_spec.rb +31 -0
- data/spec/javascripts/notify_update_link_spec.js +8 -0
- data/spec/javascripts/single_use_link_spec.js.coffee +23 -0
- data/spec/javascripts/support/jasmine.yml +124 -0
- data/spec/javascripts/support/jasmine_helper.rb +15 -0
- data/spec/javascripts/terms_of_service_spec.js.coffee +32 -0
- data/spec/javascripts/toggle_icon_spec.js +11 -0
- data/spec/jobs/active_fedora_id_based_job_spec.rb +3 -3
- data/spec/jobs/import_url_job_spec.rb +0 -2
- data/spec/lib/sufia/arkivo/actor_spec.rb +139 -0
- data/spec/lib/sufia/arkivo/create_subscription_job_spec.rb +54 -0
- data/spec/lib/sufia/arkivo/metadata_munger_spec.rb +48 -0
- data/spec/lib/sufia/arkivo/schema_validator_spec.rb +65 -0
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +1 -1
- data/spec/lib/sufia/user_stat_importer_spec.rb +60 -0
- data/spec/lib/sufia/zotero/config_spec.rb +30 -0
- data/spec/models/collection_spec.rb +36 -7
- data/spec/models/file_download_stat_spec.rb +5 -5
- data/spec/models/file_usage_spec.rb +23 -0
- data/spec/models/file_view_stat_spec.rb +6 -6
- data/spec/models/fits_datastream_spec.rb +0 -5
- data/spec/models/generic_file_spec.rb +49 -14
- data/spec/models/local_authority_spec.rb +1 -1
- data/spec/models/proxy_deposit_request_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +8 -8
- data/spec/models/user_spec.rb +33 -0
- data/spec/presenters/sufia/collection_presenter_spec.rb +1 -1
- data/spec/routing/api_route_spec.rb +91 -0
- data/spec/routing/route_spec.rb +1 -1
- data/spec/services/generic_file_audit_service_spec.rb +44 -8
- data/spec/spec_helper.rb +18 -3
- data/spec/support/features.rb +0 -2
- data/spec/support/locations.rb +0 -21
- data/spec/support/rake.rb +41 -0
- data/spec/support/selectors.rb +0 -50
- data/spec/tasks/rake_spec.rb +33 -12
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -0
- data/spec/views/admin/stats/index.html.erb_spec.rb +45 -0
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +0 -1
- data/spec/views/dashboard/index_spec.rb +1 -1
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +1 -3
- data/spec/views/users/_follower_modal.html.erb_spec.rb +44 -7
- data/spec/views/users/_following_modal.html.erb_spec.rb +49 -7
- data/spec/views/users/edit.html.erb_spec.rb +72 -0
- data/spec/views/users/show.html.erb_spec.rb +1 -1
- data/sufia.gemspec +6 -2
- data/tasks/sufia-user.rake +14 -0
- metadata +130 -156
- data/spec/lib/sufia/id_service_spec.rb +0 -32
- data/spec/services/noid_spec.rb +0 -9
- data/spec/support/poltergeist.rb +0 -11
- data/spec/support/rake_output.rb +0 -20
- data/sufia-models/.gitignore +0 -17
- data/sufia-models/Gemfile +0 -4
- data/sufia-models/LICENSE.md +0 -177
- data/sufia-models/README.md +0 -39
- data/sufia-models/Rakefile +0 -1
- data/sufia-models/app/actors/sufia/generic_file/actor.rb +0 -137
- data/sufia-models/app/jobs/active_fedora_id_based_job.rb +0 -22
- data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +0 -7
- data/sufia-models/app/jobs/audit_job.rb +0 -62
- data/sufia-models/app/jobs/batch_update_job.rb +0 -72
- data/sufia-models/app/jobs/characterize_job.rb +0 -10
- data/sufia-models/app/jobs/create_derivatives_job.rb +0 -14
- data/sufia-models/app/jobs/import_url_job.rb +0 -52
- data/sufia-models/app/jobs/ingest_local_file_job.rb +0 -46
- data/sufia-models/app/jobs/resolrize_job.rb +0 -9
- data/sufia-models/app/models/batch.rb +0 -36
- data/sufia-models/app/models/checksum_audit_log.rb +0 -21
- data/sufia-models/app/models/concerns/sufia/ability.rb +0 -61
- data/sufia-models/app/models/concerns/sufia/collection_behavior.rb +0 -24
- data/sufia-models/app/models/concerns/sufia/file_stat_utils.rb +0 -35
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +0 -25
- data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +0 -28
- data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +0 -89
- data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +0 -13
- data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +0 -26
- data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +0 -343
- data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +0 -11
- data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +0 -43
- data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +0 -14
- data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +0 -98
- data/sufia-models/app/models/concerns/sufia/generic_file/mime_types.rb +0 -69
- data/sufia-models/app/models/concerns/sufia/generic_file/permissions.rb +0 -11
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +0 -31
- data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +0 -14
- data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +0 -16
- data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +0 -37
- data/sufia-models/app/models/concerns/sufia/model_methods.rb +0 -20
- data/sufia-models/app/models/concerns/sufia/user.rb +0 -137
- data/sufia-models/app/models/concerns/sufia/user_usage_stats.rb +0 -15
- data/sufia-models/app/models/datastreams/file_content_datastream.rb +0 -4
- data/sufia-models/app/models/datastreams/fits_datastream.rb +0 -152
- data/sufia-models/app/models/domain_term.rb +0 -5
- data/sufia-models/app/models/featured_work.rb +0 -22
- data/sufia-models/app/models/file_download_stat.rb +0 -18
- data/sufia-models/app/models/file_usage.rb +0 -34
- data/sufia-models/app/models/file_view_stat.rb +0 -18
- data/sufia-models/app/models/follow.rb +0 -12
- data/sufia-models/app/models/generic_file.rb +0 -3
- data/sufia-models/app/models/geo_names_resource.rb +0 -18
- data/sufia-models/app/models/group.rb +0 -8
- data/sufia-models/app/models/local_authority.rb +0 -86
- data/sufia-models/app/models/local_authority_entry.rb +0 -3
- data/sufia-models/app/models/proxy_deposit_request.rb +0 -85
- data/sufia-models/app/models/proxy_deposit_rights.rb +0 -4
- data/sufia-models/app/models/single_use_link.rb +0 -42
- data/sufia-models/app/models/subject_local_authority_entry.rb +0 -2
- data/sufia-models/app/models/sufia/avatar_uploader.rb +0 -20
- data/sufia-models/app/models/sufia/avatar_validator.rb +0 -8
- data/sufia-models/app/models/sufia/collection.rb +0 -5
- data/sufia-models/app/models/sufia/download.rb +0 -9
- data/sufia-models/app/models/sufia/orcid_validator.rb +0 -12
- data/sufia-models/app/models/sufia/pageview.rb +0 -9
- data/sufia-models/app/models/trophy.rb +0 -10
- data/sufia-models/app/models/user_stat.rb +0 -2
- data/sufia-models/app/models/version_committer.rb +0 -2
- data/sufia-models/app/services/sufia/analytics.rb +0 -50
- data/sufia-models/app/services/sufia/generic_file_audit_service.rb +0 -83
- data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +0 -12
- data/sufia-models/app/services/sufia/id_service.rb +0 -45
- data/sufia-models/app/services/sufia/noid.rb +0 -22
- data/sufia-models/app/services/sufia/repository_audit_service.rb +0 -9
- data/sufia-models/config/locales/sufia.en.yml +0 -6
- data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
- data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +0 -24
- data/sufia-models/lib/generators/sufia/models/fulltext_generator.rb +0 -27
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +0 -106
- data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +0 -24
- data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +0 -2
- data/sufia-models/lib/generators/sufia/models/templates/config/analytics.yml +0 -9
- data/sufia-models/lib/generators/sufia/models/templates/config/clamav.rb +0 -1
- data/sufia-models/lib/generators/sufia/models/templates/config/mailboxer.rb +0 -17
- data/sufia-models/lib/generators/sufia/models/templates/config/mime_types.rb +0 -6
- data/sufia-models/lib/generators/sufia/models/templates/config/redis.yml +0 -9
- data/sufia-models/lib/generators/sufia/models/templates/config/redis_config.rb +0 -32
- data/sufia-models/lib/generators/sufia/models/templates/config/resque-pool.yml +0 -1
- data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/config/setup_mail.rb +0 -3
- data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +0 -223
- data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +0 -144
- data/sufia-models/lib/generators/sufia/models/templates/migrations/acts_as_follower_migration.rb +0 -17
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_avatars_to_users.rb +0 -15
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +0 -6
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_groups_to_users.rb +0 -11
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_ldap_attrs_to_user.rb +0 -27
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_linkedin_to_users.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_social_to_users.rb +0 -13
- data/sufia-models/lib/generators/sufia/models/templates/migrations/change_audit_log_pid_to_generic_file_id.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/change_proxy_deposit_request_pid_to_generic_file_id.rb +0 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_content_blocks.rb +0 -10
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_featured_works.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_download_stats.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_file_view_stats.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +0 -50
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +0 -16
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +0 -11
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_single_use_links.rb +0 -12
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_tinymce_assets.rb +0 -8
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_trophies.rb +0 -10
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_user_stats.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_version_committers.rb +0 -15
- data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +0 -18
- data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +0 -54
- data/sufia-models/lib/generators/sufia/models/upgrade600_generator.rb +0 -21
- data/sufia-models/lib/generators/sufia/models/usagestats_generator.rb +0 -19
- data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
- data/sufia-models/lib/sufia/messages.rb +0 -66
- data/sufia-models/lib/sufia/models.rb +0 -34
- data/sufia-models/lib/sufia/models/active_fedora/redis.rb +0 -43
- data/sufia-models/lib/sufia/models/active_record/redis.rb +0 -56
- data/sufia-models/lib/sufia/models/engine.rb +0 -79
- data/sufia-models/lib/sufia/models/file_content.rb +0 -6
- data/sufia-models/lib/sufia/models/file_content/versions.rb +0 -21
- data/sufia-models/lib/sufia/models/resque.rb +0 -36
- data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +0 -108
- data/sufia-models/lib/sufia/models/user_local_directory_behavior.rb +0 -29
- data/sufia-models/lib/sufia/models/utils.rb +0 -22
- data/sufia-models/lib/sufia/models/version.rb +0 -5
- data/sufia-models/lib/sufia/models/virus_found_error.rb +0 -4
- data/sufia-models/lib/sufia/permissions.rb +0 -9
- data/sufia-models/lib/sufia/permissions/readable.rb +0 -20
- data/sufia-models/lib/sufia/permissions/writable.rb +0 -74
- data/sufia-models/lib/tasks/batch_cleanup.rake +0 -19
- data/sufia-models/lib/tasks/migrate.rake +0 -21
- data/sufia-models/lib/tasks/resque.rake +0 -13
- data/sufia-models/lib/tasks/stats_tasks.rake +0 -12
- data/sufia-models/lib/tasks/sufia-models_tasks.rake +0 -80
- data/sufia-models/sufia-models.gemspec +0 -52
@@ -0,0 +1,178 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe API::ZoteroController, type: :controller do
|
4
|
+
let(:user) { FactoryGirl.find_or_create(:jill) }
|
5
|
+
|
6
|
+
context 'with an HTTP GET to /api/zotero' do
|
7
|
+
context 'with an unauthenticated client' do
|
8
|
+
before { get :initiate }
|
9
|
+
|
10
|
+
subject { response }
|
11
|
+
|
12
|
+
it { is_expected.to have_http_status(302) }
|
13
|
+
it 'describes the redirect' do
|
14
|
+
expect(flash[:alert]).to eq 'You need to sign in or sign up before continuing.'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with an unregistered user' do
|
19
|
+
before do
|
20
|
+
allow_any_instance_of(Ability).to receive(:user_groups) { ['public'] }
|
21
|
+
sign_in user
|
22
|
+
get :initiate
|
23
|
+
end
|
24
|
+
|
25
|
+
subject { response }
|
26
|
+
|
27
|
+
it { is_expected.to have_http_status(302) }
|
28
|
+
it { is_expected.to redirect_to(root_path) }
|
29
|
+
it 'populates the flash with an alert' do
|
30
|
+
expect(flash[:alert]).to eq 'You are not authorized to perform this operation'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with an invalid key/secret combo' do
|
35
|
+
before do
|
36
|
+
allow(Sufia::Zotero).to receive(:config) { broken_config }
|
37
|
+
sign_in user
|
38
|
+
get :initiate
|
39
|
+
end
|
40
|
+
|
41
|
+
let(:broken_config) { Hash.new(client_key: 'foo', client_secret: 'bar') }
|
42
|
+
|
43
|
+
subject { response }
|
44
|
+
|
45
|
+
it { is_expected.to have_http_status(302) }
|
46
|
+
it { is_expected.to redirect_to(root_path) }
|
47
|
+
it 'populates the flash with an alert' do
|
48
|
+
expect(flash[:alert]).to eq 'Invalid Zotero client key pair'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'redirects to Zotero' do
|
53
|
+
before do
|
54
|
+
allow(controller).to receive(:client) { client }
|
55
|
+
allow(client).to receive(:get_request_token) { token }
|
56
|
+
allow_any_instance_of(User).to receive(:zotero_token=)
|
57
|
+
sign_in user
|
58
|
+
get :initiate
|
59
|
+
end
|
60
|
+
|
61
|
+
let(:token) { object_double(OAuth::RequestToken.new(client), authorize_url: 'https://www.zotero.org/oauth/authorize?identity=1&oauth_callback=http%3A%2F%2Ftest.host%2Fapi%2Fzotero%2Fcallback&oauth_token=bc2502f2750983c57224') }
|
62
|
+
let(:client) do
|
63
|
+
OAuth::Consumer.new(Sufia::Zotero.config['client_key'], Sufia::Zotero.config['client_secret'], {
|
64
|
+
site: 'https://www.zotero.org',
|
65
|
+
scheme: :query_string,
|
66
|
+
http_method: :get,
|
67
|
+
request_token_path: '/oauth/request',
|
68
|
+
access_token_path: '/oauth/access',
|
69
|
+
authorize_path: '/oauth/authorize'})
|
70
|
+
end
|
71
|
+
|
72
|
+
subject { response }
|
73
|
+
|
74
|
+
it { is_expected.to have_http_status(302) }
|
75
|
+
it 'has no flash alerts' do
|
76
|
+
expect(flash[:alert]).to be_nil
|
77
|
+
end
|
78
|
+
it 'has the expected callback URL' do
|
79
|
+
expect(subject.headers['Location']).to include('oauth_callback=http%3A%2F%2Ftest.host%2Fapi%2Fzotero%2Fcallback')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'with an HTTP POST/GET to /api/zotero/callback' do
|
85
|
+
context 'with an unauthenticated user' do
|
86
|
+
before { get :callback }
|
87
|
+
|
88
|
+
subject { response }
|
89
|
+
|
90
|
+
it { is_expected.to have_http_status(302) }
|
91
|
+
it 'describes the redirect' do
|
92
|
+
expect(flash[:alert]).to eq 'You need to sign in or sign up before continuing.'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'with an unregistered user' do
|
97
|
+
before do
|
98
|
+
allow_any_instance_of(Ability).to receive(:user_groups) { ['public'] }
|
99
|
+
sign_in user
|
100
|
+
get :callback
|
101
|
+
end
|
102
|
+
|
103
|
+
subject { response }
|
104
|
+
|
105
|
+
it { is_expected.to have_http_status(302) }
|
106
|
+
it { is_expected.to redirect_to(root_path) }
|
107
|
+
it 'populates the flash with an alert' do
|
108
|
+
expect(flash[:alert]).to eq 'You are not authorized to perform this operation'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'with a request lacking an oauth_token' do
|
113
|
+
before do
|
114
|
+
sign_in user
|
115
|
+
get :callback
|
116
|
+
end
|
117
|
+
|
118
|
+
subject { response }
|
119
|
+
|
120
|
+
it { is_expected.to have_http_status(302) }
|
121
|
+
it { is_expected.to redirect_to(routes.url_helpers.edit_profile_path(user)) }
|
122
|
+
it 'populates the flash with an alert' do
|
123
|
+
expect(flash[:alert]).to eq 'Malformed request from Zotero'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'with a non-matching token' do
|
128
|
+
before do
|
129
|
+
sign_in user
|
130
|
+
get :callback, oauth_token: 'woohoo', oauth_verifier: '12345'
|
131
|
+
end
|
132
|
+
|
133
|
+
subject { response }
|
134
|
+
|
135
|
+
it { is_expected.to have_http_status(302) }
|
136
|
+
it { is_expected.to redirect_to(routes.url_helpers.edit_profile_path(user)) }
|
137
|
+
it 'populates the flash with an alert' do
|
138
|
+
expect(flash[:alert]).to eq 'You have not yet connected to Zotero'
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context 'with a signed-in, valid user' do
|
143
|
+
before do
|
144
|
+
allow_any_instance_of(User).to receive(:zotero_token) { user_token }
|
145
|
+
allow(Sufia.queue).to receive(:push)
|
146
|
+
sign_in user
|
147
|
+
get :callback, oauth_token: token_string, oauth_verifier: pin
|
148
|
+
end
|
149
|
+
|
150
|
+
let(:token_string) { 'woohoo' }
|
151
|
+
let(:pin) { '12345' }
|
152
|
+
let(:user_token) do
|
153
|
+
double('token',
|
154
|
+
params: { oauth_token: token_string },
|
155
|
+
get_access_token: access_token)
|
156
|
+
end
|
157
|
+
let(:zuserid) { 'myzuser' }
|
158
|
+
let(:access_token) do
|
159
|
+
double('access', params: { userID: zuserid })
|
160
|
+
end
|
161
|
+
|
162
|
+
subject { response }
|
163
|
+
|
164
|
+
it { is_expected.to have_http_status(302) }
|
165
|
+
it 'pushes an arkivo subscription job' do
|
166
|
+
expect(Sufia.queue).to have_received(:push).once
|
167
|
+
end
|
168
|
+
it { is_expected.to redirect_to(routes.url_helpers.profile_path(user)) }
|
169
|
+
it 'populates the flash with a notice' do
|
170
|
+
expect(flash[:alert]).to be_nil
|
171
|
+
expect(flash[:notice]).to eq 'Successfully connected to Zotero!'
|
172
|
+
end
|
173
|
+
it 'stores the userID in the user instance' do
|
174
|
+
expect(user.reload.zotero_userid).to eq zuserid
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
@@ -78,6 +78,13 @@ describe BatchEditsController, :type => :controller do
|
|
78
78
|
expect(GenericFile.find(one.id).subject).to eq ["zzz"]
|
79
79
|
expect(GenericFile.find(two.id).subject).to eq ["zzz"]
|
80
80
|
end
|
81
|
+
|
82
|
+
it "should update permissions" do
|
83
|
+
put :update, update_type: "update", visibility: "authenticated"
|
84
|
+
expect(response).to be_redirect
|
85
|
+
expect(GenericFile.find(one.id).visibility).to eq "authenticated"
|
86
|
+
expect(GenericFile.find(two.id).visibility).to eq "authenticated"
|
87
|
+
end
|
81
88
|
end
|
82
89
|
|
83
90
|
end
|
@@ -111,7 +111,7 @@ describe CollectionsController do
|
|
111
111
|
expect(asset_results["response"]["numFound"]).to eq 1
|
112
112
|
doc = asset_results["response"]["docs"].first
|
113
113
|
expect(doc["id"]).to eq @asset2.id
|
114
|
-
|
114
|
+
GenericFile.find(@asset2.id)
|
115
115
|
expect(doc[Solrizer.solr_name(:collection)]).to be_nil
|
116
116
|
end
|
117
117
|
end
|
@@ -66,7 +66,7 @@ describe DashboardController, :type => :controller do
|
|
66
66
|
expect(assigns[:outgoing].first).to be_kind_of ProxyDepositRequest
|
67
67
|
expect(assigns[:outgoing].first.generic_file_id).to eq(outgoing_file.id)
|
68
68
|
end
|
69
|
-
|
69
|
+
end
|
70
70
|
end
|
71
71
|
|
72
72
|
context "with activities" do
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe DepositorsController
|
4
|
-
let
|
5
|
-
let
|
3
|
+
describe DepositorsController do
|
4
|
+
let(:user) { FactoryGirl.create(:user) }
|
5
|
+
let(:grantee) { FactoryGirl.create(:user) }
|
6
6
|
|
7
7
|
describe "as a logged in user" do
|
8
8
|
before do
|
@@ -38,12 +38,16 @@ describe DepositorsController, :type => :controller do
|
|
38
38
|
end
|
39
39
|
describe "create" do
|
40
40
|
it "should not be successful" do
|
41
|
-
|
41
|
+
post :create, user_id: user.user_key, grantee_id: grantee.user_key, format: 'json'
|
42
|
+
expect(response).to redirect_to root_path
|
43
|
+
expect(flash[:alert]).to eq "You are not authorized to access this page."
|
42
44
|
end
|
43
45
|
end
|
44
46
|
describe "destroy" do
|
45
47
|
it "should not be successful" do
|
46
|
-
|
48
|
+
delete :destroy, user_id: user.user_key, id: grantee.user_key, format: 'json'
|
49
|
+
expect(response).to redirect_to root_path
|
50
|
+
expect(flash[:alert]).to eq "You are not authorized to access this page."
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -524,6 +524,7 @@ describe GenericFilesController do
|
|
524
524
|
|
525
525
|
describe "#show" do
|
526
526
|
it "should show me the file and set breadcrumbs" do
|
527
|
+
expect(GenericFile).not_to receive(:find)
|
527
528
|
expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
|
528
529
|
get :show, id: generic_file
|
529
530
|
expect(response).to be_successful
|
@@ -565,14 +566,14 @@ describe GenericFilesController do
|
|
565
566
|
end
|
566
567
|
|
567
568
|
describe "batch creation" do
|
568
|
-
context "when uploading a file" do
|
569
|
-
let(:batch_id) {
|
569
|
+
context "when uploading a file" do
|
570
|
+
let(:batch_id) { ActiveFedora::Noid::Service.new.mint }
|
570
571
|
let(:file1) { fixture_file_upload('/world.png','image/png') }
|
571
572
|
let(:file2) { fixture_file_upload('/image.jpg','image/png') }
|
572
573
|
|
573
574
|
it "should not create the batch on HTTP GET " do
|
574
575
|
expect(Batch).to_not receive(:create)
|
575
|
-
xhr :get, :new
|
576
|
+
xhr :get, :new
|
576
577
|
expect(response).to be_success
|
577
578
|
end
|
578
579
|
|
@@ -584,6 +585,6 @@ describe GenericFilesController do
|
|
584
585
|
xhr :post, :create, files: [file2], Filename: 'An image', batch_id: batch_id, on_behalf_of: 'carolyn', terms_of_service: '1'
|
585
586
|
expect(response).to be_success
|
586
587
|
end
|
587
|
-
end
|
588
|
+
end
|
588
589
|
end
|
589
590
|
end
|
@@ -40,8 +40,8 @@ describe MailboxController, :type => :controller do
|
|
40
40
|
end
|
41
41
|
describe "#delete_all" do
|
42
42
|
it "should delete message" do
|
43
|
-
|
44
|
-
|
43
|
+
@another_user.send_message(@user, 'message 2', 'subject 2')
|
44
|
+
@another_user.send_message(@user, 'message 3', 'subject 3')
|
45
45
|
expect(@user.mailbox.inbox.count).to eq(3)
|
46
46
|
get :delete_all
|
47
47
|
expect(@user.mailbox.inbox.count).to eq(0)
|
@@ -16,7 +16,7 @@ describe My::CollectionsController, :type => :controller do
|
|
16
16
|
c.apply_depositor_metadata(@user.user_key)
|
17
17
|
c.save!
|
18
18
|
end
|
19
|
-
@unrelated_collection = Collection.
|
19
|
+
@unrelated_collection = Collection.create(title: "test collection") do |c|
|
20
20
|
c.apply_depositor_metadata(FactoryGirl.create(:user).user_key)
|
21
21
|
end
|
22
22
|
end
|
@@ -27,7 +27,6 @@ describe My::CollectionsController, :type => :controller do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should paginate" do
|
30
|
-
other_user = FactoryGirl.create(:user)
|
31
30
|
Collection.new(title: "test collection").tap do |c|
|
32
31
|
c.apply_depositor_metadata(@user.user_key)
|
33
32
|
c.save!
|
@@ -58,14 +58,14 @@ describe My::FilesController, :type => :controller do
|
|
58
58
|
|
59
59
|
describe "batch processing" do
|
60
60
|
include Sufia::Messages
|
61
|
-
let
|
62
|
-
let
|
63
|
-
let
|
61
|
+
let(:batch_id) {"batch_id"}
|
62
|
+
let(:batch_id2) {"batch_id2"}
|
63
|
+
let(:batch) {double}
|
64
64
|
|
65
65
|
before do
|
66
66
|
allow(batch).to receive(:id).and_return(batch_id)
|
67
|
-
User.batchuser().send_message(user, single_success(batch_id, batch), success_subject,
|
68
|
-
User.batchuser().send_message(user, multiple_success(batch_id2, [batch]), success_subject,
|
67
|
+
User.batchuser().send_message(user, single_success(batch_id, batch), success_subject, false)
|
68
|
+
User.batchuser().send_message(user, multiple_success(batch_id2, [batch]), success_subject, false)
|
69
69
|
get :index
|
70
70
|
end
|
71
71
|
it "gets batches that are complete" do
|
@@ -14,21 +14,31 @@ describe My::SharesController, :type => :controller do
|
|
14
14
|
let!(:my_file) { FactoryGirl.create(:generic_file, depositor: user) }
|
15
15
|
let!(:unshared_file) { FactoryGirl.create(:generic_file, depositor: other_user) }
|
16
16
|
|
17
|
-
let!(:shared_with_me) {
|
17
|
+
let!(:shared_with_me) {
|
18
|
+
FactoryGirl.create(:generic_file).tap do |r|
|
18
19
|
r.apply_depositor_metadata other_user
|
19
20
|
r.edit_users += [user.user_key]
|
20
21
|
r.save!
|
21
22
|
end
|
22
23
|
}
|
23
24
|
|
24
|
-
let!(:
|
25
|
+
let!(:read_shared_with_me) {
|
26
|
+
FactoryGirl.create(:generic_file, depositor: other_user).tap do |r|
|
27
|
+
r.read_users += [user.user_key]
|
28
|
+
r.save!
|
29
|
+
end
|
30
|
+
}
|
31
|
+
|
32
|
+
let!(:shared_with_someone_else) {
|
33
|
+
FactoryGirl.create(:generic_file).tap do |r|
|
25
34
|
r.apply_depositor_metadata user
|
26
35
|
r.edit_users += [other_user.user_key]
|
27
36
|
r.save!
|
28
37
|
end
|
29
38
|
}
|
30
39
|
|
31
|
-
let!(:my_collection) {
|
40
|
+
let!(:my_collection) {
|
41
|
+
Collection.new(title: "My collection").tap do |c|
|
32
42
|
c.apply_depositor_metadata(user.user_key)
|
33
43
|
c.save!
|
34
44
|
end
|
@@ -68,6 +78,8 @@ describe My::SharesController, :type => :controller do
|
|
68
78
|
expect(assigns[:document_list].map(&:id)).to_not include(shared_with_someone_else.id)
|
69
79
|
# doesn't show my collections
|
70
80
|
expect(assigns[:document_list].map(&:id)).to_not include my_collection.id
|
81
|
+
# doesn't show files I can see but have no edit access
|
82
|
+
expect(assigns[:document_list].map(&:id)).to_not include read_shared_with_me.id
|
71
83
|
end
|
72
84
|
end
|
73
85
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe PagesController, :type => :controller do
|
4
|
-
let
|
4
|
+
let(:page_name) {"about_page"}
|
5
5
|
context "content exists" do
|
6
6
|
describe "GET #show" do
|
7
7
|
let(:page) { ContentBlock.create!(name: page_name, value: "foo bar") }
|
@@ -28,6 +28,7 @@ describe UsersController, :type => :controller do
|
|
28
28
|
let!(:trophy1) { user.trophies.create!(generic_file_id: file1.id) }
|
29
29
|
let!(:trophy2) { user.trophies.create!(generic_file_id: file2.id) }
|
30
30
|
let!(:trophy3) { user.trophies.create!(generic_file_id: file3.id) }
|
31
|
+
let!(:badtrophy) { user.trophies.create!(generic_file_id: 'not_a_generic_file') }
|
31
32
|
|
32
33
|
it "show the user profile if user exists" do
|
33
34
|
get :show, id: user.user_key
|
@@ -92,8 +93,8 @@ describe UsersController, :type => :controller do
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
end
|
95
|
-
describe "#edit" do
|
96
96
|
|
97
|
+
describe "#edit" do
|
97
98
|
it "show edit form when user edits own profile" do
|
98
99
|
get :edit, id: user.user_key
|
99
100
|
expect(response).to be_success
|
@@ -124,7 +125,7 @@ describe UsersController, :type => :controller do
|
|
124
125
|
end
|
125
126
|
end
|
126
127
|
|
127
|
-
|
128
|
+
context "when the user has trophies" do
|
128
129
|
let(:file1) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
129
130
|
let(:file2) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
130
131
|
let(:file3) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
@@ -235,7 +236,7 @@ describe UsersController, :type => :controller do
|
|
235
236
|
end
|
236
237
|
it "should remove a trophy" do
|
237
238
|
expect {
|
238
|
-
post :update, id: user.user_key,
|
239
|
+
post :update, id: user.user_key, 'remove_trophy_'+file.id => 'yes'
|
239
240
|
}.to change { user.trophies.count }.by(-1)
|
240
241
|
expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
|
241
242
|
expect(flash[:notice]).to include("Your profile has been updated")
|
@@ -296,21 +297,21 @@ describe UsersController, :type => :controller do
|
|
296
297
|
end
|
297
298
|
|
298
299
|
describe "#toggle_trophy" do
|
299
|
-
|
300
|
-
|
301
|
-
|
300
|
+
let(:file) { GenericFile.create { |f| f.apply_depositor_metadata(user) } }
|
301
|
+
let(:file_id) { file.id }
|
302
|
+
let(:another_user) { FactoryGirl.create(:user) }
|
302
303
|
|
303
|
-
|
304
|
+
it "should trophy a file" do
|
304
305
|
post :toggle_trophy, {id: user.user_key, file_id: file_id}
|
305
306
|
json = JSON.parse(response.body)
|
306
307
|
expect(json['user_id']).to eq user.id
|
307
308
|
expect(json['generic_file_id']).to eq file_id
|
308
309
|
end
|
309
|
-
|
310
|
+
it "should not trophy a file for a different user" do
|
310
311
|
post :toggle_trophy, {id: another_user.user_key, file_id: file_id}
|
311
312
|
expect(response).to_not be_success
|
312
313
|
end
|
313
|
-
|
314
|
+
it "should not trophy a file with no edit privs" do
|
314
315
|
sign_in another_user
|
315
316
|
post :toggle_trophy, {id: another_user.user_key, file_id: file_id}
|
316
317
|
expect(response).to_not be_success
|
@@ -0,0 +1,91 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :post_item, class: Hash do
|
3
|
+
skip_create
|
4
|
+
|
5
|
+
token 'mock_token'
|
6
|
+
|
7
|
+
metadata do
|
8
|
+
{
|
9
|
+
resourceType: 'Dataset',
|
10
|
+
title: 'Findings from NSF Study',
|
11
|
+
creators: [
|
12
|
+
{
|
13
|
+
creatorType: 'author',
|
14
|
+
firstName: 'John',
|
15
|
+
lastName: 'Doe'
|
16
|
+
},
|
17
|
+
{
|
18
|
+
creatorType: 'seriesEditor',
|
19
|
+
firstName: 'Rafael',
|
20
|
+
lastName: 'Nadal'
|
21
|
+
},
|
22
|
+
{
|
23
|
+
creatorType: 'inventor',
|
24
|
+
name: 'Babs McGee'
|
25
|
+
},
|
26
|
+
{
|
27
|
+
creatorType: 'contributor',
|
28
|
+
name: 'Jane Doeski'
|
29
|
+
},
|
30
|
+
],
|
31
|
+
description: 'This was funded by the NSF in 2013',
|
32
|
+
publisher: 'National Science Foundation',
|
33
|
+
dateCreated: '2014-11-02T14:24:64Z',
|
34
|
+
basedNear: 'Paris, France',
|
35
|
+
identifier: 'isbn:1234567890',
|
36
|
+
url: 'http://example.org/nsf/2013/datasets/',
|
37
|
+
language: 'English--New Jerseyan',
|
38
|
+
rights: 'http://creativecommons.org/licenses/by-sa/3.0/us/',
|
39
|
+
tags: [
|
40
|
+
'datasets',
|
41
|
+
'nsf',
|
42
|
+
'stuff'
|
43
|
+
]
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
file do
|
48
|
+
{
|
49
|
+
base64: 'YXJraXZvCg==',
|
50
|
+
md5: 'f03313ded2feb96f0a641b8eb098aae0',
|
51
|
+
filename: 'file.txt',
|
52
|
+
contentType: 'text/plain'
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
initialize_with { attributes }
|
57
|
+
end
|
58
|
+
|
59
|
+
factory :put_item, class: Hash, parent: :post_item do
|
60
|
+
metadata do
|
61
|
+
{
|
62
|
+
resourceType: 'Article',
|
63
|
+
title: 'THE REAL FINDINGS',
|
64
|
+
creators: [
|
65
|
+
{
|
66
|
+
creatorType: 'author',
|
67
|
+
firstName: 'John',
|
68
|
+
lastName: 'Doe'
|
69
|
+
},
|
70
|
+
{
|
71
|
+
creatorType: 'inventor',
|
72
|
+
name: 'Babs McGee'
|
73
|
+
},
|
74
|
+
],
|
75
|
+
rights: 'http://creativecommons.org/licenses/by-sa/3.0/us/',
|
76
|
+
tags: [
|
77
|
+
'datasets'
|
78
|
+
]
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
file do
|
83
|
+
{
|
84
|
+
base64: 'IyBIRUFERVIKClRoaXMgaXMgYSBwYXJhZ3JhcGghCg==',
|
85
|
+
md5: '3923077bb477097b8496dbcff5fa44b3',
|
86
|
+
filename: 'replaced.md',
|
87
|
+
contentType: 'text/x-markdown'
|
88
|
+
}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|