-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Adds WorkMembersCleanUpJob. * Refactors to lower cog com.
- Loading branch information
Showing
7 changed files
with
169 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# frozen_string_literal: true | ||
|
||
class ReplaceWorkMembersJob < Hyrax::ApplicationJob | ||
def perform(work, cleaned_member_ids) | ||
file_sets = cleaned_member_ids.map { |id| FileSet.find(id) } | ||
|
||
work.ordered_members = file_sets | ||
work.save | ||
regen_manifest(work) | ||
end | ||
|
||
def regen_manifest(work) | ||
solr_doc = SolrDocument.find(work.id) | ||
ability = ManifestAbility.new | ||
presenter = Hyrax::CurateGenericWorkPresenter.new(solr_doc, ability) | ||
|
||
ManifestBuilderService.regenerate_manifest(presenter: presenter, curation_concern: work) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# frozen_string_literal: true | ||
|
||
class WorkMembersCleanUpJob < Hyrax::ApplicationJob | ||
def perform(comma_separated_work_ids = nil) | ||
work_ids = comma_separated_work_ids&.split(',') | ||
raise 'The required work ids separated by commas were not provided.' if work_ids.blank? | ||
|
||
works = pull_works_by_ids(work_ids) | ||
works.each { |work| clean_up_work_member(work) } | ||
end | ||
|
||
def pull_works_by_ids(work_ids) | ||
ret_arr = [] | ||
work_ids.each do |id| | ||
ret_arr << CurateGenericWork.find(id) | ||
rescue | ||
Rails.logger.error "The id #{id} did not match a work in the system." | ||
next | ||
end | ||
ret_arr | ||
end | ||
|
||
def clean_up_work_member(work) | ||
members_count = work.ordered_member_ids.size | ||
cleaned_member_ids = work.ordered_member_ids.compact.uniq | ||
|
||
if members_count != cleaned_member_ids.size | ||
ReplaceWorkMembersJob.perform_later(work, cleaned_member_ids) | ||
else | ||
Rails.logger.error 'No nil or duplicate work members were found.' | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# frozen_string_literal: true | ||
require 'rails_helper' | ||
|
||
RSpec.describe ReplaceWorkMembersJob, :clean do | ||
let(:work) { FactoryBot.create(:work) } | ||
let(:file_set) { FactoryBot.create(:file_set) } | ||
|
||
before do | ||
work.ordered_members = [file_set, file_set] | ||
work.save | ||
end | ||
|
||
# NOTE: We unfortunately cannot save nil objects into the #ordered_members attribute. | ||
# That phenomenon only occurs during Zizia imports using the "shovelling" technique | ||
# of adding FileSets to a Work. | ||
it 'calls the expected methods' do | ||
expect(FileSet).to receive(:find).with(file_set.id).and_return(file_set) | ||
expect(work).to receive(:ordered_members=).with([file_set]) | ||
expect(work).to receive(:save) | ||
described_class.perform_now(work, [file_set.id]) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# frozen_string_literal: true | ||
require 'rails_helper' | ||
|
||
RSpec.describe WorkMembersCleanUpJob, :clean do | ||
let(:work) { FactoryBot.create(:work) } | ||
let(:file_set) { FactoryBot.create(:file_set) } | ||
|
||
context 'when called without ids' do | ||
it 'returns an error' do | ||
expect { described_class.perform_now }.to( | ||
raise_error( | ||
RuntimeError, | ||
'The required work ids separated by commas were not provided.' | ||
) | ||
) | ||
end | ||
end | ||
|
||
context 'when called with work with no duplicates or nil objects in #ordered_members' do | ||
before do | ||
work.ordered_members = [file_set] | ||
work.save | ||
end | ||
|
||
it 'finds work and does not process ReplaceWorkMembersJob' do | ||
expect(CurateGenericWork).to receive(:find).with(work.id).and_return(work) | ||
expect(Rails.logger).to receive(:error).with('No nil or duplicate work members were found.') | ||
expect(ReplaceWorkMembersJob).not_to receive(:perform_later).with(work, [file_set.id]) | ||
described_class.perform_now(work.id) | ||
end | ||
end | ||
|
||
# NOTE: We unfortunately cannot save nil objects into the #ordered_members attribute. | ||
# That phenomenon only occurs during Zizia imports using the "shovelling" technique | ||
# of adding FileSets to a Work. | ||
context 'when called with a work that contains duplicate objects in #ordered_members' do | ||
before do | ||
work.ordered_members = [file_set, file_set] | ||
work.save | ||
end | ||
|
||
it 'finds work and processes ReplaceWorkMembersJob' do | ||
expect(CurateGenericWork).to receive(:find).with(work.id).and_return(work) | ||
expect(Rails.logger).not_to receive(:error).with('No nil or duplicate work members were found.') | ||
expect(ReplaceWorkMembersJob).to receive(:perform_later).with(work, [file_set.id]) | ||
described_class.perform_now(work.id) | ||
end | ||
end | ||
end |