#!/usr/bin/perl 

use warnings;
use strict;


#
# This test script validates that when merging two tickets, the comments from both tickets
# are integrated into the new ticket

use Test::More tests => 13;
use RT;
RT::LoadConfig;
RT::Init;

use_ok('RT::Ticket');
use_ok('RT::Queue');

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 ($tid,$transid, $t1msg) =$t1->Create ( Queue => $queue->Name, Subject => 'Merge test. orig');
ok ($tid, $t1msg);
($id, $msg) = $t1->Comment(Content => 'This is a Comment on the original');
ok($id,$msg);

my $txns = $t1->Transactions;
my $Comments = 0;
while (my $txn = $txns->Next) {
$Comments++ if ($txn->Type eq 'Comment');
}
is($Comments,1, "our first ticket has only one Comment");

my $t2 = RT::Ticket->new($RT::SystemUser);
my ($t2id,$t2transid, $t2msg) =$t2->Create ( Queue => $queue->Name, Subject => 'Merge test. duplicate');
ok ($t2id, $t2msg);



($id, $msg) = $t2->Comment(Content => 'This is a commet on the duplicate');
ok($id,$msg);


$txns = $t2->Transactions;
 $Comments = 0;
while (my $txn = $txns->Next) {
    $Comments++ if ($txn->Type eq 'Comment');
}
is($Comments,1, "our second ticket has only one Comment");

($id, $msg) = $t1->Comment(Content => 'This is a second  Comment on the original');
ok($id,$msg);

$txns = $t1->Transactions;
$Comments = 0;
while (my $txn = $txns->Next) {
    $Comments++ if ($txn->Type eq 'Comment');
}
is($Comments,2, "our first ticket now has two Comments");

($id,$msg) = $t2->MergeInto($t1->id);

ok($id,$msg);
$txns = $t1->Transactions;
$Comments = 0;
while (my $txn = $txns->Next) {
    $Comments++ if ($txn->Type eq 'Comment');
}
is($Comments,3, "our first ticket now has three Comments - we merged safely");