#!/sw/bin/perl5.8.6
use strict;
#use Test::More qw/no_plan/;
use Test::More tests => 16;
use RT;
RT::LoadConfig();
RT::Init;
use RT::Extension::MergeUsers;
my ($id, $message);
# make sure the extension is installed
use_ok('RT::Extension::MergeUsers');
# create N unique users ($$ == our pid)
my $primary_user = RT::User->new($RT::SystemUser);
($id, $message) = $primary_user->Create( EmailAddress => "primary-$$\@example.com" );
ok($id, "Created 'primary' user? $message");
my $secondary_user = RT::User->new($RT::SystemUser);
($id, $message) = $secondary_user->Create( EmailAddress => "secondary-$$\@example.com" );
ok($id, "Created 'secondary' user? $message");
my $tertiary_user = RT::User->new($RT::SystemUser);
($id, $message) = $tertiary_user->Create( EmailAddress => "tertiary-$$\@example.com" );
ok($id, "Created 'tertiary' user? $message");
my $quaternary_user = RT::User->new($RT::SystemUser);
($id, $message) = $quaternary_user->Create( EmailAddress => "quaternary-$$\@example.com" );
ok($id, "Created 'quaternary' user? $message");
# load a nonexistent user
my $nonexistent_user = RT::User->new($RT::SystemUser);
#or, rather, don't load anything at all
# module should error if there isn't a valid user
($id, $message) = $primary_user->MergeInto($nonexistent_user);
ok(!$id, "Doesn't merge into non-existent users? $message");
# a user should not be able to be merged into itself
($id, $message) = $primary_user->MergeInto($primary_user);
ok(!$id, "Doesn't merge a user into itself? $message");
# successfully merges users
($id, $message) = $secondary_user->MergeInto($primary_user);
ok($id, "Successfully merges users? $message");
# recognizes already-merged users
($id, $message) = $secondary_user->MergeInto($primary_user);
ok(!$id, "Recognizes secondary as child? $message");
($id, $message) = $primary_user->MergeInto($secondary_user);
ok(!$id, "Recognizes primary as parent? $message");
# DTRT with multiple inheritance
$quaternary_user->MergeInto($tertiary_user);
($id, $message) = $tertiary_user->MergeInto($primary_user);
ok($id, "Merges users with children? $message");
# recognizes siblings
($id, $message) = $tertiary_user->MergeInto($secondary_user);
ok(!$id, "Recognizes siblings? $message");
# recognizes children of children as children of the primary
($id, $message) = $quaternary_user->MergeInto($primary_user);
ok(!$id, "Recognizes children of children? $message");
# Associates tickets from a secondary address with the primary address
my $ticket = RT::Ticket->new($RT::SystemUser);
my $transaction_obj;
($id, $transaction_obj, $message)
= $ticket->Create( Requestor => ["secondary-$$\@example.com"],
Queue => 'general',
Subject => 'MergeUsers test',
);
ok($ticket->RequestorAddresses =~ /primary-$$\@example.com/, "Canonicalizes tickets properly: @{[$ticket->RequestorAddresses]}");
# allows unmerging
($id, $message) = $secondary_user->UnMerge;
ok($id, "Unmerges users? $message");
# Associates tickets from unmerged address with the secondary address
my $ticket2 = RT::Ticket->new($RT::SystemUser);
($id, $transaction_obj, $message)
= $ticket2->Create( Requestor => ["secondary-$$\@example.com"],
Queue => 'general',
Subject => 'UnMergeUsers test',
);
ok($ticket2->RequestorAddresses =~ /secondary-$$\@example.com/, "Unmerges tickets properly: @{[$ticket2->RequestorAddresses]}");
1;