Skip to content

Commit

Permalink
Use Dor::ReleaseTagService rather than the deprecated released_for me…
Browse files Browse the repository at this point in the history
…thod
  • Loading branch information
jcoyne committed Apr 24, 2019
1 parent 04d84bc commit b1cd1e0
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 87 deletions.
6 changes: 5 additions & 1 deletion app/models/dor/update_marc_record_service.rb
Expand Up @@ -169,12 +169,16 @@ def born_digital?
end

def released_to_searchworks?
rel = @druid_obj.released_for.transform_keys { |key| key.to_s.upcase } # upcase all release tags to make the check case insensitive
rel = released_for.transform_keys { |key| key.to_s.upcase } # upcase all release tags to make the check case insensitive
rel.blank? || rel['SEARCHWORKS'].blank? || rel['SEARCHWORKS']['release'].blank? ? false : rel['SEARCHWORKS']['release']
end

private

def released_for
Dor::ReleaseTagService.for(@druid_obj).released_for(skip_live_purl: false)
end

def dor_items_for_constituents
return [] unless @druid_obj.relationships(:is_constituent_of)

Expand Down
8 changes: 7 additions & 1 deletion app/services/public_xml_service.rb
Expand Up @@ -32,13 +32,15 @@ def to_xml
new_pub.to_xml
end

private

# Generate XML structure for inclusion to Purl
# @return [String] The XML release node as a string, with ReleaseDigest as the root document
def release_xml
@release_xml ||= begin
builder = Nokogiri::XML::Builder.new do |xml|
xml.releaseData do
object.released_for.each do |project, released_value|
released_for.each do |project, released_value|
xml.release(released_value['release'], to: project)
end
end
Expand All @@ -47,6 +49,10 @@ def release_xml
end
end

def released_for
Dor::ReleaseTagService.for(object).released_for(skip_live_purl: false)
end

def public_relationships
@public_relationships ||= object.public_relationships.clone
end
Expand Down
175 changes: 108 additions & 67 deletions spec/dor/update_marc_record_service_spec.rb
Expand Up @@ -6,6 +6,11 @@
subject(:umrs) { Dor::UpdateMarcRecordService.new dor_item }

let(:dor_item) { @dor_item }
let(:release_service) { instance_double(Dor::ReleaseTagService, released_for: {})}

before do
allow(Dor::ReleaseTagService).to receive(:for).and_return(release_service)
end

before :all do
Dor::Config.suri = {}
Expand All @@ -16,9 +21,28 @@
end

context 'for a druid without a catkey' do
let(:build_identity_metadata_without_ckey) do
<<~XML
<identityMetadata>
<sourceId source="sul">36105216275185</sourceId>
<objectId>druid:aa222cc3333</objectId>
<objectCreator>DOR</objectCreator>
<objectLabel>A new map of Africa</objectLabel>
<objectType>item</objectType>
<displayType>image</displayType>
<adminPolicy>druid:dd051ys2703</adminPolicy>
<otherId name="uuid">ff3ce224-9ffb-11e3-aaf2-0050569b3c3c</otherId>
<tag>Process : Content Type : Map</tag>
<tag>Project : Batchelor Maps : Batch 1</tag>
<tag>LAB : MAPS</tag>
<tag>Registered By : dfuzzell</tag>
<tag>Remediated By : 4.15.4</tag>
</identityMetadata>
XML
end

it 'does nothing' do
druid = 'druid:aa222cc3333'
setup_test_objects(druid, build_identity_metadata_without_ckey)
setup_test_objects('druid:aa222cc3333', build_identity_metadata_without_ckey)
expect(umrs).to receive(:ckey).and_return(nil)
expect(umrs).not_to receive(:push_symphony_records)
umrs.update
Expand Down Expand Up @@ -50,17 +74,13 @@
let(:collection) { Dor::Collection.new }
let(:constituent) { Dor::Item.new }

let(:rels_ext_xml) { double(String) }
let(:identity_metadata_xml) { double(String) }
let(:content_metadata_xml) { double(String) }
let(:desc_metadata_xml) { double(String) }
let(:rights_metadata_xml) { double(String) }
let(:rels_ext_xml) { instance_double(ActiveFedora::RelsExtDatastream) }
let(:identity_metadata_xml) { instance_double(Dor::IdentityMetadataDS) }
let(:content_metadata_xml) { instance_double(Dor::ContentMetadataDS) }
let(:desc_metadata_xml) { instance_double(Dor::DescMetadataDS) }
let(:rights_metadata_xml) { instance_double(Dor::RightsMetadataDS) }
let(:release_data) { { 'Searchworks' => { 'release' => true } } }

before do
allow(item).to receive(:released_for).and_return(release_data)
allow(collection).to receive(:released_for).and_return(release_data)
end
let(:release_service) { instance_double(Dor::ReleaseTagService, released_for: release_data)}

it 'generates an empty array for a druid object without catkey or previous catkeys' do
rights_metadata_ng_xml = Nokogiri::XML(build_rights_metadata_1)
Expand Down Expand Up @@ -102,9 +122,9 @@
ng_xml: Nokogiri::XML(build_desc_metadata_1)
)

allow(rels_ext_xml).to receive_messages(
ng_xml: Nokogiri::XML(build_rels_ext)
)
# allow(rels_ext_xml).to receive_messages(
# ng_xml: Nokogiri::XML(build_rels_ext)
# )

rights_metadata_ng_xml = Nokogiri::XML(build_rights_metadata_1)
allow(rights_metadata_xml).to receive_messages(
Expand Down Expand Up @@ -148,9 +168,9 @@
ng_xml: Nokogiri::XML(build_desc_metadata_1)
)

