hyrax 2.2.4 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +75 -0
- data/README.md +7 -2
- data/app/assets/javascripts/hyrax/batch_select_all.js +5 -0
- data/app/assets/stylesheets/hyrax/_forms.scss +7 -0
- data/app/assets/stylesheets/hyrax/_header.scss +4 -0
- data/app/presenters/hyrax/dashboard/user_presenter.rb +1 -1
- data/app/services/hyrax/admin_set_service.rb +12 -7
- data/app/views/_controls.html.erb +6 -6
- data/app/views/catalog/_search_form.html.erb +35 -30
- data/app/views/hyrax/batch_select/_add_button.html.erb +2 -2
- data/app/views/hyrax/dashboard/_index_partials/_current_proxy_rights.html.erb +12 -14
- data/app/views/hyrax/dashboard/_repository_growth.html.erb +30 -0
- data/app/views/hyrax/dashboard/_repository_objects.html.erb +28 -0
- data/app/views/hyrax/dashboard/_sidebar.html.erb +17 -15
- data/app/views/hyrax/dashboard/_user_activity.html.erb +28 -0
- data/app/views/hyrax/dashboard/show_admin.html.erb +15 -37
- data/app/views/hyrax/dashboard/show_user.html.erb +1 -1
- data/app/views/hyrax/embargoes/_list_expired_active_embargoes.html.erb +2 -2
- data/app/views/hyrax/my/_search_form.html.erb +15 -10
- data/app/views/hyrax/my/_search_header.html.erb +2 -2
- data/config/locales/hyrax.de.yml +15 -10
- data/config/locales/hyrax.en.yml +15 -10
- data/config/locales/hyrax.es.yml +15 -10
- data/config/locales/hyrax.fr.yml +15 -10
- data/config/locales/hyrax.it.yml +15 -10
- data/config/locales/hyrax.pt-BR.yml +15 -10
- data/config/locales/hyrax.zh.yml +15 -10
- data/hyrax.gemspec +5 -1
- data/lib/hyrax/version.rb +1 -1
- data/spec/factories/generic_works.rb +2 -2
- data/spec/features/admin_spec.rb +5 -5
- data/spec/services/hyrax/admin_set_service_spec.rb +95 -46
- data/template.rb +1 -1
- metadata +34 -16
data/hyrax.gemspec
CHANGED
@@ -82,7 +82,6 @@ SUMMARY
|
|
82
82
|
# temporary pin to 2.17 due to failures caused in 2.18.0
|
83
83
|
spec.add_development_dependency "capybara", '~> 2.4', '< 2.18.0'
|
84
84
|
spec.add_development_dependency 'capybara-maleficent', '~> 0.2'
|
85
|
-
spec.add_development_dependency "chromedriver-helper"
|
86
85
|
spec.add_development_dependency 'database_cleaner', '~> 1.3'
|
87
86
|
spec.add_development_dependency 'engine_cart', '~> 2.0'
|
88
87
|
spec.add_development_dependency "equivalent-xml", '~> 0.5'
|
@@ -94,6 +93,7 @@ SUMMARY
|
|
94
93
|
spec.add_development_dependency 'rspec-activemodel-mocks', '~> 1.0'
|
95
94
|
spec.add_development_dependency 'rspec-its', '~> 1.1'
|
96
95
|
spec.add_development_dependency 'rspec-rails', '~> 3.1'
|
96
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
97
97
|
spec.add_development_dependency "selenium-webdriver"
|
98
98
|
spec.add_development_dependency 'solr_wrapper', '>= 1.1', '< 3.0'
|
99
99
|
spec.add_development_dependency 'i18n-debug' if ENV['I18N_DEBUG']
|
@@ -111,4 +111,8 @@ SUMMARY
|
|
111
111
|
# simple_form 3.5.1 broke hydra-editor for certain model types;
|
112
112
|
# see: https://github.com/plataformatec/simple_form/issues/1549
|
113
113
|
spec.add_dependency 'simple_form', '~> 3.2', '<= 3.5.0'
|
114
|
+
# chromedriver-helper 2.0 broke the chromedriver used by capybara
|
115
|
+
# see: https://github.com/flavorjones/chromedriver-helper/issues/62
|
116
|
+
# and https://github.com/flavorjones/chromedriver-helper/issues/57
|
117
|
+
spec.add_development_dependency 'chromedriver-helper', '< 2.0'
|
114
118
|
end
|
data/lib/hyrax/version.rb
CHANGED
@@ -23,7 +23,6 @@ FactoryBot.define do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
title { ["Test title"] }
|
26
|
-
visibility { Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE }
|
27
26
|
|
28
27
|
after(:build) do |work, evaluator|
|
29
28
|
work.apply_depositor_metadata(evaluator.user.user_key)
|
@@ -36,7 +35,8 @@ FactoryBot.define do
|
|
36
35
|
end
|
37
36
|
|
38
37
|
factory :private_work do
|
39
|
-
|
38
|
+
# private is default
|
39
|
+
# visibility { Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE }
|
40
40
|
end
|
41
41
|
|
42
42
|
factory :registered_generic_work do
|
data/spec/features/admin_spec.rb
CHANGED
@@ -12,12 +12,12 @@ RSpec.describe "The admin dashboard", :clean_repo do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
before do
|
15
|
-
create(:
|
16
|
-
create(:
|
17
|
-
create(:
|
15
|
+
create(:work_with_files, title: ["Work A"], admin_set_id: admin_set_1.id, edit_users: [user])
|
16
|
+
create(:work_with_one_file, title: ["Work B"], admin_set_id: admin_set_2.id, edit_users: [user])
|
17
|
+
create(:work_with_file_and_work, title: ["Work C"], admin_set_id: admin_set_2.id, edit_users: [user])
|
18
18
|
end
|
19
19
|
|
20
|
-
it do
|
20
|
+
it 'renders the counts of Works and Files in all AdminSets' do
|
21
21
|
login_as(user, scope: :user)
|
22
22
|
visit '/dashboard'
|
23
23
|
|
@@ -25,6 +25,6 @@ RSpec.describe "The admin dashboard", :clean_repo do
|
|
25
25
|
expect(find('tr', text: 'First Admin Set').find('td:eq(3)')).to have_content(2)
|
26
26
|
|
27
27
|
expect(find('tr', text: 'Second Admin Set').find('td:eq(2)')).to have_content(2)
|
28
|
-
expect(find('tr', text: 'Second Admin Set').find('td:eq(3)')).to have_content(
|
28
|
+
expect(find('tr', text: 'Second Admin Set').find('td:eq(3)')).to have_content(2)
|
29
29
|
end
|
30
30
|
end
|
@@ -51,71 +51,120 @@ RSpec.describe Hyrax::AdminSetService do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
describe '#search_results_with_work_count' do
|
54
|
+
describe '#search_results_with_work_count', :clean_repo do
|
55
55
|
subject { service.search_results_with_work_count(access) }
|
56
56
|
|
57
|
-
let(:
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
let(:admin_set_attrs) do
|
58
|
+
[
|
59
|
+
{ id: 'admin_set_1' },
|
60
|
+
{ id: 'admin_set_2' },
|
61
|
+
{ id: 'admin_set_3' }
|
62
|
+
]
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:file_set_attrs) do
|
65
66
|
[
|
66
|
-
{
|
67
|
-
|
68
|
-
|
69
|
-
},
|
70
|
-
{
|
71
|
-
|
72
|
-
|
73
|
-
}
|
67
|
+
{ id: 'file_1', has_model_ssim: 'FileSet' },
|
68
|
+
{ id: 'file_2', has_model_ssim: 'FileSet' },
|
69
|
+
{ id: 'file_3', has_model_ssim: 'FileSet' },
|
70
|
+
{ id: 'file_4', has_model_ssim: 'FileSet' },
|
71
|
+
{ id: 'file_5', has_model_ssim: 'FileSet' },
|
72
|
+
{ id: 'file_6', has_model_ssim: 'FileSet' },
|
73
|
+
{ id: 'file_7', has_model_ssim: 'FileSet' },
|
74
|
+
{ id: 'file_8', has_model_ssim: 'FileSet' },
|
75
|
+
{ id: 'file_9', has_model_ssim: 'FileSet' },
|
76
|
+
{ id: 'file_10', has_model_ssim: 'FileSet' },
|
77
|
+
{ id: 'file_11', has_model_ssim: 'FileSet' }
|
74
78
|
]
|
75
79
|
end
|
76
80
|
|
77
|
-
let(:
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
let(:work1_attrs) { { id: 'work_1' } }
|
82
|
+
let(:work2_attrs) { { id: 'work_2' } }
|
83
|
+
let(:work3_attrs) { { id: 'work_3' } }
|
84
|
+
let(:work4_attrs) { { id: 'work_4' } }
|
85
|
+
let(:work5_attrs) { { id: 'work_5' } }
|
86
|
+
let(:work6_attrs) { { id: 'work_6' } }
|
87
|
+
let(:work7_attrs) { { id: 'work_7' } }
|
88
|
+
let(:work8_attrs) { { id: 'work_8' } }
|
89
|
+
let(:work9_attrs) { { id: 'work_9' } }
|
90
|
+
let(:work10_attrs) { { id: 'work_10' } }
|
91
|
+
let(:work11_attrs) { { id: 'work_11' } }
|
92
|
+
|
93
|
+
let(:work_attrs) { [work1_attrs, work2_attrs, work3_attrs, work4_attrs, work5_attrs, work6_attrs, work7_attrs, work8_attrs, work9_attrs, work10_attrs, work11_attrs] }
|
94
|
+
|
95
|
+
let(:works) do
|
96
|
+
[].tap do |result|
|
97
|
+
work_attrs.each do |work|
|
98
|
+
result << SolrDocument.new(work)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
let(:admin_sets) do
|
104
|
+
[].tap do |result|
|
105
|
+
admin_set_attrs.each do |admin_set|
|
106
|
+
result << SolrDocument.new(admin_set)
|
107
|
+
end
|
108
|
+
end
|
88
109
|
end
|
89
110
|
|
111
|
+
let(:file_sets) do
|
112
|
+
[].tap do |result|
|
113
|
+
file_set_attrs.each do |file_set|
|
114
|
+
result << SolrDocument.new(file_set)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
let(:access) { :read }
|
90
120
|
let(:struct) { described_class::SearchResultForWorkCount }
|
91
121
|
|
92
122
|
before do
|
93
|
-
allow(service).to receive(:search_results).and_return(
|
94
|
-
|
95
|
-
|
96
|
-
|
123
|
+
allow(service).to receive(:search_results).and_return(admin_sets)
|
124
|
+
all_objects = []
|
125
|
+
all_objects << works << admin_sets << file_sets
|
126
|
+
all_objects.each do |obj|
|
127
|
+
ActiveFedora::SolrService.add(obj)
|
128
|
+
end
|
129
|
+
ActiveFedora::SolrService.commit
|
97
130
|
end
|
98
131
|
|
99
|
-
context "when there are works in the admin set" do
|
100
|
-
|
101
|
-
|
132
|
+
context "when there are works and files in the admin set" do
|
133
|
+
let(:work1_attrs) { { id: 'work_1', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_1', 'file_3', 'file_4'] } }
|
134
|
+
let(:work2_attrs) { { id: 'work_2', isPartOf_ssim: 'admin_set_2', file_set_ids_ssim: ['file_2'] } }
|
135
|
+
let(:work3_attrs) { { id: 'work_3', isPartOf_ssim: 'admin_set_2', file_set_ids_ssim: ['file_6', 'file_7'] } }
|
136
|
+
let(:work4_attrs) { { id: 'work_4', isPartOf_ssim: 'admin_set_3', file_set_ids_ssim: ['file_8'] } }
|
137
|
+
|
138
|
+
it "returns rows with document in the first column, count of works in second column and count of files in the third column" do
|
139
|
+
expect(subject).to eq [struct.new(admin_sets[0], 1, 3), struct.new(admin_sets[1], 2, 3), struct.new(admin_sets[2], 1, 1)]
|
102
140
|
end
|
103
141
|
end
|
104
142
|
|
105
143
|
context "when there are no files in the admin set" do
|
106
|
-
let(:
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
'isPartOf_ssim' => ['xyz123', 'yyx123']
|
113
|
-
}
|
114
|
-
]
|
144
|
+
let(:work1_attrs) { { id: 'work_1', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: [] } }
|
145
|
+
let(:work2_attrs) { { id: 'work_2', isPartOf_ssim: 'admin_set_2', file_set_ids_ssim: [] } }
|
146
|
+
let(:work3_attrs) { { id: 'work_3', isPartOf_ssim: 'admin_set_2', file_set_ids_ssim: [] } }
|
147
|
+
|
148
|
+
it "returns rows with document in the first column, count of works in second column and count of no files in the third column" do
|
149
|
+
expect(subject).to eq [struct.new(admin_sets[0], 1, 0), struct.new(admin_sets[1], 2, 0), struct.new(admin_sets[2], 0, 0)]
|
115
150
|
end
|
151
|
+
end
|
116
152
|
|
117
|
-
|
118
|
-
|
153
|
+
context "when there are more than 10 works in the admin set" do
|
154
|
+
let(:work1_attrs) { { id: 'work_1', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_1'] } }
|
155
|
+
let(:work2_attrs) { { id: 'work_2', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_2'] } }
|
156
|
+
let(:work3_attrs) { { id: 'work_3', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_3'] } }
|
157
|
+
let(:work4_attrs) { { id: 'work_4', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_4'] } }
|
158
|
+
let(:work5_attrs) { { id: 'work_5', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_5'] } }
|
159
|
+
let(:work6_attrs) { { id: 'work_6', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_6'] } }
|
160
|
+
let(:work7_attrs) { { id: 'work_7', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_7'] } }
|
161
|
+
let(:work8_attrs) { { id: 'work_8', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_8'] } }
|
162
|
+
let(:work9_attrs) { { id: 'work_9', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_9'] } }
|
163
|
+
let(:work10_attrs) { { id: 'work_10', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_10'] } }
|
164
|
+
let(:work11_attrs) { { id: 'work_11', isPartOf_ssim: 'admin_set_1', file_set_ids_ssim: ['file_11'] } }
|
165
|
+
|
166
|
+
it "returns rows with document in the first column, count of works in second column and count of files in the third column" do
|
167
|
+
expect(subject).to eq [struct.new(admin_sets[0], 11, 11), struct.new(admin_sets[1], 0, 0), struct.new(admin_sets[2], 0, 0)]
|
119
168
|
end
|
120
169
|
end
|
121
170
|
end
|
data/template.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2018-09-
|
17
|
+
date: 2018-09-19 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: rails
|
@@ -716,20 +716,6 @@ dependencies:
|
|
716
716
|
- - "~>"
|
717
717
|
- !ruby/object:Gem::Version
|
718
718
|
version: '0.2'
|
719
|
-
- !ruby/object:Gem::Dependency
|
720
|
-
name: chromedriver-helper
|
721
|
-
requirement: !ruby/object:Gem::Requirement
|
722
|
-
requirements:
|
723
|
-
- - ">="
|
724
|
-
- !ruby/object:Gem::Version
|
725
|
-
version: '0'
|
726
|
-
type: :development
|
727
|
-
prerelease: false
|
728
|
-
version_requirements: !ruby/object:Gem::Requirement
|
729
|
-
requirements:
|
730
|
-
- - ">="
|
731
|
-
- !ruby/object:Gem::Version
|
732
|
-
version: '0'
|
733
719
|
- !ruby/object:Gem::Dependency
|
734
720
|
name: database_cleaner
|
735
721
|
requirement: !ruby/object:Gem::Requirement
|
@@ -902,6 +888,20 @@ dependencies:
|
|
902
888
|
- - "~>"
|
903
889
|
- !ruby/object:Gem::Version
|
904
890
|
version: '3.1'
|
891
|
+
- !ruby/object:Gem::Dependency
|
892
|
+
name: rspec_junit_formatter
|
893
|
+
requirement: !ruby/object:Gem::Requirement
|
894
|
+
requirements:
|
895
|
+
- - ">="
|
896
|
+
- !ruby/object:Gem::Version
|
897
|
+
version: '0'
|
898
|
+
type: :development
|
899
|
+
prerelease: false
|
900
|
+
version_requirements: !ruby/object:Gem::Requirement
|
901
|
+
requirements:
|
902
|
+
- - ">="
|
903
|
+
- !ruby/object:Gem::Version
|
904
|
+
version: '0'
|
905
905
|
- !ruby/object:Gem::Dependency
|
906
906
|
name: selenium-webdriver
|
907
907
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1040,6 +1040,20 @@ dependencies:
|
|
1040
1040
|
- - "<="
|
1041
1041
|
- !ruby/object:Gem::Version
|
1042
1042
|
version: 3.5.0
|
1043
|
+
- !ruby/object:Gem::Dependency
|
1044
|
+
name: chromedriver-helper
|
1045
|
+
requirement: !ruby/object:Gem::Requirement
|
1046
|
+
requirements:
|
1047
|
+
- - "<"
|
1048
|
+
- !ruby/object:Gem::Version
|
1049
|
+
version: '2.0'
|
1050
|
+
type: :development
|
1051
|
+
prerelease: false
|
1052
|
+
version_requirements: !ruby/object:Gem::Requirement
|
1053
|
+
requirements:
|
1054
|
+
- - "<"
|
1055
|
+
- !ruby/object:Gem::Version
|
1056
|
+
version: '2.0'
|
1043
1057
|
description: Hyrax is a featureful Samvera front-end based on the latest and greatest
|
1044
1058
|
Samvera software components.
|
1045
1059
|
email:
|
@@ -1054,6 +1068,7 @@ executables: []
|
|
1054
1068
|
extensions: []
|
1055
1069
|
extra_rdoc_files: []
|
1056
1070
|
files:
|
1071
|
+
- ".circleci/config.yml"
|
1057
1072
|
- ".codeclimate.yml"
|
1058
1073
|
- ".engine_cart.yml"
|
1059
1074
|
- ".eslintignore"
|
@@ -1874,7 +1889,10 @@ files:
|
|
1874
1889
|
- app/views/hyrax/dashboard/_index_partials/_current_proxy_rights.html.erb
|
1875
1890
|
- app/views/hyrax/dashboard/_index_partials/_proxy_rights.html.erb
|
1876
1891
|
- app/views/hyrax/dashboard/_index_partials/_transfers.html.erb
|
1892
|
+
- app/views/hyrax/dashboard/_repository_growth.html.erb
|
1893
|
+
- app/views/hyrax/dashboard/_repository_objects.html.erb
|
1877
1894
|
- app/views/hyrax/dashboard/_sidebar.html.erb
|
1895
|
+
- app/views/hyrax/dashboard/_user_activity.html.erb
|
1878
1896
|
- app/views/hyrax/dashboard/collections/_batch_edits_actions.html.erb
|
1879
1897
|
- app/views/hyrax/dashboard/collections/_bookmark_control.html.erb
|
1880
1898
|
- app/views/hyrax/dashboard/collections/_button_create_collection.html.erb
|