[Rt-commit] rt branch, 5.0/allow-ticket-unmerging, updated. rt-5.0.0-230-g46b341f6e9

Dianne Skoll dianne at bestpractical.com
Thu Jan 21 10:50:20 EST 2021


The branch, 5.0/allow-ticket-unmerging has been updated
       via  46b341f6e994d63d3e76154723ee30df7566950d (commit)
       via  8ab8f7090df7d0bdd4a36e459890e98215e70f46 (commit)
      from  769f1ebc7eef1f8fac82db68d2c84c80c9284ef9 (commit)

Summary of changes:
 lib/RT/Ticket.pm   | 14 +++++++--
 t/ticket/unmerge.t | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+), 3 deletions(-)
 create mode 100644 t/ticket/unmerge.t

- Log -----------------------------------------------------------------
commit 8ab8f7090df7d0bdd4a36e459890e98215e70f46
Author: Dianne Skoll <dianne at bestpractical.com>
Date:   Thu Jan 21 10:38:38 2021 -0500

    Add unit test for unmerging tickets

diff --git a/t/ticket/unmerge.t b/t/ticket/unmerge.t
new file mode 100644
index 0000000000..58799dce80
--- /dev/null
+++ b/t/ticket/unmerge.t
@@ -0,0 +1,87 @@
+use strict;
+use warnings;
+
+use RT::Test tests => 19;
+
+# Load $CurrentUser
+my $CurrentUser = RT->SystemUser;
+
+my $queue = RT::Queue->new($CurrentUser);
+$queue->Load('General') || Abort(loc("Queue could not be loaded."));
+
+my $main_ticket = RT::Ticket->new( $CurrentUser );
+my ($main_id) = $main_ticket->Create( Subject => 'test main', Queue => $queue->Id,);
+ok($main_id, "main ticket created");
+
+# init
+my $to_merge_ticket = RT::Ticket->new( $CurrentUser );
+my ($to_merge_id) = $to_merge_ticket->Create( Subject => 'test to merge', Queue => $queue->Id,);
+ok($to_merge_id, "We created a ticket to be merged");
+
+my $linked_ticket = RT::Ticket->new( $CurrentUser );
+my ($linked_id) = $linked_ticket->Create( Subject => 'test linked', Queue => $queue->Id,);
+ok($linked_id, "We created a linked ticket");
+my( $link_id)= $linked_ticket->AddLink( Target => $to_merge_ticket->URI, Type => 'RefersTo');
+ok($link_id, "Ticket is linked");
+
+my $link_pre_merge= first_link( $linked_ticket);
+is( $link_pre_merge->Target, $to_merge_ticket->URI, "link points to to_merge (pre-merge)");
+
+# merge
+my( $ok, $msg ) = $to_merge_ticket->MergeInto( $main_id);
+ok($ok, "Ticket is merged: $msg");
+
+is( $to_merge_ticket->Id, $main_id, "to_merge_ticket replaced by main_ticket after merge");
+$to_merge_ticket->LoadById( $to_merge_id);
+is( $to_merge_ticket->Id, $to_merge_id, "to_merge_ticket still exists");
+is( $to_merge_ticket->EffectiveId, $main_id, "EffectiveId updated by merge");
+
+my @merged= $main_ticket->Merged;
+is( $merged[0], $to_merge_id, "to_merge in ->Merged");
+
+my $linked_ticket_id = $linked_ticket->Id;
+$linked_ticket = RT::Ticket->new( $CurrentUser );
+( $ok, $msg ) = $linked_ticket->Load( $linked_ticket_id );
+ok( $ok, "Reloaded linked ticket");
+my $link_post_merge = first_link( $linked_ticket );
+is( $link_post_merge->Target, $main_ticket->URI, "link now points to main");
+
+# unmerge
+$to_merge_ticket = RT::Ticket->new( $CurrentUser );
+$to_merge_ticket->FlushCache;
+( $ok, $msg ) = $to_merge_ticket->LoadById($to_merge_id);
+ok( $ok, "Reloaded merged ticket $msg");
+
+( $ok, $msg ) = $to_merge_ticket->UnmergeFrom( $main_ticket );
+ok( $ok, "unmerge succeeded $msg");
+$to_merge_ticket->FlushCache;
+
+# Reload after unmerging, using regular Load method
+my $unmerged = RT::Ticket->new( $CurrentUser );
+( $ok, $msg ) = $unmerged->Load($to_merge_id);
+
+ok( $ok, "Loaded unmerged ticket");
+is( $unmerged->Id, $to_merge_id, "Id resolves to pre-merge id");
+is( $unmerged->EffectiveId, $to_merge_id, "EffectiveId updated by unmerge");
+
+$linked_ticket = RT::Ticket->new( $CurrentUser );
+( $ok, $msg ) = $linked_ticket->Load( $linked_ticket_id );
+ok( $ok, "Reloaded linked ticket");
+
+my $link_post_unmerge = first_link( $linked_ticket);
+is( $link_post_unmerge->Target, $unmerged->URI, "link now points to to_merge again");
+
+done_testing();
+
+sub first_link {
+    my( $ticket, $direction, $type)= @_;
+    $direction //= 'Base';
+    $type      //= 'RefersTo';
+    my $links = $ticket->_Links( $direction, $type);
+    my $link  = $links->First;
+    #$links->Last; # or subsequent calls to _links will return undef
+    return $link;
+}
+
+
+

commit 46b341f6e994d63d3e76154723ee30df7566950d
Author: Dianne Skoll <dianne at bestpractical.com>
Date:   Thu Jan 21 10:48:17 2021 -0500

    If we unmerge tickets merged on old RT, provide informative message
    
    We mention that some information may have been lost, and we also avoid
    RT from logging as follows:
    
    [error]: Unable to load merge data for 1 (/opt/rt5/local/plugins/RT-Extension-UnmergeTickets/lib/RT/Ticket_Overlay.pm:370)
    [warning]: Rollback and commit are mixed while escaping nested transaction at ...DBIx/SearchBuilder/Handle.pm line 892, <GEN45> line 64.

diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index e3a65115b7..9a161bcdab 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -2257,9 +2257,14 @@ sub _UnmergeFrom {
         }
     }
 
-    ($ok, $msg)= $self->RestoreMergeInfo( $merged_into);
-    if( ! $ok) {
-        return (0, $msg);
+    my $missing_info = 0;
+    if (! $merged_into->FirstAttribute('MergeInfo-' . $self->Id) ) {
+        $missing_info = 1;
+    } else {
+        ($ok, $msg)= $self->RestoreMergeInfo( $merged_into);
+        if( ! $ok) {
+            return (0, $msg);
+        }
     }
 
     # record the transaction, since all others have been silenced
@@ -2274,6 +2279,9 @@ sub _UnmergeFrom {
         return (0, $msg);
     }
 
+    if ($missing_info) {
+        return ( 1, $self->loc("Unmerge Successful, but some information may have been lost because Merge took place under an older version of RT") );
+    }
     return ( 1, $self->loc("Unmerge Successful") );
 }
 

-----------------------------------------------------------------------


More information about the rt-commit mailing list