allow(rels_ext_xml).to receive_messages(
ng_xml: Nokogiri::XML(build_rels_ext)
)
# allow(rels_ext_xml).to receive_messages(
# ng_xml: Nokogiri::XML(build_rels_ext)
# )

rights_metadata_ng_xml = Nokogiri::XML(build_rights_metadata_2)
allow(rights_metadata_xml).to receive_messages(
Expand Down Expand Up @@ -191,10 +211,10 @@
allow(desc_metadata_xml).to receive_messages(
ng_xml: Nokogiri::XML(build_desc_metadata_1)
)

allow(rels_ext_xml).to receive_messages(
ng_xml: Nokogiri::XML(build_rels_ext)
)
#
# allow(rels_ext_xml).to receive_messages(
# ng_xml: Nokogiri::XML(build_rels_ext)
# )

rights_metadata_ng_xml = Nokogiri::XML(build_rights_metadata_1)
allow(rights_metadata_xml).to receive_messages(
Expand Down Expand Up @@ -236,9 +256,9 @@
ng_xml: Nokogiri::XML(build_desc_metadata_1)
)

allow(rels_ext_xml).to receive_messages(
ng_xml: Nokogiri::XML(build_rels_ext)
)
# allow(rels_ext_xml).to receive_messages(
# ng_xml: Nokogiri::XML(build_rels_ext)
# )

rights_metadata_ng_xml = Nokogiri::XML(build_rights_metadata_1)
allow(rights_metadata_xml).to receive_messages(
Expand Down Expand Up @@ -278,7 +298,6 @@
ng_xml: Nokogiri::XML(build_identity_metadata_2)
)

allow(identity_metadata_xml).to receive(:tag).and_return('Project : Batchelor Maps : Batch 1')
allow(collection).to receive_messages(
label: 'Collection label',
id: 'aa111aa1111',
Expand Down Expand Up @@ -642,47 +661,69 @@
end

describe 'Released to Searchworks' do
it 'returns true if release_data tag has release to=Searchworks and value is true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
release_data = { 'Searchworks' => { 'release' => true } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be true
end
it 'returns true if release_data tag has release to=searchworks (all lowercase) and value is true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
release_data = { 'searchworks' => { 'release' => true } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be true
end
it 'returns true if release_data tag has release to=SearchWorks (camcelcase) and value is true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
release_data = { 'SearchWorks' => { 'release' => true } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be true
end
it 'returns false if release_data tag has release to=Searchworks and value is false' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
release_data = { 'Searchworks' => { 'release' => false } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be false
end
it 'returns false if release_data tag has release to=Searchworks but no specified release value' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
release_data = { 'Searchworks' => { 'bogus' => 'yup' } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be false
end
it 'returns false if there are no release tags at all' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
release_data = {}
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be false
end
it 'returns false if there are non searchworks related release tags' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
release_data = { 'Revs' => { 'release' => true } }
allow(@dor_item).to receive(:released_for).and_return(release_data)
expect(umrs.released_to_searchworks?).to be false
let(:release_service) { instance_double(Dor::ReleaseTagService, released_for: release_data)}

context 'when release_data tag has release to=Searchworks and value is true' do
let(:release_data) { { 'Searchworks' => { 'release' => true } } }

it 'returns true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
expect(umrs.released_to_searchworks?).to be true
end
end

context 'when release_data tag has release to=searchworks (all lowercase) and value is true' do
let(:release_data) { { 'searchworks' => { 'release' => true } } }

it 'returns true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
expect(umrs.released_to_searchworks?).to be true
end
end

context 'when release_data tag has release to=SearchWorks (camcelcase) and value is true' do
let(:release_data) { { 'SearchWorks' => { 'release' => true } } }

it 'returns true' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
expect(umrs.released_to_searchworks?).to be true
end
end

context 'when release_data tag has release to=Searchworks and value is false' do
let(:release_data) { { 'Searchworks' => { 'release' => false } } }

it 'returns false' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
expect(umrs.released_to_searchworks?).to be false
end
end

context 'when release_data tag has release to=Searchworks but no specified release value' do
let(:release_data) { { 'Searchworks' => { 'bogus' => 'yup' } } }

it 'returns false' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
expect(umrs.released_to_searchworks?).to be false
end
end

context 'when there are no release tags at all' do
let(:release_data) { {} }

it 'returns false' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_2)
expect(umrs.released_to_searchworks?).to be false
end
end

context 'when there are non searchworks related release tags' do
let(:release_data) { { 'Revs' => { 'release' => true } } }

it 'returns false' do
setup_test_objects('druid:aa111aa1111', build_identity_metadata_1)
expect(umrs.released_to_searchworks?).to be false
end
end
end

Expand Down
18 changes: 0 additions & 18 deletions spec/support/datastreams.rb
Expand Up @@ -175,24 +175,6 @@ def build_identity_metadata_with_ckey
</identityMetadata>'
end

def build_identity_metadata_without_ckey
'<identityMetadata>
<sourceId source="sul">36105216275185</sourceId>
<objectId>druid:aa222cc3333</objectId>
<objectCreator>DOR</objectCreator>
<objectLabel>A new map of Africa</objectLabel>
<objectType>item</objectType>
<displayType>image</displayType>
<adminPolicy>druid:dd051ys2703</adminPolicy>
<otherId name="uuid">ff3ce224-9ffb-11e3-aaf2-0050569b3c3c</otherId>
<tag>Process : Content Type : Map</tag>
<tag>Project : Batchelor Maps : Batch 1</tag>
<tag>LAB : MAPS</tag>
<tag>Registered By : dfuzzell</tag>
<tag>Remediated By : 4.15.4</tag>
</identityMetadata>'
end

def build_rights_metadata_1
'<rightsMetadata>
<access type="discover">
Expand Down

0 comments on commit b1cd1e0

Please sign in to comment.