Skip to content
This repository has been archived by the owner on May 11, 2022. It is now read-only.

Commit

Permalink
Merge 4619e52 into 890ad6c
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed Feb 8, 2019
2 parents 890ad6c + 4619e52 commit 1b2fc0a
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 34 deletions.
2 changes: 1 addition & 1 deletion dor-services.gemspec
Expand Up @@ -21,7 +21,7 @@ Gem::Specification.new do |s|
s.add_dependency 'activesupport', '>= 4.2.10', '< 6.0.0'
s.add_dependency 'confstruct', '~> 0.2.7'
s.add_dependency 'deprecation', '~> 0'
s.add_dependency 'dor-services-client', '~> 1.3'
s.add_dependency 'dor-services-client', '~> 1.5'
s.add_dependency 'equivalent-xml', '~> 0.5', '>= 0.5.1' # 5.0 insufficient
s.add_dependency 'json', '>= 1.8.1'
s.add_dependency 'net-sftp', '~> 2.1'
Expand Down
6 changes: 4 additions & 2 deletions lib/dor/services/technical_metadata_service.rb
Expand Up @@ -60,7 +60,9 @@ def self.get_content_group_diff(dor_item)
return Moab::FileGroupDifference.new if dor_item.contentMetadata.nil?
raise Dor::ParameterError, 'Missing Dor::Config.stacks.local_workspace_root' if Config.stacks.local_workspace_root.nil?

inventory_diff = Sdr::Client.get_content_diff(dor_item.pid, dor_item.contentMetadata.content, 'all')
client = Dor::Services::Client.object(dor_item.pid).sdr
current_content = dor_item.contentMetadata.content
inventory_diff = client.content_diff(current_content: current_content)
inventory_diff.group_difference('content')
end
private_class_method :get_content_group_diff
Expand Down Expand Up @@ -120,7 +122,7 @@ def self.get_dor_technical_metadata(dor_item)
# @param [String] dsname The identifier of the metadata datastream
# @return [String] The datastream contents from the previous version of the digital object (fetched from SDR storage)
def self.get_sdr_metadata(druid, dsname)
Sdr::Client.get_sdr_metadata(druid, dsname)
Dor::Services::Client.object(druid).sdr.metadata(datastream: dsname)
end
private_class_method :get_sdr_metadata

Expand Down
6 changes: 6 additions & 0 deletions lib/dor/utils/sdr_client.rb
Expand Up @@ -24,6 +24,9 @@ def current_version(druid)
# @param [String] dsname The identifier of the metadata datastream
# @return [String] The datastream contents from the previous version of the digital object (fetched from SDR storage)
def get_sdr_metadata(druid, dsname)
Deprecation.warn(self, 'Sdr::Client.get_sdr_metadata is deprecated and will be removed in dor-services 7. ' \
'Use Dor::Services::Client.object(object_identifier).sdr.metadatra(datastream:) instead')

client["objects/#{druid}/metadata/#{dsname}.xml"].get
rescue RestClient::ResourceNotFound
nil
Expand All @@ -32,6 +35,9 @@ def get_sdr_metadata(druid, dsname)
# @param [String] druid The object identifier
# @return [Moab::SignatureCatalog] the catalog of all files previously ingested
def get_signature_catalog(druid)
Deprecation.warn(self, 'Sdr::Client.get_signature_catalog is deprecated and will be removed in dor-services 7. ' \
'Use Dor::Services::Client.object(object_identifier).sdr.signature_catalog instead')

response = client["objects/#{druid}/manifest/signatureCatalog.xml"].get
Moab::SignatureCatalog.parse(response)
rescue RestClient::ResourceNotFound
Expand Down
86 changes: 55 additions & 31 deletions spec/services/technical_metadata_service_spec.rb
Expand Up @@ -71,25 +71,32 @@
end
end

describe 'Dor::TechnicalMetadataService.get_content_group_diff(dor_item)' do
describe '.get_content_group_diff(dor_item)' do
subject(:content_group_diff) { described_class.send(:get_content_group_diff, dor_item) }

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

let(:contentMetadata) { instance_double(Dor::ContentMetadataDS, content: 'foo') }
let(:object_client) { instance_double(Dor::Services::Client::Object, sdr: sdr_client) }
let(:sdr_client) { instance_double(Dor::Services::Client::SDR, content_diff: inventory_diff) }
let(:object_id) { 'dd116zh0343' }
let(:druid) { "druid:#{object_id}" }
let(:group_diff) { @inventory_differences[object_id] }
let(:dor_item) { instance_double(Dor::Item, contentMetadata: contentMetadata, pid: druid) }

