require 'test/unit' require 'set' class RM_Common_Change_Control_Test < Test::Unit::TestCase def setup object_version_id1 = ObjectVersionId.new('ABC::DEF::2.2.3') object_version_id2 = ObjectVersionId.new('GHI::JKL::4.5.6') object_id = ObjectId.new('ehr://uniqueid1020') dv_date_time = OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-06T21:10:12') party_ref = PartyRef.new('unknown', 'ORGANISATION', object_id) party_proxy = OpenEhr::RM::Common::Generic::PartyProxy.new(:external_ref => party_ref) terminology_id = TerminologyId.new('openehr(1.0.2)') code_phrase = OpenEhr::RM::DataTypes::Text::CodePhrase.new('249', terminology_id) dv_coded_text = OpenEhr::RM::DataTypes::Text::DvCodedText.new('creation', code_phrase) audit_details = OpenEhr::RM::Common::Generic::AuditDetails.new(:system_id => 'MAGI', :committer => party_proxy, :time_committed => dv_date_time, :change_type => dv_coded_text) code_phrase = OpenEhr::RM::DataTypes::Text::CodePhrase.new('532', terminology_id) dv_coded_text = OpenEhr::RM::DataTypes::Text::DvCodedText.new('complete', code_phrase) object_id = ObjectId.new('ehr://test_location') object_ref = ObjectRef.new('local', 'PARTY', object_id) hier_object_id = HierObjectId.new('ABC') assert_nothing_raised(Exception){ @version = OpenEhr::RM::Common::ChangeControl::Version.new(:uid => object_version_id1, :preceding_version_uid => object_version_id2, :lifecycle_state => dv_coded_text, :commit_audit => audit_details, :contribution => object_ref, :signature => 'test_version', :data => 'data')} object_version_id3 = ObjectVersionId.new('MNO::PQR::7.8.9') object_version_id4 = ObjectVersionId.new('STU::VWX::1.2.3') code_phrase = OpenEhr::RM::DataTypes::Text::CodePhrase.new('240', terminology_id) dv_coded_text2 = OpenEhr::RM::DataTypes::Text::DvCodedText.new('signed', code_phrase) attestation = OpenEhr::RM::Common::Generic::Attestation.new(:system_id => 'NERV', :committer => party_proxy, :time_committed => dv_date_time, :change_type => dv_coded_text, :reason => OpenEhr::RM::DataTypes::Text::DvText.new('signed')) dv_date_time = OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-07T21:10:12') audit_details = OpenEhr::RM::Common::Generic::AuditDetails.new(:system_id => 'MAGI', :committer => party_proxy, :time_committed => dv_date_time, :change_type => dv_coded_text) assert_nothing_raised(Exception){ @original_version = OpenEhr::RM::Common::ChangeControl::OriginalVersion.new(:uid => object_version_id3, :preceding_version_uid => object_version_id4, :other_input_version_uids => Set[object_version_id1, object_version_id2], :commit_audit => audit_details, :contribution => object_ref, :attestations => [attestation], :data => 'data', :lifecycle_state => dv_coded_text)} dv_date_time = OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-08T21:10:12') audit_details = OpenEhr::RM::Common::Generic::AuditDetails.new(:system_id => 'CASPER', :committer => party_proxy, :time_committed => dv_date_time, :change_type => dv_coded_text, :description => 'for contribution') object_ref = ObjectRef.new('unknown', 'PARTY', object_id) assert_nothing_raised(Exception){ @imported_version = OpenEhr::RM::Common::ChangeControl::ImportedVersion.new(:item => @original_version, :commit_audit => audit_details, :contribution => object_ref, :signature => 'import test')} assert_nothing_raised(Exception){ @contribution = OpenEhr::RM::Common::ChangeControl::Contribution.new(:uid => hier_object_id, :versions => Set[object_ref], :audit => audit_details)} dv_date_time = OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-08T18:10:12') audit_details = OpenEhr::RM::Common::Generic::AuditDetails.new(:system_id => 'MAGI', :committer => party_proxy, :time_committed => dv_date_time, :change_type => dv_coded_text) @trunk_version = OpenEhr::RM::Common::ChangeControl::Version.new(:uid => object_version_id4, :lifecycle_state => dv_coded_text, :commit_audit => audit_details, :contribution => object_ref, :change_type => dv_coded_text) assert_nothing_raised(Exception){ @versioned_object = OpenEhr::RM::Common::ChangeControl::VersionedObject.new(:uid => hier_object_id, :owner_id => object_ref, :time_created => dv_date_time, :all_versions => [@version,@original_version,@imported_version,@trunk_version])} end def test_init assert_instance_of OpenEhr::RM::Common::ChangeControl::Version, @version assert_instance_of OpenEhr::RM::Common::ChangeControl::OriginalVersion, @original_version assert_instance_of OpenEhr::RM::Common::ChangeControl::ImportedVersion, @imported_version assert_instance_of OpenEhr::RM::Common::ChangeControl::Contribution, @contribution assert_instance_of OpenEhr::RM::Common::ChangeControl::VersionedObject, @versioned_object end def test_version assert_equal 'ABC::DEF::2.2.3', @version.uid.value assert !@version.uid.version_tree_id.is_first? assert_equal 'GHI::JKL::4.5.6', @version.preceding_version_uid.value assert_equal '532', @version.lifecycle_state.defining_code.code_string assert_equal 'MAGI', @version.commit_audit.system_id assert_equal 'local', @version.contribution.namespace assert_equal 'test_version', @version.signature assert_equal 'ABC', @version.owner_id.value assert_equal 'data', @version.data assert @version.is_branch? end def test_original_version assert_equal 'MNO::PQR::7.8.9', @original_version.uid.value assert_equal 'NERV', @original_version.attestations[0].system_id end def test_imported_version assert_equal 'import test', @imported_version.signature assert_equal 'MNO::PQR::7.8.9', @imported_version.item.uid.value assert_equal 'CASPER', @imported_version.commit_audit.system_id assert_equal 'unknown', @imported_version.contribution.namespace assert_equal 'STU::VWX::1.2.3', @imported_version.preceding_version_uid.value assert_equal '532', @imported_version.lifecycle_state.defining_code.code_string end def test_contribution assert_equal 'ABC', @contribution.uid.value assert_equal 'PARTY', @contribution.versions.to_a[0].type assert_equal 'for contribution', @contribution.audit.description end def test_versioned_object assert_equal 'ABC', @versioned_object.uid.value assert_equal 'unknown', @versioned_object.owner_id.namespace assert_equal 18, @versioned_object.time_created.hour assert_equal [@version, @original_version, @imported_version, @trunk_version], @versioned_object.all_versions assert_equal 4, @versioned_object.version_count assert_equal [@version.uid, @original_version.uid, @imported_version.uid, @trunk_version.uid], @versioned_object.all_version_ids assert @versioned_object.has_version_id?(@version.uid) assert !@versioned_object.is_original_version?(@version.uid) assert @versioned_object.is_original_version?(@original_version.uid) assert @versioned_object.has_version_at_time?(OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-06T21:10:12')) assert_equal @version, @versioned_object.version_with_id(@version.uid) assert_equal @version, @versioned_object.version_at_time(@version.commit_audit.time_committed) assert_equal @imported_version, @versioned_object.latest_version assert_equal @trunk_version, @versioned_object.latest_trunk_version assert_equal 'complete', @versioned_object.trunk_lifecycle_state.value assert_equal '2009-07-08T18:10:12', @versioned_object.revision_history.most_recent_version_time_committed assert_nothing_raised(Exception){ @versioned_object.commit_original_version(:contribution => @original_version.contribution, :uid => @original_version.uid, :preceding_version_uid => @original_version.preceding_version_uid, :commit_audit => @original_version.commit_audit, :attestations => @original_version.attestations, :lifecycle_state => @original_version.lifecycle_state, :data => 'commit original', :signature => 'testtett')} assert_equal 5, @versioned_object.version_count assert_nothing_raised(Exception){ @versioned_object.commit_original_merged_version(:contribution => @original_version.contribution, :uid => @original_version.uid, :preceding_version_uid => @original_version.preceding_version_uid, :commit_audit => @original_version.commit_audit, :lifecycle_state => @original_version.lifecycle_state, :attestations => @original_version.attestations, :data => @original_version.data, :other_input_version_uids => @original_version.other_input_version_uids, :signature => @original_version.signature)} assert_equal 6, @versioned_object.version_count assert_nothing_raised(Exception){ @versioned_object.commit_imported_version(:contribution => @imported_version.contribution, :commit_audit => @imported_version.commit_audit, :item => @imported_version.item)} assert_equal 7, @versioned_object.version_count dv_date_time = OpenEhr::RM::DataTypes::Quantity::DateTime::DvDateTime.new('2009-07-07T22:11:31') attestation = Attestation.new(:system_id => 'NERV2', :committer => @version.contribution, :time_committed => dv_date_time, :change_type => @original_version.commit_audit.change_type, :reason => OpenEhr::RM::DataTypes::Text::DvText.new('signed')) assert_nothing_raised(Exception){ @versioned_object.commit_attestation(:attestation => attestation, :uid => @original_version.uid, :signature => 'new signature')} end end