Skip to content

Commit

Permalink
Merge 1b437ae into 42e6a04
Browse files Browse the repository at this point in the history
  • Loading branch information
peetucket committed Feb 28, 2020
2 parents 42e6a04 + 1b437ae commit 33b85e9
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 72 deletions.
33 changes: 9 additions & 24 deletions app/lib/pre_assembly/digital_object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ def pre_assemble
stage_files
generate_content_metadata
generate_media_project_technical_metadata if content_md_creation == 'media_cm_style'
create_new_version if openable?
initialize_assembly_workflow
start_accession
log " - pre_assemble(#{pid}) finished"
{ status: 'success' }
end
Expand Down Expand Up @@ -149,28 +148,14 @@ def current_object_version
@current_object_version ||= version_client.current.to_i
end

# When reaccessioning, we need to first open and close a version without kicking off accessionWF
def create_new_version
version_client.open(
significance: 'major',
description: 'pre-assembly re-accession',
opening_user_name: bundle.bundle_context.user.sunet_id
)
version_client.close(start_accession: false)
end

####
# Initialize the assembly workflow.
####

# Call web service to add assemblyWF to the object in DOR.
def initialize_assembly_workflow
workflow_client.create_workflow_by_name(druid.druid, 'assemblyWF', version: current_object_version)
end

def workflow_client
logger = Logger.new(Settings.workflow.logfile, Settings.workflow.shift_age)
Dor::Workflow::Client.new(url: Settings.workflow_url, logger: logger, timeout: Settings.workflow.timeout)
def start_accession
version_params =
{
significance: 'major',
description: 'pre-assembly re-accession',
opening_user_name: bundle.bundle_context.user.sunet_id
}
object_client.accession(version_params)
end
end
end
7 changes: 0 additions & 7 deletions config/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,3 @@ job_output_parent_dir: 'log/jobs'
DOR_SERVICES:
URL: 'http://localhost:3003'
TOKEN: 'secret-token'


workflow_url: 'https://workflow-env.stanford.edu/workflow'
workflow:
logfile: 'log/workflow_service.log'
shift_age: 'weekly'
timeout: 60
2 changes: 1 addition & 1 deletion spec/lib/pre_assembly/bundle_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
let(:item) { instance_double(Cocina::Models::DRO, type: Cocina::Models::Vocab.image) }

before do
allow_any_instance_of(PreAssembly::DigitalObject).to receive(:initialize_assembly_workflow)
allow_any_instance_of(PreAssembly::DigitalObject).to receive(:start_accession)
allow(Dor::Services::Client).to receive(:object).and_return(dor_services_client_object)
end

Expand Down
59 changes: 19 additions & 40 deletions spec/lib/pre_assembly/digital_object_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,12 @@ def add_object_files(extension = 'tif')
allow(object).to receive(:pid).and_return(pid)
end

it 'does not call create_new_version for new_objects' do
it 'calls all methods needed to accession' do
allow(object).to receive(:'openable?').and_return(false)
allow(object).to receive(:current_object_version).and_return(1)
expect(object).to receive(:stage_files)
expect(object).to receive(:generate_content_metadata)
expect(object).not_to receive(:create_new_version)
expect(object).to receive(:initialize_assembly_workflow)
expect(object).to receive(:start_accession)
object.pre_assemble
end

Expand All @@ -58,16 +57,6 @@ def add_object_files(extension = 'tif')
message: "can't be opened for a new version; cannot re-accession when version > 1 unless object can be opened")
end
end

it 'calls create_new_version for existing openable objects' do
allow(object).to receive(:'openable?').and_return(true)
allow(object).to receive(:current_object_version).and_return(2)
expect(object).to receive(:stage_files)
expect(object).to receive(:generate_content_metadata)
expect(object).to receive(:create_new_version)
expect(object).to receive(:initialize_assembly_workflow)
object.pre_assemble
end
end

describe '#stage_files' do
Expand Down Expand Up @@ -301,51 +290,41 @@ def add_object_files(extension = 'tif')
end
end

describe '#create_new_version' do
let(:dor_services_client_object_version) { instance_double(Dor::Services::Client::ObjectVersion, open: true, close: true) }
let(:dor_services_client_object) { instance_double(Dor::Services::Client::Object, version: dor_services_client_object_version) }
let(:version_options) { { significance: 'major', description: 'pre-assembly re-accession', opening_user_name: object.bundle.bundle_context.user.sunet_id } }

before do
allow(object).to receive(:druid).and_return(druid)
allow(Dor::Services::Client).to receive(:object).and_return(dor_services_client_object)
end

it 'opens and closes an object version' do
expect(dor_services_client_object_version).to receive(:open).with(**version_options)
expect(dor_services_client_object_version).to receive(:close).with(start_accession: false)
object.send(:create_new_version)
end
end

describe '#initialize_assembly_workflow' do
subject(:start_workflow) { object.send(:initialize_assembly_workflow) }

describe '#start_accession' do
subject(:start_accession) { object.send(:start_accession) }
subject(:version_params) {
{
significance: 'major',
description: 'pre-assembly re-accession',
opening_user_name: bc.user.sunet_id
}
}
before do
allow(Dor::Services::Client).to receive(:object).and_return(object_client)
allow(Dor::Workflow::Client).to receive(:new).and_return(client)
allow(object).to receive(:druid).and_return(druid)
end

let(:client) { instance_double(Dor::Workflow::Client, create_workflow_by_name: true) }
let(:version_client) { instance_double(Dor::Services::Client::ObjectVersion, current: '5') }
let(:object_client) { instance_double(Dor::Services::Client::Object, version: version_client) }
let(:service_url) { Settings.dor_services_url }

context 'when api client is successful' do
it 'starts the assembly workflow' do
start_workflow
expect(client).to have_received(:create_workflow_by_name).with(druid.druid, 'assemblyWF', version: 5)
before do
allow(object_client).to receive(:accession).and_return(true)
end
it 'starts accession' do
start_accession
expect(object_client).to have_received(:accession).with(version_params)
end
end

context 'when the api client raises' do
before do
allow(client).to receive(:create_workflow_by_name).and_raise(StandardError)
allow(object_client).to receive(:accession).and_raise(StandardError)
end

it 'raises an exception' do
expect { start_workflow }.to raise_error(StandardError)
expect { start_accession }.to raise_error(StandardError)
end
end
end
Expand Down

0 comments on commit 33b85e9

Please sign in to comment.