it 'calculates the differences' do
object_ids.each do |id|
group_diff = @inventory_differences[id]
druid = "druid:#{id}"
inventory_diff = Moab::FileInventoryDifference.new(
digital_object_id: druid,
basis: 'old_content_metadata',
other: 'new_content_metadata',
report_datetime: Time.now.utc.to_s
)
inventory_diff.group_differences << group_diff
dor_item = instance_double(Dor::Item, contentMetadata: contentMetadata, pid: druid)
allow(Sdr::Client).to receive(:get_content_diff).with(druid, 'foo', 'all').and_return(inventory_diff)
content_group_diff = described_class.send(:get_content_group_diff, dor_item)
expect(content_group_diff.to_xml).to eq(group_diff.to_xml)
end
let(:inventory_diff) do
Moab::FileInventoryDifference.new(
digital_object_id: druid,
basis: 'old_content_metadata',
other: 'new_content_metadata',
report_datetime: Time.now.utc.to_s
).tap { |diff| diff.group_differences << group_diff }
end

it 'calculates the difference' do
expect(content_group_diff.to_xml).to eq(group_diff.to_xml)
end
end

Expand Down Expand Up @@ -124,22 +131,39 @@
expect(old_techmd).to eq(tech_md)
end

specify 'Dor::TechnicalMetadataService.get_sdr_technical_metadata' do
druid = 'druid:du000ps9999'
allow(Sdr::Client).to receive(:get_sdr_metadata).with(druid, 'technicalMetadata').and_return(nil)
sdr_techmd = described_class.send(:get_sdr_technical_metadata, druid)
expect(sdr_techmd).to be_nil
describe '.get_sdr_technical_metadata' do
subject(:sdr_techmd) { described_class.send(:get_sdr_technical_metadata, druid) }

allow(described_class).to receive(:get_sdr_metadata).with(druid, 'technicalMetadata').and_return('<technicalMetadata/>')
sdr_techmd = described_class.send(:get_sdr_technical_metadata, druid)
expect(sdr_techmd).to eq('<technicalMetadata/>')
let(:object_client) { instance_double(Dor::Services::Client::Object, sdr: sdr_client) }
let(:sdr_client) { instance_double(Dor::Services::Client::SDR, metadata: metadata) }
let(:druid) { 'druid:du000ps9999' }

allow(described_class).to receive(:get_sdr_metadata).with(druid, 'technicalMetadata').and_return('<jhove/>')
jhove_service = double(JhoveService)
allow(JhoveService).to receive(:new).and_return(jhove_service)
allow(jhove_service).to receive(:upgrade_technical_metadata).and_return('upgraded techmd')
sdr_techmd = described_class.send(:get_sdr_technical_metadata, druid)
expect(sdr_techmd).to eq('upgraded techmd')
before do
allow(Dor::Services::Client).to receive(:object).with(druid).and_return(object_client)
end

context 'when metadata is nil' do
let(:metadata) { nil }

it { is_expected.to be_nil }
end

context 'when metadata is techmd' do
let(:metadata) { '<technicalMetadata/>' }

it { is_expected.to eq '<technicalMetadata/>' }
end

context 'when metadata is jhove' do
let(:metadata) { '<jhove/>' }

before do
jhove_service = instance_double(JhoveService, upgrade_technical_metadata: 'upgraded techmd')
allow(JhoveService).to receive(:new).and_return(jhove_service)
end

it { is_expected.to eq 'upgraded techmd' }
end
end

specify 'Dor::TechnicalMetadataService.get_dor_technical_metadata' do
Expand Down
2 changes: 2 additions & 0 deletions spec/utils/sdr_client_spec.rb
Expand Up @@ -30,6 +30,7 @@

describe '.get_sdr_metadata' do
it 'fetches the datastream from SDR' do
expect(Deprecation).to receive(:warn)
stub_request(:get, described_class.client['objects/druid:ab123cd4567/metadata/technicalMetadata.xml'].url).to_return(body: '<technicalMetadata/>')
response = described_class.get_sdr_metadata('druid:ab123cd4567', 'technicalMetadata')
expect(response).to eq('<technicalMetadata/>')
Expand All @@ -40,6 +41,7 @@
let(:druid) { 'druid:zz000zz0000' }

it 'fetches the signature catalog from SDR' do
expect(Deprecation).to receive(:warn)
resource = described_class.client["objects/#{druid}/manifest/signatureCatalog.xml"]
stub_request(:get, resource.url).to_return(body: '<signatureCatalog objectId="druid:zz000zz0000" versionId="0" catalogDatetime="" fileCount="0" byteCount="0" blockCount="0"/>')

Expand Down

0 comments on commit 1b2fc0a

Please sign in to comment.