Skip to content

Commit

Permalink
m2c uses matches_po_current_version? to compare po/pc versions
Browse files Browse the repository at this point in the history
  Fixes #483
  • Loading branch information
tallenaz committed Jan 25, 2018
1 parent 786ef31 commit 78f11c2
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 7 deletions.
12 changes: 7 additions & 5 deletions app/services/preserved_object_handler.rb
Expand Up @@ -69,7 +69,7 @@ def check_existence
# FIXME: what if there is more than one associated pres_copy?
pres_copy = PreservedCopy.find_by!(preserved_object: pres_object, endpoint: endpoint) if pres_object

raise_rollback_if_pc_po_version_mismatch(pres_copy.version, pres_object.current_version)
raise_rollback_if_pc_po_version_mismatch(pres_copy)

if incoming_version == pres_copy.version
set_status_as_seen_on_disk(pres_copy, true) unless pres_copy.status == PreservedCopy::OK_STATUS
Expand Down Expand Up @@ -218,7 +218,7 @@ def update_online_version(status=nil, set_status_to_unexp_version=false)
pres_object = PreservedObject.find_by!(druid: druid)
pres_copy = PreservedCopy.find_by!(preserved_object: pres_object, endpoint: endpoint) if pres_object

raise_rollback_if_pc_po_version_mismatch(pres_copy.version, pres_object.current_version)
raise_rollback_if_pc_po_version_mismatch(pres_copy)

# FIXME: what if there is more than one associated pres_copy?
if incoming_version > pres_copy.version && pres_copy.version == pres_object.current_version
Expand All @@ -243,8 +243,10 @@ def update_online_version(status=nil, set_status_to_unexp_version=false)
handler_results.remove_db_updated_results unless transaction_ok
end

def raise_rollback_if_pc_po_version_mismatch(pc_version, po_version)
if pc_version != po_version
def raise_rollback_if_pc_po_version_mismatch(pres_copy)
unless pres_copy.matches_po_current_version?
pc_version = pres_copy.version
po_version = pres_copy.preserved_object.current_version
res_code = PreservedObjectHandlerResults::PC_PO_VERSION_MISMATCH
handler_results.add_result(res_code, { pc_version: pc_version, po_version: po_version })
raise ActiveRecord::Rollback, "PreservedCopy version #{pc_version} != PreservedObject current_version #{po_version}"
Expand Down Expand Up @@ -303,7 +305,7 @@ def confirm_online_version
# FIXME: what if there is more than one associated pres_copy?
pres_copy = PreservedCopy.find_by!(preserved_object: pres_object, endpoint: endpoint) if pres_object

raise_rollback_if_pc_po_version_mismatch(pres_copy.version, pres_object.current_version)
raise_rollback_if_pc_po_version_mismatch(pres_copy)

if incoming_version == pres_copy.version
set_status_as_seen_on_disk(pres_copy, true) unless pres_copy.status == PreservedCopy::OK_STATUS
Expand Down
5 changes: 3 additions & 2 deletions spec/services/preserved_object_handler_check_exist_spec.rb
Expand Up @@ -461,10 +461,11 @@
po_handler = described_class.new(druid, 1, 1, ep)
po = instance_double(PreservedObject)
pc = instance_double(PreservedCopy)
allow(PreservedObject).to receive(:find_by).with(druid: druid).and_return(po)
allow(PreservedObject).to receive(:find_by!).with(druid: druid).and_return(po)
allow(po).to receive(:current_version).and_return(1)
allow(po).to receive(:touch)
allow(PreservedCopy).to receive(:find_by).with(preserved_object: po, endpoint: ep).and_return(pc)
allow(PreservedCopy).to receive(:find_by!).with(preserved_object: po, endpoint: ep).and_return(pc)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
allow(pc).to receive(:status).and_return(PreservedCopy::OK_STATUS)
allow(pc).to receive(:version).and_return(1)
allow(pc).to receive(:update_audit_timestamps)
Expand Down
Expand Up @@ -264,6 +264,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!).and_raise(ActiveRecord::ActiveRecordError, 'foo')
allow(pc).to receive(:matches_po_current_version?).and_return(true)
allow(po).to receive(:current_version).and_return(2)
allow(po_handler).to receive(:moab_validation_errors).and_return([])
po_handler.confirm_version
Expand All @@ -288,6 +289,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
allow(po_handler).to receive(:moab_validation_errors).and_return([])
po_handler.confirm_version
expect(po).not_to have_received(:save!)
Expand All @@ -306,6 +308,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(false)
allow(pc).to receive(:touch)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
po_handler.confirm_version
expect(po).not_to have_received(:touch)
expect(pc).to have_received(:touch)
Expand Down
4 changes: 4 additions & 0 deletions spec/services/preserved_object_handler_update_version_spec.rb
Expand Up @@ -160,6 +160,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!).and_raise(ActiveRecord::ActiveRecordError, 'foo')
allow(pc).to receive(:matches_po_current_version?).and_return(true)
po_handler.update_version
end

Expand Down Expand Up @@ -202,6 +203,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
po_handler.update_version
end

Expand Down Expand Up @@ -241,6 +243,7 @@
allow(pc).to receive(:update_audit_timestamps)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
po_handler.update_version
expect(po).to have_received(:save!)
expect(pc).to have_received(:save!)
Expand All @@ -259,6 +262,7 @@
allow(pc).to receive(:update_status)
allow(pc).to receive(:changed?).and_return(true)
allow(pc).to receive(:save!)
allow(pc).to receive(:matches_po_current_version?).and_return(true)
po_handler = described_class.new(druid, 1, 1, ep)
po_handler.update_version
expect(po).not_to have_received(:touch)
Expand Down

0 comments on commit 78f11c2

Please sign in to comment.