curation_concerns 1.7.4 → 1.7.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/actors/curation_concerns/actors/add_to_work_actor.rb +16 -4
- data/app/actors/curation_concerns/actors/apply_order_actor.rb +16 -5
- data/app/forms/curation_concerns/forms/file_manager_form.rb +1 -1
- data/app/presenters/curation_concerns/admin/workflow_role_presenter.rb +4 -0
- data/app/services/curation_concerns/workflow/permission_query.rb +4 -1
- data/app/views/curation_concerns/admin/workflow_roles/index.html.erb +1 -2
- data/app/views/curation_concerns/base/_form.html.erb +2 -0
- data/app/views/curation_concerns/base/_form_in_works_error.html.erb +3 -0
- data/app/views/curation_concerns/base/_form_ordered_members_error.html.erb +3 -0
- data/lib/curation_concerns/version.rb +1 -1
- data/spec/actors/curation_concerns/apply_order_actor_spec.rb +20 -0
- data/spec/actors/curation_concerns/work_actor_spec.rb +9 -6
- data/spec/features/create_child_work_spec.rb +16 -2
- data/spec/forms/curation_concerns/forms/file_manager_form_spec.rb +19 -0
- data/spec/views/curation_concerns/admin/workflow_roles/index.html.erb_spec.rb +33 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cbc4d586d8a888783288ea71618e421913333e2
|
4
|
+
data.tar.gz: 4ed7bc09f54922ac00db7d241938468995f898a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c4172a085ae5540b7b771e33fb1633939ed428711a0512303ebdf4936d46b26c6dd15ed8bc666260a604078d56c875a9751740fd62173a938766a8550275637
|
7
|
+
data.tar.gz: 7260137bd947008030ac1c4786c623f31398903e8cfb7b0f811b3c12ea8a0b4d7018113ddb43656f4cd4d4ea72dcb30ab3ee798e34757dcefdd318c9573ccecd
|
@@ -13,6 +13,14 @@ module CurationConcerns
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
+
def ability
|
17
|
+
::Ability.new(user)
|
18
|
+
end
|
19
|
+
|
20
|
+
def can_edit_both_works?(work)
|
21
|
+
ability.can?(:edit, work) && ability.can?(:edit, curation_concern)
|
22
|
+
end
|
23
|
+
|
16
24
|
def add_to_works(new_work_ids)
|
17
25
|
return true if new_work_ids.nil?
|
18
26
|
(curation_concern.in_works_ids - new_work_ids).each do |old_id|
|
@@ -22,13 +30,17 @@ module CurationConcerns
|
|
22
30
|
work.save
|
23
31
|
end
|
24
32
|
|
25
|
-
# add to new
|
33
|
+
# add to new so long as the depositor for the parent and child matches, otherwise inject an error
|
26
34
|
(new_work_ids - curation_concern.in_works_ids).each do |work_id|
|
27
35
|
work = ::ActiveFedora::Base.find(work_id)
|
28
|
-
work
|
29
|
-
|
36
|
+
if can_edit_both_works?(work)
|
37
|
+
work.ordered_members << curation_concern
|
38
|
+
work.save
|
39
|
+
else
|
40
|
+
curation_concern.errors[:in_works_ids] << "Works can only be related to each other if user has ability to edit both."
|
41
|
+
end
|
30
42
|
end
|
31
|
-
|
43
|
+
curation_concern.errors[:in_works_ids].empty?
|
32
44
|
end
|
33
45
|
end
|
34
46
|
end
|
@@ -3,12 +3,19 @@ module CurationConcerns
|
|
3
3
|
class ApplyOrderActor < AbstractActor
|
4
4
|
def update(attributes)
|
5
5
|
ordered_member_ids = attributes.delete(:ordered_member_ids)
|
6
|
-
sync_members(ordered_member_ids)
|
7
|
-
apply_order(ordered_member_ids) && next_actor.update(attributes)
|
6
|
+
sync_members(ordered_member_ids) && apply_order(ordered_member_ids) && next_actor.update(attributes)
|
8
7
|
end
|
9
8
|
|
10
9
|
private
|
11
10
|
|
11
|
+
def ability
|
12
|
+
::Ability.new(user)
|
13
|
+
end
|
14
|
+
|
15
|
+
def can_edit_both_works?(work)
|
16
|
+
ability.can?(:edit, work) && ability.can?(:edit, curation_concern)
|
17
|
+
end
|
18
|
+
|
12
19
|
def sync_members(ordered_member_ids)
|
13
20
|
return true if ordered_member_ids.nil?
|
14
21
|
existing_members_ids = curation_concern.ordered_member_ids
|
@@ -20,10 +27,14 @@ module CurationConcerns
|
|
20
27
|
|
21
28
|
(ordered_member_ids - existing_members_ids).each do |work_id|
|
22
29
|
work = ::ActiveFedora::Base.find(work_id)
|
23
|
-
|
30
|
+
if can_edit_both_works?(work)
|
31
|
+
curation_concern.ordered_members << work
|
32
|
+
curation_concern.save
|
33
|
+
else
|
34
|
+
curation_concern.errors[:ordered_member_ids] << "Works can only be related to each other if user has ability to edit both."
|
35
|
+
end
|
24
36
|
end
|
25
|
-
curation_concern.
|
26
|
-
true
|
37
|
+
curation_concern.errors[:ordered_member_ids].empty?
|
27
38
|
end
|
28
39
|
|
29
40
|
def apply_order(new_order)
|
@@ -16,6 +16,10 @@ module CurationConcerns
|
|
16
16
|
@agent = agent
|
17
17
|
end
|
18
18
|
|
19
|
+
def responsibilities_present?
|
20
|
+
@agent.workflow_responsibilities.any?
|
21
|
+
end
|
22
|
+
|
19
23
|
def responsibilities
|
20
24
|
@agent.workflow_responsibilities.each do |responsibility|
|
21
25
|
yield ResponsibilityPresenter.new(responsibility)
|
@@ -257,7 +257,10 @@ module CurationConcerns
|
|
257
257
|
.and(entity_responsibilities[:entity_id].eq(entity.id))
|
258
258
|
)
|
259
259
|
|
260
|
-
|
260
|
+
# PostgreSQL requires an explicit cast from string to integer
|
261
|
+
cast = Arel::Nodes::NamedFunction.new "CAST", [agent_table[:proxy_for_id].as("integer")]
|
262
|
+
|
263
|
+
sub_query_for_user = agent_table.project(cast).where(
|
261
264
|
agent_table[:id].in(workflow_agent_id_subquery)
|
262
265
|
.or(agent_table[:id].in(entity_agent_id_subquery))
|
263
266
|
).where(
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<tr>
|
12
12
|
<td><%= user.user_key %></td>
|
13
13
|
<% agent_presenter = @presenter.presenter_for(user) %>
|
14
|
-
<% if agent_presenter %>
|
14
|
+
<% if agent_presenter && agent_presenter.responsibilities_present? %>
|
15
15
|
<td>
|
16
16
|
<ul>
|
17
17
|
<% agent_presenter.responsibilities do |responsibility_presenter| %>
|
@@ -42,4 +42,3 @@
|
|
42
42
|
</div>
|
43
43
|
</div>
|
44
44
|
</div>
|
45
|
-
|
@@ -4,6 +4,8 @@
|
|
4
4
|
<div class="alert alert-danger fade in">
|
5
5
|
<strong>Wait don't go!</strong> There was a problem with your submission. Please review the errors below:
|
6
6
|
<a class="close" data-dismiss="alert" href="#">×</a>
|
7
|
+
<%= render 'form_in_works_error', f: f %>
|
8
|
+
<%= render 'form_ordered_members_error', f: f %>
|
7
9
|
</div>
|
8
10
|
<% end %>
|
9
11
|
|
@@ -78,5 +78,25 @@ describe CurationConcerns::Actors::ApplyOrderActor do
|
|
78
78
|
expect(curation_concern.ordered_member_ids.size).to eq(1)
|
79
79
|
end
|
80
80
|
end
|
81
|
+
|
82
|
+
context 'with ordered_member_ids that include a work owned by a different user' do
|
83
|
+
# set user not a non-admin for this test to ensure the actor disallows adding the child
|
84
|
+
let(:user) { create(:user) }
|
85
|
+
let(:other_user) { create(:user) }
|
86
|
+
let(:child) { create(:generic_work, user: other_user) }
|
87
|
+
let(:attributes) { { ordered_member_ids: [child.id] } }
|
88
|
+
let(:root_actor) { double }
|
89
|
+
|
90
|
+
before do
|
91
|
+
allow(CurationConcerns::Actors::RootActor).to receive(:new).and_return(root_actor)
|
92
|
+
allow(root_actor).to receive(:update).with({}).and_return(true)
|
93
|
+
curation_concern.apply_depositor_metadata(user.user_key)
|
94
|
+
curation_concern.save!
|
95
|
+
end
|
96
|
+
|
97
|
+
it "does not attach the work" do
|
98
|
+
expect(subject.update(attributes)).to be false
|
99
|
+
end
|
100
|
+
end
|
81
101
|
end
|
82
102
|
end
|
@@ -81,7 +81,7 @@ describe CurationConcerns::Actors::GenericWorkActor do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
context 'with in_work_ids' do
|
84
|
-
let(:parent) {
|
84
|
+
let(:parent) { create(:generic_work, user: user) }
|
85
85
|
let(:attributes) do
|
86
86
|
FactoryGirl.attributes_for(:generic_work, visibility: visibility).merge(
|
87
87
|
in_works_ids: [parent.id]
|
@@ -91,6 +91,11 @@ describe CurationConcerns::Actors::GenericWorkActor do
|
|
91
91
|
expect(subject.create(attributes)).to be true
|
92
92
|
expect(curation_concern.in_works).to eq [parent]
|
93
93
|
end
|
94
|
+
it "does not attach the parent" do
|
95
|
+
allow(curation_concern).to receive(:depositor).and_return("blahblahblah")
|
96
|
+
expect(subject.create(attributes)).to be false
|
97
|
+
expect(curation_concern.in_works).to eq []
|
98
|
+
end
|
94
99
|
end
|
95
100
|
|
96
101
|
context 'with a file' do
|
@@ -190,23 +195,20 @@ describe CurationConcerns::Actors::GenericWorkActor do
|
|
190
195
|
end
|
191
196
|
|
192
197
|
context 'with in_works_ids' do
|
193
|
-
let(:parent) {
|
194
|
-
let(:old_parent) {
|
198
|
+
let(:parent) { create(:generic_work, user: user) }
|
199
|
+
let(:old_parent) { create(:generic_work, user: user) }
|
195
200
|
let(:attributes) do
|
196
201
|
FactoryGirl.attributes_for(:generic_work).merge(
|
197
202
|
in_works_ids: [parent.id]
|
198
203
|
)
|
199
204
|
end
|
200
205
|
before do
|
201
|
-
curation_concern.apply_depositor_metadata(user.user_key)
|
202
|
-
curation_concern.save!
|
203
206
|
old_parent.ordered_members << curation_concern
|
204
207
|
old_parent.save!
|
205
208
|
end
|
206
209
|
it "attaches the parent" do
|
207
210
|
expect(subject.update(attributes)).to be true
|
208
211
|
expect(curation_concern.in_works).to eq [parent]
|
209
|
-
|
210
212
|
expect(old_parent.reload.members).to eq []
|
211
213
|
end
|
212
214
|
end
|
@@ -224,6 +226,7 @@ describe CurationConcerns::Actors::GenericWorkActor do
|
|
224
226
|
old_parent.save!
|
225
227
|
end
|
226
228
|
it "removes the old parent" do
|
229
|
+
allow(curation_concern).to receive(:depositor).and_return(old_parent.depositor)
|
227
230
|
expect(subject.update(attributes)).to be true
|
228
231
|
expect(curation_concern.in_works).to eq []
|
229
232
|
expect(old_parent.reload.members).to eq []
|
@@ -6,12 +6,12 @@ feature 'Creating a new child Work', :workflow do
|
|
6
6
|
let!(:sipity_entity) do
|
7
7
|
create(:sipity_entity, proxy_for_global_id: parent.to_global_id.to_s)
|
8
8
|
end
|
9
|
-
let(:redlock_client_stub)
|
9
|
+
let(:redlock_client_stub) do # stub out redis connection
|
10
10
|
client = double('redlock client')
|
11
11
|
allow(client).to receive(:lock).and_yield(true)
|
12
12
|
allow(Redlock::Client).to receive(:new).and_return(client)
|
13
13
|
client
|
14
|
-
|
14
|
+
end
|
15
15
|
let!(:parent) { create(:generic_work, user: user, title: ["Parent First"]) }
|
16
16
|
|
17
17
|
before do
|
@@ -64,5 +64,19 @@ feature 'Creating a new child Work', :workflow do
|
|
64
64
|
|
65
65
|
expect(curation_concern.reload.in_works_ids.length).to eq 2
|
66
66
|
end
|
67
|
+
|
68
|
+
context "with a parent that doesn't belong to this user" do
|
69
|
+
let(:new_user) { create(:user) }
|
70
|
+
let(:new_parent) { create(:generic_work, user: new_user) }
|
71
|
+
it "fails to update" do
|
72
|
+
visit "/concern/parent/#{parent.id}/generic_works/#{curation_concern.id}/edit"
|
73
|
+
first("input#generic_work_in_works_ids", visible: false).set new_parent.id
|
74
|
+
first("input#parent_id", visible: false).set new_parent.id
|
75
|
+
click_on "Update Generic work"
|
76
|
+
|
77
|
+
expect(new_parent.reload.ordered_members.to_a.length).to eq 0
|
78
|
+
expect(page).to have_content "Works can only be related to each other if user has ability to edit both."
|
79
|
+
end
|
80
|
+
end
|
67
81
|
end
|
68
82
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe CurationConcerns::Forms::FileManagerForm do
|
4
|
+
let(:work) { create(:work) }
|
5
|
+
let(:ability) { instance_double Ability }
|
6
|
+
let(:form) { described_class.new(work, ability) }
|
7
|
+
|
8
|
+
describe "#member_presenters" do
|
9
|
+
subject { form.member_presenters }
|
10
|
+
let(:factory) { instance_double(CurationConcerns::MemberPresenterFactory, member_presenters: result) }
|
11
|
+
let(:result) { double }
|
12
|
+
before do
|
13
|
+
allow(CurationConcerns::MemberPresenterFactory).to receive(:new).with(work, ability).and_return(factory)
|
14
|
+
end
|
15
|
+
it "is delegated to the MemberPresenterFactory" do
|
16
|
+
expect(subject).to eq result
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'curation_concerns/admin/workflow_roles/index.html.erb', type: :view do
|
4
|
+
let!(:user1) { create(:user) }
|
5
|
+
let!(:user2) { create(:user) }
|
6
|
+
let(:presenter) do
|
7
|
+
CurationConcerns::Admin::WorkflowRolePresenter.new
|
8
|
+
end
|
9
|
+
|
10
|
+
before do
|
11
|
+
assign(:presenter, presenter)
|
12
|
+
allow(view).to receive(:admin_workflow_roles_path).and_return('/admin/workflow_roles')
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with no users having workflow roles' do
|
16
|
+
it 'displays "No Roles" for each user' do
|
17
|
+
render
|
18
|
+
expect(rendered).to have_content('No roles', count: 2)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'with some users having workflow roles' do
|
23
|
+
before do
|
24
|
+
# Force user instances to have corresponding sipity agents
|
25
|
+
user1.to_sipity_agent
|
26
|
+
user2.to_sipity_agent
|
27
|
+
end
|
28
|
+
it 'displays roles for each user' do
|
29
|
+
render
|
30
|
+
expect(rendered.match(/<ul>\s+<\/ul>/m)).to be nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
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: 1.7.
|
4
|
+
version: 1.7.5
|
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: 2017-02
|
13
|
+
date: 2017-03-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hydra-head
|
@@ -1134,7 +1134,9 @@ files:
|
|
1134
1134
|
- app/views/curation_concerns/base/_form_descriptive_fields.html.erb
|
1135
1135
|
- app/views/curation_concerns/base/_form_files_and_links.html.erb
|
1136
1136
|
- app/views/curation_concerns/base/_form_in_works.html.erb
|
1137
|
+
- app/views/curation_concerns/base/_form_in_works_error.html.erb
|
1137
1138
|
- app/views/curation_concerns/base/_form_media.html.erb
|
1139
|
+
- app/views/curation_concerns/base/_form_ordered_members_error.html.erb
|
1138
1140
|
- app/views/curation_concerns/base/_form_permission.html.erb
|
1139
1141
|
- app/views/curation_concerns/base/_form_permission_embargo.html.erb
|
1140
1142
|
- app/views/curation_concerns/base/_form_permission_lease.html.erb
|
@@ -1376,6 +1378,7 @@ files:
|
|
1376
1378
|
- spec/features/work_generator_spec.rb
|
1377
1379
|
- spec/features/workflow_roles_spec.rb
|
1378
1380
|
- spec/forms/collection_edit_form_spec.rb
|
1381
|
+
- spec/forms/curation_concerns/forms/file_manager_form_spec.rb
|
1379
1382
|
- spec/forms/curation_concerns/forms/workflow_action_form_spec.rb
|
1380
1383
|
- spec/forms/curation_concerns/forms/workflow_responsibility_form_spec.rb
|
1381
1384
|
- spec/forms/file_set_edit_form_spec.rb
|
@@ -1548,6 +1551,7 @@ files:
|
|
1548
1551
|
- spec/views/curation_concerns/admin/_total_objects_charts.html.erb_spec.rb
|
1549
1552
|
- spec/views/curation_concerns/admin/index.html.erb_spec.rb
|
1550
1553
|
- spec/views/curation_concerns/admin/widgets/_pie.html.erb_spec.rb
|
1554
|
+
- spec/views/curation_concerns/admin/workflow_roles/index.html.erb_spec.rb
|
1551
1555
|
- spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
|
1552
1556
|
- spec/views/curation_concerns/base/_form.html.erb_spec.rb
|
1553
1557
|
- spec/views/curation_concerns/base/_form_rights_spec.rb
|
@@ -1597,7 +1601,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1597
1601
|
version: '0'
|
1598
1602
|
requirements: []
|
1599
1603
|
rubyforge_project:
|
1600
|
-
rubygems_version: 2.
|
1604
|
+
rubygems_version: 2.5.1
|
1601
1605
|
signing_key:
|
1602
1606
|
specification_version: 4
|
1603
1607
|
summary: A Rails Engine that allows an application to CRUD CurationConcern objects
|
@@ -1673,6 +1677,7 @@ test_files:
|
|
1673
1677
|
- spec/features/work_generator_spec.rb
|
1674
1678
|
- spec/features/workflow_roles_spec.rb
|
1675
1679
|
- spec/forms/collection_edit_form_spec.rb
|
1680
|
+
- spec/forms/curation_concerns/forms/file_manager_form_spec.rb
|
1676
1681
|
- spec/forms/curation_concerns/forms/workflow_action_form_spec.rb
|
1677
1682
|
- spec/forms/curation_concerns/forms/workflow_responsibility_form_spec.rb
|
1678
1683
|
- spec/forms/file_set_edit_form_spec.rb
|
@@ -1845,6 +1850,7 @@ test_files:
|
|
1845
1850
|
- spec/views/curation_concerns/admin/_total_objects_charts.html.erb_spec.rb
|
1846
1851
|
- spec/views/curation_concerns/admin/index.html.erb_spec.rb
|
1847
1852
|
- spec/views/curation_concerns/admin/widgets/_pie.html.erb_spec.rb
|
1853
|
+
- spec/views/curation_concerns/admin/workflow_roles/index.html.erb_spec.rb
|
1848
1854
|
- spec/views/curation_concerns/base/_attributes.html.erb_spec.rb
|
1849
1855
|
- spec/views/curation_concerns/base/_form.html.erb_spec.rb
|
1850
1856
|
- spec/views/curation_concerns/base/_form_rights_spec.rb
|