8 use Test::More tests => 21;
11 my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
12 File::Spec->curdir());
13 require $shredder_utils;
17 my @ARGS = sort qw(limit status name member_of email replace_relations no_tickets);
19 use_ok('RT::Shredder::Plugin::Users');
21 my $plugin = RT::Shredder::Plugin::Users->new;
22 isa_ok($plugin, 'RT::Shredder::Plugin::Users');
24 is(lc $plugin->Type, 'search', 'correct type');
26 my @args = sort $plugin->SupportArgs;
27 cmp_deeply(\@args, \@ARGS, "support all args");
30 my ($status, $msg) = $plugin->TestArgs( name => 'r??t*' );
31 ok($status, "arg name = 'r??t*'") or diag("error: $msg");
33 for (qw(any disabled enabled)) {
34 my ($status, $msg) = $plugin->TestArgs( status => $_ );
35 ok($status, "arg status = '$_'") or diag("error: $msg");
37 ($status, $msg) = $plugin->TestArgs( status => '!@#' );
38 ok(!$status, "bad 'status' arg value");
44 { Principal => 'Everyone', Right => [qw(CreateTicket)] },
47 create_savepoint('clean');
49 { # Create two users and a ticket. Shred second user and replace relations with first user
50 my ($uidA, $uidB, $msg);
51 my $userA = RT::User->new( RT->SystemUser );
52 ($uidA, $msg) = $userA->Create( Name => 'userA', Privileged => 1, Disabled => 0 );
53 ok( $uidA, "created user A" ) or diag "error: $msg";
55 my $userB = RT::User->new( RT->SystemUser );
56 ($uidB, $msg) = $userB->Create( Name => 'userB', Privileged => 1, Disabled => 0 );
57 ok( $uidB, "created user B" ) or diag "error: $msg";
60 my $ticket = RT::Ticket->new( RT::CurrentUser->new($userB) );
61 ($tid, $trid, $msg) = $ticket->Create( Subject => 'UserB Ticket', Queue => 1 );
62 ok( $tid, "created new ticket") or diag "error: $msg";
64 my $transaction = RT::Transaction->new( RT->SystemUser );
65 $transaction->Load($trid);
66 is ( $transaction->Creator, $uidB, "ticket creator is user B" );
68 my $plugin = RT::Shredder::Plugin::Users->new;
69 isa_ok($plugin, 'RT::Shredder::Plugin::Users');
72 ($status, $msg) = $plugin->TestArgs( status => 'any', name => 'userB', replace_relations => $uidA );
73 ok($status, "plugin arguments are ok") or diag "error: $msg";
76 ($status, @objs) = $plugin->Run;
77 ok($status, "executed plugin successfully") or diag "error: @objs";
78 @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
79 is(scalar @objs, 1, "one object in the result set");
81 my $shredder = shredder_new();
83 ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder );
84 ok($status, "set conflicts resolver") or diag "error: $msg";
86 $shredder->PutObjects( Objects => \@objs );
87 $shredder->WipeoutAll;
89 $ticket->Load( $tid );
90 is($ticket->id, $tid, 'loaded ticket');
92 $transaction->Load($trid);
93 is ( $transaction->Creator, $uidA, "ticket creator is now user A" );
95 $shredder->Wipeout( Object => $ticket );
96 $shredder->Wipeout( Object => $userA );
98 cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");