sufia 6.0.0.rc2 → 6.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -5
- data/History.md +14 -0
- data/LICENSE +15 -0
- data/SUFIA_VERSION +1 -1
- data/app/assets/javascripts/sufia/batch_edit.js +1 -1
- data/app/assets/javascripts/sufia/permissions.js +8 -12
- data/app/assets/stylesheets/sufia.css.scss +1 -1
- data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +67 -0
- data/app/assets/stylesheets/sufia/_settings.scss +1 -0
- data/app/assets/stylesheets/sufia/_styles.scss +4 -0
- data/app/assets/stylesheets/sufia/_tinymce.scss +14 -0
- data/app/controllers/batch_controller.rb +11 -2
- data/app/controllers/concerns/sufia/breadcrumbs.rb +2 -3
- data/app/controllers/concerns/sufia/collections_controller_behavior.rb +0 -1
- data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +1 -2
- data/app/controllers/concerns/sufia/controller.rb +1 -7
- data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +3 -8
- data/app/controllers/concerns/sufia/files_controller/local_ingest_behavior.rb +2 -3
- data/app/controllers/concerns/sufia/files_controller/upload_complete_behavior.rb +1 -2
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +27 -14
- data/app/controllers/concerns/sufia/homepage_controller.rb +3 -2
- data/app/controllers/content_blocks_controller.rb +17 -1
- data/app/controllers/downloads_controller.rb +0 -1
- data/app/controllers/my/shares_controller.rb +1 -0
- data/app/controllers/single_use_links_controller.rb +0 -1
- data/app/controllers/single_use_links_viewer_controller.rb +3 -8
- data/app/forms/sufia/forms/generic_file_edit_form.rb +1 -8
- data/app/helpers/content_block_helper.rb +30 -10
- data/app/helpers/generic_file_helper.rb +4 -4
- data/app/helpers/sufia/dashboard_helper_behavior.rb +2 -2
- data/app/helpers/sufia/sufia_helper_behavior.rb +4 -4
- data/app/helpers/trophy_helper.rb +3 -3
- data/app/jobs/content_delete_event_job.rb +1 -2
- data/app/jobs/content_deposit_event_job.rb +1 -1
- data/app/jobs/content_depositor_change_event_job.rb +1 -1
- data/app/jobs/content_new_version_event_job.rb +1 -1
- data/app/jobs/content_restored_version_event_job.rb +1 -1
- data/app/jobs/content_update_event_job.rb +1 -1
- data/app/models/concerns/sufia/solr_document_behavior.rb +5 -9
- data/app/models/content_block.rb +20 -0
- data/app/models/featured_work_list.rb +4 -0
- data/app/presenters/sufia/collection_presenter.rb +14 -2
- data/app/presenters/sufia/generic_file_presenter.rb +16 -0
- data/app/presenters/sufia/version_list_presenter.rb +1 -1
- data/app/views/batch/_metadata.html.erb +4 -4
- data/app/views/batch_edits/edit.html.erb +1 -1
- data/app/views/collections/_action_menu.html.erb +4 -5
- data/app/views/collections/_show_descriptions.html.erb +1 -5
- data/app/views/collections/_show_document_list.html.erb +0 -2
- data/app/views/collections/_show_document_list_menu.html.erb +5 -6
- data/app/views/collections/_show_document_list_row.html.erb +9 -9
- data/app/views/collections/_sort_and_per_page.html.erb +1 -1
- data/app/views/collections/_view_type_group.html.erb +1 -1
- data/app/views/collections/show.html.erb +3 -3
- data/app/views/generic_files/_asset_permissions_denial_flash.html.erb +1 -1
- data/app/views/generic_files/_asset_saved_flash.html.erb +1 -1
- data/app/views/generic_files/_asset_updated_flash.html.erb +1 -1
- data/app/views/generic_files/_browse_everything.html.erb +4 -4
- data/app/views/generic_files/_media_display.html.erb +9 -9
- data/app/views/generic_files/_permission_form.html.erb +1 -1
- data/app/views/generic_files/_show_actions.html.erb +1 -1
- data/app/views/generic_files/_show_collections.html.erb +2 -2
- data/app/views/generic_files/_show_details.html.erb +1 -1
- data/app/views/generic_files/_versioning.html.erb +9 -5
- data/app/views/generic_files/jq_upload.json.jbuilder +1 -1
- data/app/views/generic_files/new.html.erb +2 -3
- data/app/views/generic_files/show.html.erb +13 -16
- data/app/views/generic_files/upload/_alerts.html.erb +2 -2
- data/app/views/generic_files/upload/_form_fields.html.erb +1 -1
- data/app/views/generic_files/upload/_local_file_import_chooser.html.erb +1 -1
- data/app/views/generic_files/upload/_script_templates.html.erb +2 -2
- data/app/views/homepage/_featured.html.erb +2 -4
- data/app/views/homepage/_featured_researcher.html.erb +1 -1
- data/app/views/homepage/_featured_works.html.erb +5 -3
- data/app/views/homepage/_home_content.html.erb +1 -1
- data/app/views/homepage/_recent_document.html.erb +2 -2
- data/app/views/homepage/_sortable_featured.html.erb +1 -2
- data/app/views/my/_action_menu.html.erb +8 -8
- data/app/views/my/_collection_action_menu.html.erb +4 -4
- data/app/views/my/_index_partials/_list_collections.html.erb +9 -12
- data/app/views/my/_index_partials/_list_files.html.erb +9 -9
- data/app/views/my/index.html.erb +0 -1
- data/app/views/records/_rights_modal.html.erb +1 -0
- data/app/views/users/_contributions.html.erb +2 -3
- data/app/views/users/_edit_primary.html.erb +68 -0
- data/app/views/users/_edit_secondary.html.erb +1 -0
- data/app/views/users/_trophy_edit.html.erb +1 -3
- data/app/views/users/edit.html.erb +4 -78
- data/config/initializers/simple_form.rb +167 -0
- data/config/initializers/simple_form_bootstrap.rb +137 -0
- data/config/locales/simple_form.en.yml +31 -0
- data/config/locales/sufia.en.yml +7 -4
- data/config/routes.rb +1 -1
- data/lib/generators/sufia/templates/catalog_controller.rb +1 -1
- data/lib/sufia/single_use_error.rb +1 -1
- data/lib/sufia/version.rb +1 -1
- data/spec/actors/generic_file/actor_spec.rb +5 -5
- data/spec/controllers/batch_controller_spec.rb +15 -0
- data/spec/controllers/collections_controller_spec.rb +1 -1
- data/spec/controllers/content_blocks_controller_spec.rb +23 -3
- data/spec/controllers/downloads_controller_spec.rb +5 -5
- data/spec/controllers/generic_files_controller_spec.rb +12 -12
- data/spec/controllers/homepage_controller_spec.rb +19 -6
- data/spec/controllers/my/files_controller_spec.rb +8 -10
- data/spec/controllers/my/shares_controller_spec.rb +34 -23
- data/spec/controllers/single_use_links_controller_spec.rb +2 -3
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +19 -20
- data/spec/controllers/users_controller_spec.rb +8 -8
- data/spec/factories/generic_files.rb +4 -4
- data/spec/factories/users.rb +2 -3
- data/spec/features/browse_dashboard_files_spec.rb +8 -8
- data/spec/features/collection_spec.rb +15 -8
- data/spec/features/edit_file_spec.rb +26 -0
- data/spec/features/single_use_links_spec.rb +3 -3
- data/spec/forms/generic_file_edit_form_spec.rb +8 -1
- data/spec/helpers/content_block_helper_spec.rb +10 -0
- data/spec/helpers/dashboard_helper_spec.rb +42 -0
- data/spec/helpers/sufia_helper_spec.rb +34 -7
- data/spec/helpers/trophy_helper_spec.rb +6 -6
- data/spec/inputs/select_with_help_input_spec.rb +16 -0
- data/spec/jobs/audit_job_spec.rb +1 -1
- data/spec/jobs/characterize_job_spec.rb +2 -7
- data/spec/jobs/create_derivatives_job_spec.rb +27 -38
- data/spec/jobs/import_url_job_spec.rb +2 -2
- data/spec/jobs/ingest_local_file_job_spec.rb +6 -8
- data/spec/lib/sufia/id_service_spec.rb +0 -7
- data/spec/lib/sufia/messages_spec.rb +16 -13
- data/spec/models/ability_spec.rb +3 -0
- data/spec/models/checksum_audit_log_spec.rb +1 -1
- data/spec/models/content_block_spec.rb +41 -0
- data/spec/models/featured_work_list_spec.rb +23 -9
- data/spec/models/file_content_datastream_spec.rb +4 -4
- data/spec/models/file_usage_spec.rb +1 -1
- data/spec/models/fits_datastream_spec.rb +4 -4
- data/spec/models/generic_file_spec.rb +31 -15
- data/spec/models/single_use_link_spec.rb +2 -2
- data/spec/models/solr_document_spec.rb +8 -5
- data/spec/models/user_spec.rb +3 -3
- data/spec/presenters/sufia/collection_presenter_spec.rb +34 -0
- data/spec/presenters/sufia/generic_file_presenter_spec.rb +41 -1
- data/spec/presenters/sufia/version_list_presenter_spec.rb +12 -2
- data/spec/services/generic_file_audit_service_spec.rb +3 -3
- data/spec/services/noid_spec.rb +4 -11
- data/spec/services/repository_audit_service_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/support/fixture_helpers.rb +2 -3
- data/spec/support/selectors.rb +7 -7
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/views/batch/edit.html.erb_spec.rb +14 -17
- data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/_permission_form.html.erb_spec.rb +29 -7
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +69 -151
- data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
- data/spec/views/homepage/_featured_works.html.erb_spec.rb +29 -0
- data/spec/views/users/show.html.erb_spec.rb +1 -1
- data/sufia-models/app/actors/sufia/generic_file/actor.rb +12 -8
- data/sufia-models/app/jobs/batch_update_job.rb +2 -2
- data/sufia-models/app/jobs/import_url_job.rb +5 -3
- data/sufia-models/app/jobs/ingest_local_file_job.rb +46 -0
- data/sufia-models/app/jobs/resolrize_job.rb +1 -8
- data/sufia-models/app/models/batch.rb +0 -7
- data/sufia-models/app/models/concerns/sufia/ability.rb +1 -1
- data/sufia-models/app/models/concerns/sufia/{collection.rb → collection_behavior.rb} +1 -13
- data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +3 -4
- data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +1 -1
- data/sufia-models/app/models/concerns/sufia/generic_file/featured.rb +1 -4
- data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +7 -7
- data/sufia-models/app/models/concerns/sufia/generic_file/trophies.rb +1 -2
- data/sufia-models/app/models/concerns/sufia/generic_file/virus_check.rb +16 -11
- data/sufia-models/app/models/concerns/sufia/model_methods.rb +1 -14
- data/sufia-models/app/models/concerns/sufia/user.rb +5 -0
- data/sufia-models/app/models/file_usage.rb +1 -1
- data/sufia-models/app/models/file_view_stat.rb +1 -1
- data/sufia-models/app/models/sufia/collection.rb +5 -0
- data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +1 -1
- data/sufia-models/app/services/sufia/id_service.rb +1 -2
- data/sufia-models/app/services/sufia/noid.rb +4 -24
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +6 -1
- data/sufia-models/lib/generators/sufia/models/templates/app/models/collection.rb +2 -0
- data/sufia-models/lib/generators/sufia/models/templates/config/resque_config.rb +1 -1
- data/sufia-models/lib/generators/sufia/models/templates/config/solrconfig.xml +46 -0
- data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +9 -5
- data/sufia-models/lib/generators/sufia/models/templates/migrations/add_external_key_to_content_blocks.rb +6 -0
- data/sufia-models/lib/generators/sufia/models/update_content_blocks_generator.rb +18 -0
- data/sufia-models/lib/sufia/messages.rb +11 -12
- data/sufia-models/lib/sufia/models/engine.rb +2 -1
- data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +9 -5
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia-models/sufia-models.gemspec +5 -5
- data/sufia.gemspec +15 -15
- data/tasks/sufia-dev.rake +0 -16
- metadata +86 -64
- data/LICENSE.md +0 -14
- data/app/jobs/ingest_local_file_job.rb +0 -39
- data/sufia-models/app/models/collection.rb +0 -3
- data/sufia-models/app/services/sufia/indexing_service.rb +0 -15
@@ -0,0 +1 @@
|
|
1
|
+
gem 'kaminari', github: 'harai/kaminari', branch: 'route_prefix_prototype'
|
@@ -12,29 +12,26 @@ describe 'batch/edit.html.erb' do
|
|
12
12
|
render
|
13
13
|
end
|
14
14
|
|
15
|
-
it "should draw
|
15
|
+
it "should draw the page" do
|
16
|
+
# form
|
17
|
+
expect(rendered).to have_selector "form#new_generic_file"
|
18
|
+
# should have browser validations
|
19
|
+
expect(rendered).not_to have_selector "form#new_generic_file[novalidate]"
|
20
|
+
|
21
|
+
# tooltip for visibility
|
16
22
|
expect(rendered).to have_selector "span#visibility_tooltip a i.help-icon"
|
17
|
-
end
|
18
23
|
|
19
|
-
|
24
|
+
# tooltip for share_with
|
20
25
|
expect(rendered).to have_selector "span#share_with_tooltip a i.help-icon"
|
21
|
-
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
# access rights
|
28
|
+
expect(rendered).to have_selector("div#rightsModal .modal-dialog .modal-content")
|
29
|
+
expect(rendered).to have_selector('select#generic_file_rights[name="generic_file[rights][]"]')
|
30
|
+
page = Capybara::Node::Simple.new(rendered)
|
31
|
+
page.all('select#generic_file_rights option').each do |elem|
|
32
|
+
expect(elem.value).to_not be_empty
|
26
33
|
end
|
27
34
|
|
28
|
-
it "should allow setting many rights" do
|
29
|
-
expect(rendered).to have_selector('select#generic_file_rights[name="generic_file[rights][]"]')
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should not have an empty rights element" do
|
33
|
-
page = Capybara::Node::Simple.new(rendered)
|
34
|
-
page.all('select#generic_file_rights option').each do |elem|
|
35
|
-
expect(elem.value).to_not be_empty
|
36
|
-
end
|
37
|
-
end
|
38
35
|
end
|
39
36
|
end
|
40
37
|
|
@@ -5,6 +5,7 @@ describe 'collections/_show_descriptions.html.erb', :type => :view do
|
|
5
5
|
let(:collection) do
|
6
6
|
mock_model(Collection,
|
7
7
|
resource_type: [], creator: [], contributor: [], tag: [],
|
8
|
+
description: '', title: 'hmm',
|
8
9
|
rights: [], publisher: [], date_created: ['2000-01-01'], subject: [],
|
9
10
|
language: [], identifier: [], based_near: [], related_url: [],
|
10
11
|
members: ['foo', 'bar'], bytes: 123456678
|
@@ -12,7 +13,6 @@ describe 'collections/_show_descriptions.html.erb', :type => :view do
|
|
12
13
|
end
|
13
14
|
before do
|
14
15
|
assign(:presenter, presenter)
|
15
|
-
assign(:collection, collection)
|
16
16
|
end
|
17
17
|
|
18
18
|
let(:presenter) { Sufia::CollectionPresenter.new(collection) }
|
@@ -2,22 +2,44 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'generic_files/_permission_form.html.erb', :type => :view do
|
4
4
|
let(:generic_file) {
|
5
|
-
stub_model(GenericFile,
|
5
|
+
stub_model(GenericFile, id: '123',
|
6
6
|
depositor: 'bob',
|
7
7
|
resource_type: ['Dataset'])
|
8
8
|
}
|
9
9
|
|
10
|
+
let(:form) do
|
11
|
+
form_for(generic_file, url: '/update') do |gf_form|
|
12
|
+
return gf_form
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
10
16
|
before do
|
11
17
|
allow(controller).to receive(:current_user).and_return(stub_model(User))
|
12
|
-
allow(generic_file).to receive(:permissions).and_return(
|
13
|
-
|
14
|
-
|
18
|
+
allow(generic_file).to receive(:permissions).and_return(permissions)
|
19
|
+
allow(view).to receive(:f).and_return(form)
|
20
|
+
render
|
21
|
+
end
|
22
|
+
|
23
|
+
context "without additional users" do
|
24
|
+
let(:permissions) { [] }
|
25
|
+
|
26
|
+
it "should draw the permissions form without error" do
|
27
|
+
expect(rendered).to have_css("input#new_user_name_skel")
|
28
|
+
expect(rendered).not_to have_css("button.remove_perm")
|
15
29
|
end
|
16
30
|
end
|
17
31
|
|
18
|
-
|
19
|
-
|
20
|
-
|
32
|
+
context "with additional users" do
|
33
|
+
let(:depositor_permission) { Hydra::AccessControls::Permission.new(id: '123', name: 'bob', type: 'person', access: 'edit') }
|
34
|
+
let(:public_permission) { Hydra::AccessControls::Permission.new(id: '124', name: 'public', type: 'group', access: 'read') }
|
35
|
+
let(:other_permission) { Hydra::AccessControls::Permission.new(id: '125', name: 'joe@example.com', type: 'person', access: 'edit') }
|
36
|
+
let(:permissions) { [ depositor_permission, public_permission, other_permission] }
|
37
|
+
|
38
|
+
it "should draw the permissions form without error" do
|
39
|
+
expect(rendered).to have_css("input#new_user_name_skel")
|
40
|
+
expect(rendered).to have_css("button.remove_perm", count: 1) # depositor and public should be filtered out
|
41
|
+
expect(rendered).to have_css("button.remove_perm[data-index='2']")
|
42
|
+
end
|
21
43
|
end
|
22
44
|
|
23
45
|
end
|
@@ -14,7 +14,7 @@ describe 'generic_files/edit.html.erb', :no_clean do
|
|
14
14
|
let(:content) { double('content', mimeType: 'application/pdf') }
|
15
15
|
|
16
16
|
let(:generic_file) {
|
17
|
-
stub_model(GenericFile, id: '123',
|
17
|
+
stub_model(GenericFile, id: '123',
|
18
18
|
depositor: 'bob',
|
19
19
|
resource_type: ['Book', 'Dataset'])
|
20
20
|
}
|
@@ -12,7 +12,7 @@ describe 'generic_files/show.html.erb', :type => :view do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
let(:generic_file) do
|
15
|
-
stub_model(GenericFile, id: '123',
|
15
|
+
stub_model(GenericFile, id: '123',
|
16
16
|
depositor: depositor.user_key,
|
17
17
|
audit_stat: 1,
|
18
18
|
title: ['My Title'],
|
@@ -46,283 +46,202 @@ describe 'generic_files/show.html.erb', :type => :view do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
describe 'schema.org' do
|
49
|
+
let(:item) { Mida::Document.new(rendered).items.first }
|
49
50
|
describe 'descriptive metadata' do
|
50
51
|
before do
|
51
52
|
render template: 'generic_files/show.html.erb', layout: 'layouts/sufia-one-column'
|
52
|
-
@item = Mida::Document.new(rendered).items.first
|
53
53
|
end
|
54
54
|
|
55
|
-
it '
|
56
|
-
|
57
|
-
|
55
|
+
it 'draws schema.org fields' do
|
56
|
+
# set itemtype to CreativeWork
|
57
|
+
expect(item.type).to eq('http://schema.org/CreativeWork')
|
58
58
|
|
59
|
-
|
60
|
-
expect(
|
61
|
-
end
|
59
|
+
# set title as name
|
60
|
+
expect(item.properties['name'].first).to eq('My Title')
|
62
61
|
|
63
|
-
|
64
|
-
expect(@item.properties['description'].first).to eq('Lorem ipsum lorem ipsum.')
|
65
|
-
end
|
62
|
+
expect(item.properties['description'].first).to eq('Lorem ipsum lorem ipsum.')
|
66
63
|
|
67
|
-
|
68
|
-
expect(
|
69
|
-
end
|
64
|
+
# tag as keywords
|
65
|
+
expect(item.properties['keywords']).to include('bacon', 'sausage', 'eggs')
|
70
66
|
|
71
|
-
|
72
|
-
based_near =
|
67
|
+
# based_near as contentLocation
|
68
|
+
based_near = item.properties['contentLocation'].first
|
73
69
|
expect(based_near.type).to eq('http://schema.org/Place')
|
74
70
|
expect(based_near.properties['name'].first).to eq('Seattle, WA, US')
|
75
|
-
end
|
76
71
|
|
77
|
-
|
78
|
-
contributors = @item.properties['contributor']
|
72
|
+
contributors = item.properties['contributor']
|
79
73
|
expect(contributors.count).to eq(2)
|
80
74
|
contributor = contributors.first
|
81
75
|
expect(contributor.type).to eq('http://schema.org/Person')
|
82
76
|
expect(contributor.properties['name'].first).to eq('Tweedledee')
|
83
|
-
end
|
84
77
|
|
85
|
-
|
86
|
-
creators = @item.properties['creator']
|
78
|
+
creators = item.properties['creator']
|
87
79
|
expect(creators.count).to eq(2)
|
88
80
|
creator = creators.first
|
89
81
|
expect(creator.type).to eq('http://schema.org/Person')
|
90
82
|
expect(creator.properties['name'].first).to eq('Doe, John')
|
91
|
-
end
|
92
83
|
|
93
|
-
|
94
|
-
expect(@item.properties['dateCreated'].first).to eq('1984-01-02')
|
95
|
-
end
|
84
|
+
expect(item.properties['dateCreated'].first).to eq('1984-01-02')
|
96
85
|
|
97
|
-
|
98
|
-
expect(@item.properties['inLanguage'].first).to eq('Quechua')
|
99
|
-
end
|
86
|
+
expect(item.properties['inLanguage'].first).to eq('Quechua')
|
100
87
|
|
101
|
-
|
102
|
-
publisher = @item.properties['publisher'].first
|
88
|
+
publisher = item.properties['publisher'].first
|
103
89
|
expect(publisher.type).to eq('http://schema.org/Organization')
|
104
90
|
expect(publisher.properties['name'].first).to eq('Random Publishing, Inc.')
|
105
|
-
end
|
106
91
|
|
107
|
-
|
108
|
-
subjects = @item.properties['about']
|
92
|
+
subjects = item.properties['about']
|
109
93
|
expect(subjects.count).to eq(3)
|
110
94
|
subject = subjects.first
|
111
95
|
expect(subject.type).to eq('http://schema.org/Thing')
|
112
96
|
expect(subject.properties['name'].first).to eq('Biology')
|
113
|
-
end
|
114
97
|
|
115
|
-
|
116
|
-
depositor = @item.properties['accountablePerson'].first
|
98
|
+
depositor = item.properties['accountablePerson'].first
|
117
99
|
expect(depositor.type).to eq('http://schema.org/Person')
|
118
100
|
expect(depositor.properties['name'].first).to eq('bob')
|
119
101
|
end
|
120
102
|
end
|
121
|
-
|
122
|
-
describe 'resource type-specific itemtypes' do
|
123
|
-
context 'when resource_type is Audio' do
|
124
|
-
it 'sets itemtype to AudioObject' do
|
125
|
-
generic_file.resource_type = ['Audio']
|
126
|
-
render template: 'generic_files/show.html.erb', layout: 'layouts/sufia-one-column'
|
127
|
-
@item = Mida::Document.new(rendered).items.first
|
128
|
-
expect(@item.type).to eq('http://schema.org/AudioObject')
|
129
|
-
end
|
130
|
-
end
|
131
|
-
context 'when resource_type is Conference Proceeding' do
|
132
|
-
it 'sets itemtype to ScholarlyArticle' do
|
133
|
-
generic_file.resource_type = ['Conference Proceeding']
|
134
|
-
render template: 'generic_files/show.html.erb', layout: 'layouts/sufia-one-column'
|
135
|
-
@item = Mida::Document.new(rendered).items.first
|
136
|
-
expect(@item.type).to eq('http://schema.org/ScholarlyArticle')
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
103
|
end
|
141
104
|
|
142
105
|
describe 'google scholar' do
|
143
|
-
|
144
|
-
before(:each) do
|
106
|
+
before do
|
145
107
|
render template: 'generic_files/show.html.erb', layout: 'layouts/sufia-one-column'
|
146
108
|
end
|
109
|
+
let(:doc) { Nokogiri::HTML(rendered) }
|
147
110
|
|
148
|
-
it '
|
149
|
-
gscholar_meta_tags =
|
111
|
+
it 'displays meta tags' do
|
112
|
+
gscholar_meta_tags = doc.xpath("//meta[contains(@name, 'citation_')]")
|
150
113
|
expect(gscholar_meta_tags.count).to eq(5)
|
151
|
-
end
|
152
114
|
|
153
|
-
|
154
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='citation_title']")
|
115
|
+
tag = doc.xpath("//meta[@name='citation_title']")
|
155
116
|
expect(tag.attribute('content').value).to eq('My Title')
|
156
|
-
end
|
157
117
|
|
158
|
-
|
159
|
-
tags = Nokogiri::HTML(rendered).xpath("//meta[@name='citation_author']")
|
118
|
+
tags = doc.xpath("//meta[@name='citation_author']")
|
160
119
|
expect(tags.first.attribute('content').value).to eq('Doe, John')
|
161
120
|
expect(tags.last.attribute('content').value).to eq('Doe, Jane')
|
162
|
-
end
|
163
121
|
|
164
|
-
|
165
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='citation_publication_date']")
|
122
|
+
tag = doc.xpath("//meta[@name='citation_publication_date']")
|
166
123
|
expect(tag.attribute('content').value).to eq('1984-01-02')
|
167
|
-
end
|
168
124
|
|
169
|
-
|
170
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='citation_pdf_url']")
|
125
|
+
tag = doc.xpath("//meta[@name='citation_pdf_url']")
|
171
126
|
expect(tag.attribute('content').value).to eq('http://test.host/downloads/123')
|
172
127
|
end
|
173
128
|
end
|
174
129
|
|
175
130
|
describe 'twitter cards' do
|
176
|
-
|
177
|
-
before(:each) do
|
131
|
+
before do
|
178
132
|
render template: 'generic_files/show.html.erb', layout: 'layouts/sufia-one-column'
|
179
133
|
end
|
134
|
+
let(:doc) { Nokogiri::HTML(rendered) }
|
180
135
|
|
181
136
|
it 'appears in meta tags' do
|
182
|
-
twitter_meta_tags =
|
137
|
+
twitter_meta_tags = doc.xpath("//meta[contains(@name, 'twitter:') or contains(@property, 'og:')]")
|
183
138
|
expect(twitter_meta_tags.count).to eq(13)
|
184
|
-
end
|
185
139
|
|
186
|
-
|
187
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:card']")
|
140
|
+
tag = doc.xpath("//meta[@name='twitter:card']")
|
188
141
|
expect(tag.attribute('content').value).to eq('product')
|
189
|
-
end
|
190
142
|
|
191
|
-
|
192
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:site']")
|
143
|
+
tag = doc.xpath("//meta[@name='twitter:site']")
|
193
144
|
expect(tag.attribute('content').value).to eq('@HydraSphere')
|
194
|
-
end
|
195
145
|
|
196
|
-
|
197
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:creator']")
|
146
|
+
tag = doc.xpath("//meta[@name='twitter:creator']")
|
198
147
|
expect(tag.attribute('content').value).to eq('@bot4lib')
|
199
|
-
end
|
200
148
|
|
201
|
-
|
202
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@property='og:site_name']")
|
149
|
+
tag = doc.xpath("//meta[@property='og:site_name']")
|
203
150
|
expect(tag.attribute('content').value).to eq('Sufia')
|
204
|
-
end
|
205
151
|
|
206
|
-
|
207
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@property='og:type']")
|
152
|
+
tag = doc.xpath("//meta[@property='og:type']")
|
208
153
|
expect(tag.attribute('content').value).to eq('object')
|
209
|
-
end
|
210
154
|
|
211
|
-
|
212
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@property='og:title']")
|
155
|
+
tag = doc.xpath("//meta[@property='og:title']")
|
213
156
|
expect(tag.attribute('content').value).to eq('My Title')
|
214
|
-
end
|
215
157
|
|
216
|
-
|
217
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@property='og:description']")
|
158
|
+
tag = doc.xpath("//meta[@property='og:description']")
|
218
159
|
expect(tag.attribute('content').value).to eq('Lorem ipsum lorem ipsum.')
|
219
|
-
end
|
220
160
|
|
221
|
-
|
222
|
-
tag
|
223
|
-
expect(tag.attribute('content').value).to eq('http://test.host/downloads/123?datastream_id=thumbnail')
|
224
|
-
end
|
161
|
+
tag = doc.xpath("//meta[@property='og:image']")
|
162
|
+
expect(tag.attribute('content').value).to eq('http://test.host/downloads/123?file=thumbnail')
|
225
163
|
|
226
|
-
|
227
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@property='og:url']")
|
164
|
+
tag = doc.xpath("//meta[@property='og:url']")
|
228
165
|
expect(tag.attribute('content').value).to eq('http://test.host/files/123')
|
229
|
-
end
|
230
166
|
|
231
|
-
|
232
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:data1']")
|
167
|
+
tag = doc.xpath("//meta[@name='twitter:data1']")
|
233
168
|
expect(tag.attribute('content').value).to eq('bacon, sausage, eggs')
|
234
|
-
end
|
235
169
|
|
236
|
-
|
237
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:label1']")
|
170
|
+
tag = doc.xpath("//meta[@name='twitter:label1']")
|
238
171
|
expect(tag.attribute('content').value).to eq('Keywords')
|
239
|
-
end
|
240
172
|
|
241
|
-
|
242
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:data2']")
|
173
|
+
tag = doc.xpath("//meta[@name='twitter:data2']")
|
243
174
|
expect(tag.attribute('content').value).to eq('http://example.org/rights/1')
|
244
|
-
end
|
245
175
|
|
246
|
-
|
247
|
-
tag = Nokogiri::HTML(rendered).xpath("//meta[@name='twitter:label2']")
|
176
|
+
tag = doc.xpath("//meta[@name='twitter:label2']")
|
248
177
|
expect(tag.attribute('content').value).to eq('Rights')
|
249
178
|
end
|
250
179
|
end
|
251
180
|
|
252
181
|
describe 'analytics' do
|
182
|
+
let(:page) { Capybara::Node::Simple.new(rendered) }
|
183
|
+
before do
|
184
|
+
Sufia.config.analytics = analytics
|
185
|
+
render
|
186
|
+
end
|
253
187
|
context 'when enabled' do
|
254
|
-
|
255
|
-
Sufia.config.analytics = true
|
256
|
-
end
|
188
|
+
let(:analytics) { true }
|
257
189
|
|
258
190
|
it 'appears on page' do
|
259
|
-
render
|
260
|
-
page = Capybara::Node::Simple.new(rendered)
|
261
191
|
expect(page).to have_selector('a#stats', count: 1)
|
262
192
|
end
|
263
193
|
end
|
264
194
|
|
265
195
|
context 'when disabled' do
|
266
|
-
|
267
|
-
Sufia.config.analytics = false
|
268
|
-
end
|
196
|
+
let(:analytics) { false }
|
269
197
|
|
270
198
|
it 'does not appear on page' do
|
271
|
-
render
|
272
|
-
page = Capybara::Node::Simple.new(rendered)
|
273
199
|
expect(page).to have_no_selector('a#stats')
|
274
200
|
end
|
275
201
|
end
|
276
202
|
end
|
277
203
|
|
278
204
|
describe 'featured' do
|
205
|
+
before do
|
206
|
+
allow(generic_file).to receive(:public?).and_return(public)
|
207
|
+
render
|
208
|
+
end
|
209
|
+
let(:page) { Capybara::Node::Simple.new(rendered) }
|
210
|
+
|
279
211
|
context "public file" do
|
280
|
-
|
281
|
-
allow(generic_file).to receive(:public?).and_return(true)
|
282
|
-
end
|
212
|
+
let(:public) { true }
|
283
213
|
|
284
214
|
it "shows featured feature link for public file" do
|
285
|
-
render
|
286
|
-
page = Capybara::Node::Simple.new(rendered)
|
287
215
|
expect(page).to have_selector('a[data-behavior="feature"]', count: 1)
|
288
216
|
end
|
289
217
|
end
|
290
218
|
|
291
219
|
context "non public file" do
|
292
|
-
|
293
|
-
allow(generic_file).to receive(:public?).and_return(false)
|
294
|
-
end
|
220
|
+
let(:public) { false }
|
295
221
|
|
296
222
|
it "does not show feature link for non public file" do
|
297
|
-
render
|
298
|
-
page = Capybara::Node::Simple.new(rendered)
|
299
223
|
expect(page).to have_no_selector('a[data-behavior="feature"]', count: 1)
|
300
224
|
end
|
301
225
|
end
|
302
226
|
end
|
303
227
|
|
304
228
|
describe 'collections list' do
|
305
|
-
|
229
|
+
before do
|
230
|
+
allow(generic_file).to receive(:collections).and_return(collections)
|
231
|
+
render
|
232
|
+
end
|
306
233
|
|
234
|
+
context "when the file is not featured in any collections" do
|
235
|
+
let(:collections) { [] }
|
307
236
|
it "should display the empty message" do
|
308
|
-
render
|
309
237
|
expect(rendered).to have_text(t('sufia.file.collections_list.empty'))
|
310
238
|
end
|
311
239
|
end
|
312
240
|
|
313
241
|
context "when the file is featured in collections" do
|
314
|
-
let(:collection1)
|
315
|
-
stub_model(Collection,
|
316
|
-
title: 'collection1',
|
317
|
-
noid: '456')
|
318
|
-
}
|
319
|
-
|
320
|
-
before do
|
321
|
-
allow(generic_file).to receive(:collections).and_return([collection1])
|
322
|
-
end
|
242
|
+
let(:collections) { [stub_model(Collection, title: 'collection1', id: '456') ] }
|
323
243
|
|
324
244
|
it "should display the header and titles of collections it belongs to" do
|
325
|
-
render
|
326
245
|
expect(rendered).to have_text(t('sufia.file.collections_list.heading'))
|
327
246
|
expect(rendered).to have_text('collection1')
|
328
247
|
end
|
@@ -330,12 +249,11 @@ describe 'generic_files/show.html.erb', :type => :view do
|
|
330
249
|
end
|
331
250
|
|
332
251
|
describe 'visibility' do
|
333
|
-
|
334
|
-
|
252
|
+
before do
|
253
|
+
render
|
335
254
|
end
|
336
255
|
it "should display the visibility badge" do
|
337
|
-
|
338
|
-
expect(rendered).to include(expected)
|
256
|
+
expect(rendered).to include('<span class="label label-danger" title="'+t('sufia.visibility.private')+'">'+t('sufia.visibility.private')+'</span></a>')
|
339
257
|
end
|
340
258
|
end
|
341
259
|
|