curation_concerns 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.rubocop.yml +1 -1
- data/Gemfile +18 -9
- data/VERSION +1 -1
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +1 -1
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +6 -0
- data/app/presenters/curation_concerns/work_show_presenter.rb +16 -4
- data/app/views/catalog/_action_menu_partials/_default.html.erb +30 -28
- data/app/views/collections/_form.html.erb +1 -1
- data/app/views/collections/_form_permission.html.erb +1 -1
- data/app/views/collections/_form_to_add_member.html.erb +1 -1
- data/app/views/curation_concerns/base/_attributes.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_media.html.erb +4 -0
- data/app/views/curation_concerns/base/_form_permission.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_representative.html.erb +12 -0
- data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_thumbnail.html.erb +12 -0
- data/app/views/curation_concerns/base/_show_actions.html.erb +9 -0
- data/app/views/curation_concerns/base/show.html.erb +1 -9
- data/app/views/curation_concerns/file_sets/show.html.erb +3 -3
- data/curation_concerns.gemspec +1 -1
- data/lib/curation_concerns/version.rb +1 -1
- data/spec/abilities/generic_work_abilities_spec.rb +2 -0
- data/spec/actors/curation_concerns/file_set_actor_spec.rb +50 -0
- data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +1 -1
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +16 -5
- data/spec/factories/collections.rb +1 -1
- data/spec/factories/file_sets.rb +1 -1
- data/spec/factories/generic_works.rb +8 -2
- data/spec/features/embargo_spec.rb +1 -1
- data/spec/features/lease_spec.rb +1 -1
- data/spec/features/work_generator_spec.rb +7 -7
- data/spec/indexers/generic_work_indexing_service_spec.rb +4 -2
- data/spec/jobs/create_derivatives_job_spec.rb +31 -3
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +25 -0
- data/spec/views/catalog/_action_menu_partials/_default.html.erb_spec.rb +14 -0
- metadata +12 -7
- data/app/views/curation_concerns/base/_form_representative_image.html.erb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a6a05c11364b9cc72ba7f97963f9a3c32252d17
|
4
|
+
data.tar.gz: 61ad7ed57f29b8661b302527f9c2634eef19a52d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f79451b81f8820ee146a1438136f9bb3c526be5ed1e2d50922278c841d77cfb4ec276e6a7442c7c24b8172fa368775b2a500ea9752f4a3ac63a63922a29a101e
|
7
|
+
data.tar.gz: d5cba535b0c5d4279402f0b3709b0cc333c691e49713c150ac5110077c95b5e28074c58e01f9c3f10fe2f39cd2d73fa5ecae9c27d1f9de55954746bbbdc8f682
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
--colour
|
2
|
-
--exclude-pattern
|
2
|
+
--exclude-pattern .internal_test_app/**/*
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -17,18 +17,27 @@ group :development, :test do
|
|
17
17
|
gem 'pry-byebug' unless ENV['CI']
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
|
21
|
+
# BEGIN ENGINE_CART BLOCK
|
22
|
+
# engine_cart: 0.8.0
|
23
|
+
# engine_cart stanza: 0.8.0
|
24
|
+
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
|
25
|
+
file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path(".internal_test_app", File.dirname(__FILE__)))
|
21
26
|
if File.exists?(file)
|
22
|
-
|
23
|
-
|
27
|
+
begin
|
28
|
+
eval_gemfile file
|
29
|
+
rescue Bundler::GemfileError => e
|
30
|
+
Bundler.ui.warn '[EngineCart] Skipping Rails application dependencies:'
|
31
|
+
Bundler.ui.warn e.message
|
32
|
+
end
|
24
33
|
else
|
34
|
+
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in #{file}, using placeholder dependencies"
|
25
35
|
gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
|
26
|
-
if ENV['RAILS_VERSION']
|
27
|
-
gem '
|
28
|
-
else
|
36
|
+
if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
|
37
|
+
gem 'responders', "~> 2.0"
|
29
38
|
gem 'sass-rails', ">= 5.0"
|
39
|
+
else
|
40
|
+
gem 'sass-rails', "< 5.0"
|
30
41
|
end
|
31
|
-
|
32
|
-
extra_file = File.expand_path("../spec/test_app_templates/Gemfile.extra", __FILE__)
|
33
|
-
instance_eval File.read(extra_file)
|
34
42
|
end
|
43
|
+
# END ENGINE_CART BLOCK
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -127,7 +127,7 @@ module CurationConcerns::CurationConcernController
|
|
127
127
|
|
128
128
|
def after_update_response
|
129
129
|
# TODO: visibility or lease/embargo status
|
130
|
-
if actor.visibility_changed?
|
130
|
+
if actor.visibility_changed? && curation_concern.file_sets.present?
|
131
131
|
redirect_to main_app.confirm_curation_concerns_permission_path(curation_concern)
|
132
132
|
else
|
133
133
|
respond_to do |wants|
|
@@ -157,6 +157,12 @@ module CurationConcerns
|
|
157
157
|
@_prefixes ||= super + ['curation_concerns/base']
|
158
158
|
end
|
159
159
|
|
160
|
+
def json_error(error, name = nil, additional_arguments = {})
|
161
|
+
args = { error: error }
|
162
|
+
args[:name] = name if name
|
163
|
+
render additional_arguments.merge(json: [args])
|
164
|
+
end
|
165
|
+
|
160
166
|
def empty_file?(file)
|
161
167
|
(file.respond_to?(:tempfile) && file.tempfile.size == 0) || (file.respond_to?(:size) && file.size == 0)
|
162
168
|
end
|
@@ -24,10 +24,22 @@ module CurationConcerns
|
|
24
24
|
:embargo_release_date, :lease_expiration_date, :rights, to: :solr_document
|
25
25
|
|
26
26
|
def file_presenters
|
27
|
-
@file_sets ||=
|
28
|
-
|
29
|
-
|
30
|
-
end
|
27
|
+
@file_sets ||= PresenterFactory.build_presenters(ordered_ids,
|
28
|
+
file_presenter_class,
|
29
|
+
current_ability)
|
31
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# TODO: Extract this to ActiveFedora::Aggregations::ListSource
|
35
|
+
def ordered_ids
|
36
|
+
ActiveFedora::SolrService.query("proxy_in_ssi:#{id}", fl: "ordered_targets_ssim")
|
37
|
+
.flat_map { |x| x.fetch("ordered_targets_ssim", []) }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Override this method if you want to use an alternate presenter class for the files
|
41
|
+
def file_presenter_class
|
42
|
+
FileSetPresenter
|
43
|
+
end
|
32
44
|
end
|
33
45
|
end
|
@@ -1,29 +1,31 @@
|
|
1
|
-
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
</li>
|
9
|
-
<li>
|
10
|
-
<% if @collection || (@presenter and @presenter.collection?) # We're on the view page for @collection. -%>
|
11
|
-
<%= link_to_remove_from_collection(document) %>
|
12
|
-
<% else %>
|
13
|
-
<%= link_to [:curation_concerns, document], class: 'itemicon itemtrash',
|
14
|
-
title: "Delete #{document.human_readable_type}", method: :delete,
|
15
|
-
data: {
|
16
|
-
confirm: "Deleting a #{document.human_readable_type} from #{t('curation_concerns.product_name')} is permanent. Click OK to delete this #{document.human_readable_type} from #{t('curation_concerns.product_name')}, or Cancel to cancel this operation" } do %>
|
17
|
-
<i class="glyphicon glyphicon-trash"></i> Delete <%= document.human_readable_type %>
|
1
|
+
<% if can?(:edit, document) || can?(:collect, document) %>
|
2
|
+
<div class="btn-group">
|
3
|
+
<button class="btn btn-default btn-small dropdown-toggle" data-toggle="dropdown" href="#">Select an action <span class="caret"></span></button>
|
4
|
+
<ul class="dropdown-menu">
|
5
|
+
<% if can? :edit, document %>
|
6
|
+
<li>
|
7
|
+
<%= link_to [:edit, :curation_concerns, document], class: 'itemicon itemedit' do %><i class="glyphicon glyphicon-pencil"></i> Edit <%= document.human_readable_type %>
|
18
8
|
<% end %>
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
9
|
+
</li>
|
10
|
+
<li>
|
11
|
+
<% if @collection || (@presenter and @presenter.collection?) # We're on the view page for @collection. -%>
|
12
|
+
<%= link_to_remove_from_collection(document) %>
|
13
|
+
<% else %>
|
14
|
+
<%= link_to [:curation_concerns, document], class: 'itemicon itemtrash',
|
15
|
+
title: "Delete #{document.human_readable_type}", method: :delete,
|
16
|
+
data: {
|
17
|
+
confirm: "Deleting a #{document.human_readable_type} from #{t('curation_concerns.product_name')} is permanent. Click OK to delete this #{document.human_readable_type} from #{t('curation_concerns.product_name')}, or Cancel to cancel this operation" } do %>
|
18
|
+
<i class="glyphicon glyphicon-trash"></i> Delete <%= document.human_readable_type %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
</li>
|
22
|
+
<% end %>
|
23
|
+
<% if can? :collect, document %>
|
24
|
+
<li>
|
25
|
+
<%= link_to_select_collection document %>
|
26
|
+
</li>
|
27
|
+
<% end %>
|
28
|
+
</ul>
|
29
|
+
<%= render 'collections/add_to_collection_modal', collectible: document if can? :collect, document %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<%= render 'form_descriptive_fields', curation_concern: @collection, f: f %>
|
11
11
|
<%= render 'form_permission', f: f %>
|
12
12
|
|
13
|
-
<%= render "curation_concerns/base/
|
13
|
+
<%= render "curation_concerns/base/form_media", f: f %>
|
14
14
|
|
15
15
|
<div class="row">
|
16
16
|
<div class="col-md-12 form-actions">
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<div class="form-group collection_id">
|
10
10
|
<div class="controls">
|
11
11
|
<%= select_tag :id, collection_options_for_select(collectible), prompt: 'Make a Selection',
|
12
|
-
class: 'form-control', :'aria-labelledby' => select_label_id %>
|
12
|
+
class: 'form-control', :'aria-labelledby' => select_label_id, required: 'required' %>
|
13
13
|
</div>
|
14
14
|
</div>
|
15
15
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-md-12">
|
3
|
+
<fieldset id="representative-media">
|
4
|
+
<legend>
|
5
|
+
Representative Media
|
6
|
+
</legend>
|
7
|
+
<p>Select the file with media that represents this <%= f.object.human_readable_type %>.</p>
|
8
|
+
<%= f.select :representative_id, @form.select_files, {}, { class: 'form-control' } %>
|
9
|
+
</fieldset>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-md-12">
|
3
|
+
<fieldset id="representative-image">
|
4
|
+
<legend>
|
5
|
+
Thumbnail
|
6
|
+
</legend>
|
7
|
+
<p>Select the file to be used as the thumbnail for this <%= f.object.human_readable_type %>.</p>
|
8
|
+
<%= f.select :thumbnail_id, @form.select_files, {}, { class: 'form-control' } %>
|
9
|
+
</fieldset>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if collector || editor %>
|
2
|
+
<div class="form-actions">
|
3
|
+
<% if editor %>
|
4
|
+
<%= link_to "Edit This #{@presenter.human_readable_type}", edit_polymorphic_path([main_app, :curation_concerns, @presenter]), class: 'btn btn-default' %>
|
5
|
+
<%= link_to "Attach a File", main_app.new_curation_concerns_file_set_path(@presenter), class: 'btn btn-default' %>
|
6
|
+
<%= link_to "Delete This #{@presenter.human_readable_type}", [main_app, :curation_concerns, @presenter], class: 'btn btn-danger pull-right', data: { confirm: "Delete this #{@presenter.human_readable_type}?" }, method: :delete %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
@@ -13,12 +13,4 @@
|
|
13
13
|
<%= render partial: 'curation_concerns/file_sets/multiple_upload', presenter: @presenter %>
|
14
14
|
<% end %>
|
15
15
|
|
16
|
-
|
17
|
-
<div class="form-actions">
|
18
|
-
<% if editor %>
|
19
|
-
<%= link_to "Edit This #{@presenter.human_readable_type}", edit_polymorphic_path([main_app, :curation_concerns, @presenter]), class: 'btn btn-default' %>
|
20
|
-
<%= link_to "Attach a File", main_app.new_curation_concerns_file_set_path(@presenter), class: 'btn btn-default' %>
|
21
|
-
<%= link_to "Delete This #{@presenter.human_readable_type}", [main_app, :curation_concerns, @presenter], class: 'btn btn-danger pull-right', data: { confirm: "Delete this #{@presenter.human_readable_type}?" }, method: :delete %>
|
22
|
-
<% end %>
|
23
|
-
</div>
|
24
|
-
<% end %>
|
16
|
+
<%= render "show_actions", collector: collector, editor: editor%>
|
@@ -6,10 +6,10 @@
|
|
6
6
|
<%= render "attributes", curation_concern: @presenter %>
|
7
7
|
|
8
8
|
<div class="form-actions">
|
9
|
-
<%= link_to "Download this File", main_app.download_path(@presenter), class: 'btn btn-
|
9
|
+
<%= link_to "Download this File", main_app.download_path(@presenter), class: 'btn btn-default' %>
|
10
10
|
<% if can? :edit, @presenter.id %>
|
11
|
-
<%= link_to "Edit this File", edit_polymorphic_path([main_app, :curation_concerns, @presenter]), class: 'btn btn-
|
11
|
+
<%= link_to "Edit this File", edit_polymorphic_path([main_app, :curation_concerns, @presenter]), class: 'btn btn-default' %>
|
12
12
|
<% end %>
|
13
13
|
|
14
|
-
<%= link_to "Back to #{parent.human_readable_type}", parent_path(parent), class: 'btn btn-
|
14
|
+
<%= link_to "Back to #{parent.human_readable_type}", parent_path(parent), class: 'btn btn-default' %>
|
15
15
|
</div>
|
data/curation_concerns.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency "devise", "~> 3.0"
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.6"
|
32
32
|
spec.add_development_dependency "rake"
|
33
|
-
spec.add_development_dependency "engine_cart", "~> 0.
|
33
|
+
spec.add_development_dependency "engine_cart", "~> 0.8"
|
34
34
|
spec.add_development_dependency "sqlite3"
|
35
35
|
spec.add_development_dependency "rspec-its"
|
36
36
|
spec.add_development_dependency "rspec-rails"
|
@@ -40,6 +40,7 @@ describe 'User' do
|
|
40
40
|
should_not be_able_to(:read, generic_work)
|
41
41
|
should_not be_able_to(:update, generic_work)
|
42
42
|
should_not be_able_to(:destroy, generic_work)
|
43
|
+
should be_able_to(:collect, generic_work)
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -51,6 +52,7 @@ describe 'User' do
|
|
51
52
|
should_not be_able_to(:read, generic_work)
|
52
53
|
should_not be_able_to(:update, generic_work)
|
53
54
|
should_not be_able_to(:destroy, generic_work)
|
55
|
+
should_not be_able_to(:collect, generic_work)
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|
@@ -177,4 +177,54 @@ describe CurationConcerns::FileSetActor do
|
|
177
177
|
expect(work_v1.members.size).to eq 3
|
178
178
|
end
|
179
179
|
end
|
180
|
+
|
181
|
+
describe "#set_representative" do
|
182
|
+
let!(:work) { build(:generic_work, representative: rep) }
|
183
|
+
let!(:file_set) { build(:file_set) }
|
184
|
+
|
185
|
+
before do
|
186
|
+
actor.send(:set_representative, work, file_set)
|
187
|
+
end
|
188
|
+
|
189
|
+
context "when the representative isn't set" do
|
190
|
+
let(:rep) { nil }
|
191
|
+
|
192
|
+
it 'sets the representative' do
|
193
|
+
expect(work.representative).to eq file_set
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
context 'when the representative is already set' do
|
198
|
+
let(:rep) { build(:file_set, id: '123') }
|
199
|
+
|
200
|
+
it 'keeps the existing representative' do
|
201
|
+
expect(work.representative).to eq rep
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
describe "#set_thumbnail" do
|
207
|
+
let!(:work) { build(:generic_work, thumbnail: thumb) }
|
208
|
+
let!(:file_set) { build(:file_set) }
|
209
|
+
|
210
|
+
before do
|
211
|
+
actor.send(:set_thumbnail, work, file_set)
|
212
|
+
end
|
213
|
+
|
214
|
+
context "when the thumbnail isn't set" do
|
215
|
+
let(:thumb) { nil }
|
216
|
+
|
217
|
+
it 'sets the thumbnail' do
|
218
|
+
expect(work.thumbnail).to eq file_set
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'when the thumbnail is already set' do
|
223
|
+
let(:thumb) { build(:file_set, id: '123') }
|
224
|
+
|
225
|
+
it 'keeps the existing thumbnail' do
|
226
|
+
expect(work.thumbnail).to eq thumb
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
180
230
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
# This tests the CurationConcerns::CurationConcernController module
|
4
|
-
# which is included into
|
4
|
+
# which is included into .internal_test_app/app/controllers/generic_works_controller.rb
|
5
5
|
describe CurationConcerns::GenericWorksController do
|
6
6
|
let(:user) { create(:user) }
|
7
7
|
before { sign_in user }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
# This tests the CurationConcerns::CurationConcernController module
|
4
|
-
# which is included into
|
4
|
+
# which is included into .internal_test_app/app/controllers/generic_works_controller.rb
|
5
5
|
describe CurationConcerns::GenericWorksController do
|
6
6
|
let(:user) { create(:user) }
|
7
7
|
before { sign_in user }
|
@@ -100,7 +100,7 @@ describe CurationConcerns::GenericWorksController do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
describe '#update' do
|
103
|
-
let(:a_work) {
|
103
|
+
let(:a_work) { create(:private_generic_work, user: user) }
|
104
104
|
before do
|
105
105
|
allow(controller).to receive(:actor).and_return(actor)
|
106
106
|
end
|
@@ -114,9 +114,20 @@ describe CurationConcerns::GenericWorksController do
|
|
114
114
|
describe 'changing rights' do
|
115
115
|
let(:actor) { double(update: true, visibility_changed?: true) }
|
116
116
|
|
117
|
-
|
118
|
-
|
119
|
-
|
117
|
+
context 'when there are children' do
|
118
|
+
let(:a_work) { create(:work_with_one_file, user: user) }
|
119
|
+
|
120
|
+
it 'prompts to change the files access' do
|
121
|
+
patch :update, id: a_work
|
122
|
+
expect(response).to redirect_to main_app.confirm_curation_concerns_permission_path(controller.curation_concern)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'without children' do
|
127
|
+
it "doesn't prompt to change the files access" do
|
128
|
+
patch :update, id: a_work
|
129
|
+
expect(response).to redirect_to main_app.curation_concerns_generic_work_path(a_work)
|
130
|
+
end
|
120
131
|
end
|
121
132
|
end
|
122
133
|
|
data/spec/factories/file_sets.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
FactoryGirl.define do
|
2
|
-
# The ::GenericWork model is defined in
|
3
|
-
# curation_concerns:
|
2
|
+
# The ::GenericWork model is defined in .internal_test_app/app/models by the
|
3
|
+
# curation_concerns:test_app generator.
|
4
4
|
factory :generic_work, aliases: [:work, :private_generic_work], class: GenericWork do
|
5
5
|
transient do
|
6
6
|
user { FactoryGirl.create(:user) }
|
@@ -26,6 +26,12 @@ FactoryGirl.define do
|
|
26
26
|
factory :work_with_files do
|
27
27
|
before(:create) { |work, evaluator| 2.times { work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user) } }
|
28
28
|
end
|
29
|
+
factory :work_with_ordered_files do
|
30
|
+
before(:create) do |work, evaluator|
|
31
|
+
work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user)
|
32
|
+
work.ordered_member_proxies.insert_target_at(0, FactoryGirl.create(:file_set, user: evaluator.user))
|
33
|
+
end
|
34
|
+
end
|
29
35
|
|
30
36
|
factory :with_embargo_date do
|
31
37
|
transient do
|
@@ -34,7 +34,7 @@ describe 'embargo' do
|
|
34
34
|
fill_in 'until', with: later_future_date.to_s
|
35
35
|
|
36
36
|
click_button 'Update Embargo'
|
37
|
-
expect(page).to have_content(later_future_date.
|
37
|
+
expect(page).to have_content(later_future_date.iso8601)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/spec/features/lease_spec.rb
CHANGED
@@ -31,7 +31,7 @@ describe 'leases' do
|
|
31
31
|
fill_in 'until', with: later_future_date.to_s
|
32
32
|
|
33
33
|
click_button 'Update Lease'
|
34
|
-
expect(page).to have_content(later_future_date.
|
34
|
+
expect(page).to have_content(later_future_date.iso8601) # new lease date is displayed in message
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -14,13 +14,13 @@ describe 'Creating a new Work' do
|
|
14
14
|
|
15
15
|
before do
|
16
16
|
Rails::Generators.invoke('curation_concerns:work', ['Catapult'], destination_root: Rails.root)
|
17
|
-
load
|
18
|
-
load
|
19
|
-
load
|
20
|
-
load
|
21
|
-
load
|
22
|
-
load
|
23
|
-
load
|
17
|
+
load "#{EngineCart.destination}/app/models/catapult.rb"
|
18
|
+
load "#{EngineCart.destination}/app/controllers/curation_concerns/catapults_controller.rb"
|
19
|
+
load "#{EngineCart.destination}/app/actors/curation_concerns/catapult_actor.rb"
|
20
|
+
load "#{EngineCart.destination}/app/forms/curation_concerns/catapult_form.rb"
|
21
|
+
load "#{EngineCart.destination}/config/initializers/curation_concerns.rb"
|
22
|
+
load "#{EngineCart.destination}/config/routes.rb"
|
23
|
+
load "app/helpers/curation_concerns/url_helper.rb"
|
24
24
|
sign_in user
|
25
25
|
|
26
26
|
# stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
|
@@ -4,18 +4,20 @@ describe CurationConcerns::WorkIndexingService do
|
|
4
4
|
# TODO: file_set_ids returns an empty set unless you persist the work
|
5
5
|
let(:user) { create(:user) }
|
6
6
|
let!(:generic_work) { create(:work_with_one_file, user: user) }
|
7
|
+
let!(:child_work) { create(:generic_work, user: user) }
|
7
8
|
let(:service) { described_class.new(generic_work) }
|
8
9
|
let(:file) { generic_work.file_sets.first }
|
9
10
|
|
10
11
|
before do
|
12
|
+
generic_work.works << child_work
|
11
13
|
allow(CurationConcerns::ThumbnailPathService).to receive(:call).and_return("/downloads/#{file.id}?file=thumbnail")
|
12
14
|
generic_work.representative_id = file.id
|
13
15
|
end
|
14
16
|
|
15
17
|
subject { service.generate_solr_document }
|
16
18
|
|
17
|
-
it 'indexes
|
18
|
-
expect(subject['
|
19
|
+
it 'indexes member work and file_set ids' do
|
20
|
+
expect(subject['member_ids_ssim']).to eq generic_work.member_ids
|
19
21
|
expect(subject['generic_type_sim']).to eq ['Work']
|
20
22
|
expect(subject.fetch('thumbnail_path_ss')).to eq "/downloads/#{file.id}?file=thumbnail"
|
21
23
|
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe CurationConcerns::CreateDerivativesJob do
|
4
|
+
let(:id) { '123' }
|
5
|
+
|
4
6
|
before do
|
5
7
|
@ffmpeg_enabled = CurationConcerns.config.enable_ffmpeg
|
6
8
|
CurationConcerns.config.enable_ffmpeg = true
|
7
|
-
allow(ActiveFedora::Base).to receive(:find).with(
|
9
|
+
allow(ActiveFedora::Base).to receive(:find).with(id).and_return(file_set)
|
8
10
|
allow(file_set).to receive(:mime_type).and_return('audio/x-wav')
|
9
|
-
allow(file_set).to receive(:id).and_return(
|
11
|
+
allow(file_set).to receive(:id).and_return(id)
|
10
12
|
end
|
11
13
|
|
12
14
|
let(:file_set) { FileSet.new }
|
@@ -19,7 +21,33 @@ describe CurationConcerns::CreateDerivativesJob do
|
|
19
21
|
it 'calls create_derivatives and save on a file set' do
|
20
22
|
expect(Hydra::Derivatives::AudioDerivatives).to receive(:create)
|
21
23
|
expect(file_set).to receive(:update_index)
|
22
|
-
CreateDerivativesJob.perform_now(
|
24
|
+
CreateDerivativesJob.perform_now(id, 'spec/fixtures/piano_note.wav')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with a parent object' do
|
29
|
+
before do
|
30
|
+
allow(file_set).to receive(:parent).and_return(parent)
|
31
|
+
# Stub out the actual derivative creation
|
32
|
+
expect(file_set).to receive(:create_derivatives)
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when the file_set is the thumbnail of the parent' do
|
36
|
+
let(:parent) { GenericWork.new(thumbnail_id: id) }
|
37
|
+
|
38
|
+
it 'updates the index of the parent object' do
|
39
|
+
expect(parent).to receive(:update_index)
|
40
|
+
CreateDerivativesJob.perform_now(id, 'spec/fixtures/piano_note.wav')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when the file_set isn't the parent's thumbnail" do
|
45
|
+
let(:parent) { GenericWork.new }
|
46
|
+
|
47
|
+
it "doesn't update the parent's index" do
|
48
|
+
expect(parent).to_not receive(:update_index)
|
49
|
+
CreateDerivativesJob.perform_now(id, 'spec/fixtures/piano_note.wav')
|
50
|
+
end
|
23
51
|
end
|
24
52
|
end
|
25
53
|
end
|
@@ -32,4 +32,29 @@ describe CurationConcerns::WorkShowPresenter do
|
|
32
32
|
presenter.permission_badge
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
describe "#file_presenters" do
|
37
|
+
let(:obj) { create(:work_with_ordered_files) }
|
38
|
+
let(:attributes) { obj.to_solr }
|
39
|
+
|
40
|
+
it "displays them in order" do
|
41
|
+
expect(obj.ordered_member_ids).not_to eq obj.member_ids
|
42
|
+
expect(presenter.file_presenters.map(&:id)).to eq obj.ordered_member_ids
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "getting presenters from factory" do
|
46
|
+
let(:attributes) { {} }
|
47
|
+
let(:presenter_class) { double }
|
48
|
+
before do
|
49
|
+
allow(presenter).to receive(:file_presenter_class).and_return(presenter_class)
|
50
|
+
allow(presenter).to receive(:ordered_ids).and_return(['12', '33'])
|
51
|
+
end
|
52
|
+
|
53
|
+
it "uses the set class" do
|
54
|
+
expect(CurationConcerns::PresenterFactory).to receive(:build_presenters)
|
55
|
+
.with(['12', '33'], presenter_class, ability)
|
56
|
+
presenter.file_presenters
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
35
60
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'catalog/_action_menu_partials/_default.html.erb' do
|
4
|
+
let(:document) { double }
|
5
|
+
subject { rendered }
|
6
|
+
|
7
|
+
context "when neither a editor or a collector" do
|
8
|
+
before do
|
9
|
+
allow(view).to receive(:can?).and_return(false)
|
10
|
+
render 'catalog/_action_menu_partials/default.html.erb', document: document
|
11
|
+
end
|
12
|
+
it { is_expected.to eq '' }
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curation_concerns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-11-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hydra-head
|
@@ -74,14 +74,14 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - '='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
77
|
+
version: 0.3.0
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - '='
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.
|
84
|
+
version: 0.3.0
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: hydra-editor
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,14 +164,14 @@ dependencies:
|
|
164
164
|
requirements:
|
165
165
|
- - "~>"
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version: '0.
|
167
|
+
version: '0.8'
|
168
168
|
type: :development
|
169
169
|
prerelease: false
|
170
170
|
version_requirements: !ruby/object:Gem::Requirement
|
171
171
|
requirements:
|
172
172
|
- - "~>"
|
173
173
|
- !ruby/object:Gem::Version
|
174
|
-
version: '0.
|
174
|
+
version: '0.8'
|
175
175
|
- !ruby/object:Gem::Dependency
|
176
176
|
name: sqlite3
|
177
177
|
requirement: !ruby/object:Gem::Requirement
|
@@ -471,19 +471,22 @@ files:
|
|
471
471
|
- app/views/curation_concerns/base/_form_additional_information.html.erb
|
472
472
|
- app/views/curation_concerns/base/_form_descriptive_fields.erb
|
473
473
|
- app/views/curation_concerns/base/_form_files_and_links.html.erb
|
474
|
+
- app/views/curation_concerns/base/_form_media.html.erb
|
474
475
|
- app/views/curation_concerns/base/_form_permission.html.erb
|
475
476
|
- app/views/curation_concerns/base/_form_permission_embargo.html.erb
|
476
477
|
- app/views/curation_concerns/base/_form_permission_lease.html.erb
|
477
478
|
- app/views/curation_concerns/base/_form_permission_note.html.erb
|
478
479
|
- app/views/curation_concerns/base/_form_permission_under_embargo.html.erb
|
479
480
|
- app/views/curation_concerns/base/_form_permission_under_lease.html.erb
|
480
|
-
- app/views/curation_concerns/base/
|
481
|
+
- app/views/curation_concerns/base/_form_representative.html.erb
|
481
482
|
- app/views/curation_concerns/base/_form_required_information.html.erb
|
482
483
|
- app/views/curation_concerns/base/_form_rights.html.erb
|
483
484
|
- app/views/curation_concerns/base/_form_supplementary_fields.html.erb
|
485
|
+
- app/views/curation_concerns/base/_form_thumbnail.html.erb
|
484
486
|
- app/views/curation_concerns/base/_legally_binding_text.html.erb
|
485
487
|
- app/views/curation_concerns/base/_related_files.html.erb
|
486
488
|
- app/views/curation_concerns/base/_representative_media.html.erb
|
489
|
+
- app/views/curation_concerns/base/_show_actions.html.erb
|
487
490
|
- app/views/curation_concerns/base/_versioning.html.erb
|
488
491
|
- app/views/curation_concerns/base/edit.html.erb
|
489
492
|
- app/views/curation_concerns/base/new.html.erb
|
@@ -717,6 +720,7 @@ files:
|
|
717
720
|
- spec/tasks/rake_spec.rb
|
718
721
|
- spec/test_app_templates/Gemfile.extra
|
719
722
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
723
|
+
- spec/views/catalog/_action_menu_partials/_default.html.erb_spec.rb
|
720
724
|
- spec/views/catalog/index.html.erb_spec.rb
|
721
725
|
- spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
|
722
726
|
- spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb
|
@@ -901,6 +905,7 @@ test_files:
|
|
901
905
|
- spec/tasks/rake_spec.rb
|
902
906
|
- spec/test_app_templates/Gemfile.extra
|
903
907
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
908
|
+
- spec/views/catalog/_action_menu_partials/_default.html.erb_spec.rb
|
904
909
|
- spec/views/catalog/index.html.erb_spec.rb
|
905
910
|
- spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
|
906
911
|
- spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
<% if f.object.persisted? && f.object.member_ids.present? %>
|
2
|
-
<div class="row">
|
3
|
-
<div class="col-md-12">
|
4
|
-
<fieldset id="representative-media">
|
5
|
-
<legend>
|
6
|
-
Representative Media
|
7
|
-
</legend>
|
8
|
-
<p>Select the file with media that represents this <%= f.object.human_readable_type %>.</p>
|
9
|
-
<%= f.select :representative_id, @form.select_files, {}, { class: 'form-control' } %>
|
10
|
-
</fieldset>
|
11
|
-
</div>
|
12
|
-
</div>
|
13
|
-
|
14
|
-
<div class="row">
|
15
|
-
<div class="col-md-12">
|
16
|
-
<fieldset id="representative-image">
|
17
|
-
<legend>
|
18
|
-
Thumbnail
|
19
|
-
</legend>
|
20
|
-
<p>Select the file to be used as the thumbnail for this <%= f.object.human_readable_type %>.</p>
|
21
|
-
<%= f.select :thumbnail_id, @form.select_files, {}, { class: 'form-control' } %>
|
22
|
-
</fieldset>
|
23
|
-
</div>
|
24
|
-
</div>
|
25
|
-
<% end %>
|