Skip to content

Commit

Permalink
Merge ad8de3f into 04d84bc
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed Apr 24, 2019
2 parents 04d84bc + ad8de3f commit c01bf80
Show file tree
Hide file tree
Showing 7 changed files with 143 additions and 105 deletions.
18 changes: 7 additions & 11 deletions .rubocop_todo.yml
@@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2019-04-23 12:17:23 -0500 using RuboCop version 0.65.0.
# on 2019-04-24 09:41:45 -0500 using RuboCop version 0.65.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
Expand Down Expand Up @@ -42,7 +42,7 @@ Metrics/ClassLength:
Metrics/CyclomaticComplexity:
Max: 24

# Offense count: 25
# Offense count: 24
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/MethodLength:
Max: 58
Expand Down Expand Up @@ -160,15 +160,14 @@ RSpec/ExampleLength:
- 'spec/services/release_tags_spec.rb'
- 'spec/services/version_service_spec.rb'

# Offense count: 19
# Offense count: 18
RSpec/ExpectInHook:
Exclude:
- 'spec/dor/update_marc_record_service_spec.rb'
- 'spec/services/public_xml_service_spec.rb'
- 'spec/services/publish_metadata_service_spec.rb'
- 'spec/services/registration_service_spec.rb'

# Offense count: 146
# Offense count: 139
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Exclude:
Expand All @@ -177,7 +176,7 @@ RSpec/InstanceVariable:
- 'spec/dor/update_marc_record_service_spec.rb'
- 'spec/services/registration_service_spec.rb'

# Offense count: 56
# Offense count: 54
# Configuration parameters: EnforcedStyle.
# SupportedStyles: have_received, receive
RSpec/MessageSpies:
Expand All @@ -187,8 +186,6 @@ RSpec/MessageSpies:
- 'spec/controllers/workflows_controller_spec.rb'
- 'spec/dor/goobi_spec.rb'
- 'spec/dor/update_marc_record_service_spec.rb'
- 'spec/services/public_xml_service_spec.rb'
- 'spec/services/publish_metadata_service_spec.rb'
- 'spec/services/registration_service_spec.rb'
- 'spec/services/version_service_spec.rb'

Expand All @@ -197,7 +194,7 @@ RSpec/MessageSpies:
RSpec/MultipleExpectations:
Max: 8

# Offense count: 17
# Offense count: 18
RSpec/NestedGroups:
Max: 5

Expand Down Expand Up @@ -235,14 +232,13 @@ RSpec/SubjectStub:
Exclude:
- 'spec/dor/update_marc_record_service_spec.rb'

# Offense count: 18
# Offense count: 12
# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
RSpec/VerifiedDoubles:
Exclude:
- 'spec/controllers/objects_controller_spec.rb'
- 'spec/dor/service_item_spec.rb'
- 'spec/dor/update_marc_record_service_spec.rb'
- 'spec/rails_helper.rb'
- 'spec/services/version_service_spec.rb'

# Offense count: 3
Expand Down
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
4 changes: 2 additions & 2 deletions spec/rails_helper.rb
Expand Up @@ -66,13 +66,13 @@ def clean_workspace
end

def setup_test_objects(druid, identityMetadata, rightsMetadata = '<xml/>')
@dor_item = double(Dor::Item)
@dor_item = instance_double(Dor::Item)
@identityMetadataXML = Dor::IdentityMetadataDS.new
@rightsMetadataXML = Dor::RightsMetadataDS.new
allow(@identityMetadataXML).to receive_messages(ng_xml: Nokogiri::XML(identityMetadata))
allow(@rightsMetadataXML).to receive_messages(ng_xml: Nokogiri::XML(rightsMetadata))
allow(@dor_item).to receive_messages(
id: druid, released_for: {},
id: druid,
datastreams: { 'identityMetadata' => @identityMetadataXML, 'rightsMetadata' => @rightsMetadataXML },
identityMetadata: @identityMetadataXML, rightsMetadata: @rightsMetadataXML,
remove_druid_prefix: druid.gsub('druid:', '')
Expand Down

0 comments on commit c01bf80

Please sign in to comment.