Skip to content

Commit

Permalink
Adds a method which allows for the assignment of children to parents.
Browse files Browse the repository at this point in the history
  • Loading branch information
straleyb committed Jun 28, 2016
1 parent bf0c76b commit fdd260b
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
16 changes: 16 additions & 0 deletions app/actors/curation_concerns/actors/apply_order_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,27 @@ module Actors
class ApplyOrderActor < AbstractActor
def update(attributes)
ordered_member_ids = attributes.delete(:ordered_member_ids)
sync_members(ordered_member_ids)
apply_order(ordered_member_ids) && next_actor.update(attributes)
end

private

def sync_members(ordered_member_ids)
return true if ordered_member_ids.nil?
existing_members_ids = curation_concern.member_ids
(existing_members_ids - ordered_member_ids).each do |old_id|
work = ::ActiveFedora::Base.find(old_id)
curation_concern.ordered_members.delete(work)
end

(ordered_member_ids - existing_members_ids).each do |work_id|
work = ::ActiveFedora::Base.find(work_id)
curation_concern.ordered_members << work
end
true
end

def apply_order(new_order)
return true unless new_order
curation_concern.ordered_member_proxies.each_with_index do |proxy, index|
Expand Down
60 changes: 60 additions & 0 deletions spec/actors/curation_concerns/apply_order_actor_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
require 'spec_helper'

describe CurationConcerns::Actors::ApplyOrderActor do
describe '#update' do
let(:curation_concern) { create(:work_with_two_children, user: user) }

let(:user) { create(:admin) }

subject do
CurationConcerns::Actors::ActorStack.new(curation_concern,
user,
[described_class,
CurationConcerns::Actors::GenericWorkActor])
end

context 'with ordered_member_ids that are already associated with the parent' do
let(:attributes) { { ordered_member_ids: ["Blah"] } }
let(:root_actor) { double }
before do
allow(CurationConcerns::Actors::RootActor).to receive(:new).and_return(root_actor)
allow(root_actor).to receive(:update).with({}).and_return(true)
curation_concern.apply_depositor_metadata(user.user_key)
curation_concern.save!
end
it "attaches the parent" do
expect(subject.update(attributes)).to be true
end
end
end

describe '#update' do
let(:user) { create(:admin) }
let(:curation_concern) { create(:work_with_one_child, user: user) }
let(:child) { GenericWork.new("Blah3") }

subject do
CurationConcerns::Actors::ActorStack.new(curation_concern,
user,
[described_class,
CurationConcerns::Actors::GenericWorkActor])
end

context 'with ordered_members_ids that arent associated with the curation concern yet.' do
let(:attributes) { { ordered_member_ids: ["Blah3"] } }
let(:root_actor) { double }
before do
allow(CurationConcerns::Actors::RootActor).to receive(:new).and_return(root_actor)
allow(root_actor).to receive(:update).with({}).and_return(true)
child.title = ["Generic Title"]
child.apply_depositor_metadata(user.user_key)
child.save!
curation_concern.apply_depositor_metadata(user.user_key)
curation_concern.save!
end
it "attaches the parent" do
expect(subject.update(attributes)).to be true
end
end
end
end
13 changes: 13 additions & 0 deletions spec/factories/generic_works.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@
end
end

factory :work_with_one_child do
before(:create) do |work, evaluator|
work.ordered_members << FactoryGirl.create(:generic_work, user: evaluator.user, title: ['A Contained Work'])
end
end

factory :work_with_two_children do
before(:create) do |work, evaluator|
work.ordered_members << FactoryGirl.create(:generic_work, user: evaluator.user, title: ['A Contained Work'], id: "Blah")
work.ordered_members << FactoryGirl.create(:generic_work, user: evaluator.user, title: ['Another Contained Work'], id: "Blah2")
end
end

factory :work_with_representative_file do
before(:create) do |work, evaluator|
work.ordered_members << FactoryGirl.create(:file_set, user: evaluator.user, title: ['A Contained FileSet'])
Expand Down

0 comments on commit fdd260b

Please sign in to comment.