Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / rt / t / ticket / merge.t
index 7c72fe0..99c723b 100644 (file)
@@ -1,21 +1,20 @@
-#!/usr/bin/perl
 
 use strict;
 use warnings;
 
 
 use RT;
-use RT::Test tests => '29';
+use RT::Test tests => '44';
 
 
 # validate that when merging two tickets, the comments from both tickets
 # are integrated into the new ticket
 {
-    my $queue = RT::Queue->new($RT::SystemUser);
+    my $queue = RT::Queue->new(RT->SystemUser);
     my ($id,$msg) = $queue->Create(Name => 'MergeTest-'.rand(25));
     ok ($id,$msg);
 
-    my $t1 = RT::Ticket->new($RT::SystemUser);
+    my $t1 = RT::Ticket->new(RT->SystemUser);
     my ($tid,$transid, $t1msg) =$t1->Create(
         Queue => $queue->Name,
         Subject => 'Merge test. orig',
@@ -31,7 +30,7 @@ use RT::Test tests => '29';
     }
     is($Comments,1, "our first ticket has only one Comment");
 
-    my $t2 = RT::Ticket->new($RT::SystemUser);
+    my $t2 = RT::Ticket->new(RT->SystemUser);
     my ($t2id,$t2transid, $t2msg) =$t2->Create ( Queue => $queue->Name, Subject => 'Merge test. duplicate');
     ok ($t2id, $t2msg);
 
@@ -71,15 +70,15 @@ use RT::Test tests => '29';
 
 # when you try to merge duplicate links on postgres, eveyrything goes to hell due to referential integrity constraints.
 {
-    my $t = RT::Ticket->new($RT::SystemUser);
+    my $t = RT::Ticket->new(RT->SystemUser);
     $t->Create(Subject => 'Main', Queue => 'general');
 
     ok ($t->id);
-    my $t2 = RT::Ticket->new($RT::SystemUser);
+    my $t2 = RT::Ticket->new(RT->SystemUser);
     $t2->Create(Subject => 'Second', Queue => 'general');
     ok ($t2->id);
 
-    my $t3 = RT::Ticket->new($RT::SystemUser);
+    my $t3 = RT::Ticket->new(RT->SystemUser);
     $t3->Create(Subject => 'Third', Queue => 'general');
 
     ok ($t3->id);
@@ -135,3 +134,46 @@ ok $user && $user->id, 'loaded or created user';
     ($status,$msg) = $t->MergeInto($t2->id);
     ok($status, "Merged tickets: $msg");
 }
+
+# check Time* fields after merge
+{
+    my @tickets;
+    my @values = (
+        { Worked => 11, Estimated => 17, Left => 6 },
+        { Worked => 7, Estimated => 12, Left => 5 },
+    );
+
+    for my $i (0 .. 1) {
+        my $t = RT::Ticket->new(RT->SystemUser);
+        $t->Create( Queue => 'general');
+        ok ($t->id);
+        push @tickets, $t;
+
+        foreach my $field ( keys %{ $values[ $i ] } ) {
+            my $method = "SetTime$field";
+            my ($status, $msg) = $t->$method( $values[ $i ]{ $field } );
+            ok $status, "changed $field on the ticket"
+                or diag "error: $msg";
+        }
+    }
+
+    my ($status, $msg) = $tickets[1]->MergeInto($tickets[0]->id);
+    ok($status,$msg);
+
+    my $t = RT::Ticket->new(RT->SystemUser);
+    $t->Load( $tickets[0]->id );
+    foreach my $field ( keys %{ $values[0] } ) {
+        my $method = "Time$field";
+        my $expected = 0;
+        $expected += $_->{ $field } foreach @values;
+        is $t->$method, $expected, "correct value";
+
+        my $from_history = 0;
+        my $txns = $t->Transactions;
+        while ( my $txn = $txns->Next ) {
+            next unless $txn->Type eq 'Set' && $txn->Field eq $method;
+            $from_history += $txn->NewValue - $txn->OldValue;
+        }
+        is $from_history, $expected, "history is correct";
+    }
+}