Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / rt / t / shredder / 03plugin_users.t
1
2 use strict;
3 use warnings;
4
5 use Test::Deep;
6 use File::Spec;
7 use Test::More tests => 21 + 1; # plus one for warnings check
8 use RT::Test ();
9 BEGIN {
10     my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
11         File::Spec->curdir());
12     require $shredder_utils;
13 }
14
15
16 my @ARGS = sort qw(limit status name member_of email replace_relations no_tickets);
17
18 use_ok('RT::Shredder::Plugin::Users');
19 {
20     my $plugin = RT::Shredder::Plugin::Users->new;
21     isa_ok($plugin, 'RT::Shredder::Plugin::Users');
22
23     is(lc $plugin->Type, 'search', 'correct type');
24
25     my @args = sort $plugin->SupportArgs;
26     cmp_deeply(\@args, \@ARGS, "support all args");
27
28
29     my ($status, $msg) = $plugin->TestArgs( name => 'r??t*' );
30     ok($status, "arg name = 'r??t*'") or diag("error: $msg");
31
32     for (qw(any disabled enabled)) {
33         my ($status, $msg) = $plugin->TestArgs( status => $_ );
34         ok($status, "arg status = '$_'") or diag("error: $msg");
35     }
36     ($status, $msg) = $plugin->TestArgs( status => '!@#' );
37     ok(!$status, "bad 'status' arg value");
38 }
39
40 init_db();
41
42 RT::Test->set_rights(
43     { Principal => 'Everyone', Right => [qw(CreateTicket)] },
44 );
45
46 create_savepoint('clean');
47
48 { # Create two users and a ticket. Shred second user and replace relations with first user
49     my ($uidA, $uidB, $msg);
50     my $userA = RT::User->new( RT->SystemUser );
51     ($uidA, $msg) = $userA->Create( Name => 'userA', Privileged => 1, Disabled => 0 );
52     ok( $uidA, "created user A" ) or diag "error: $msg";
53
54     my $userB = RT::User->new( RT->SystemUser );
55     ($uidB, $msg) = $userB->Create( Name => 'userB', Privileged => 1, Disabled => 0 );
56     ok( $uidB, "created user B" ) or diag "error: $msg";
57
58     my ($tid, $trid);
59     my $ticket = RT::Ticket->new( RT::CurrentUser->new($userB) );
60     ($tid, $trid, $msg) = $ticket->Create( Subject => 'UserB Ticket', Queue => 1 );
61     ok( $tid, "created new ticket") or diag "error: $msg";
62
63     my $transaction = RT::Transaction->new( RT->SystemUser );
64     $transaction->Load($trid);
65     is ( $transaction->Creator, $uidB, "ticket creator is user B" );
66
67     my $plugin = RT::Shredder::Plugin::Users->new;
68     isa_ok($plugin, 'RT::Shredder::Plugin::Users');
69
70     my $status;
71     ($status, $msg) = $plugin->TestArgs( status => 'any', name => 'userB', replace_relations => $uidA );
72     ok($status, "plugin arguments are ok") or diag "error: $msg";
73
74     my @objs;
75     ($status, @objs) = $plugin->Run;
76     ok($status, "executed plugin successfully") or diag "error: @objs";
77     @objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
78     is(scalar @objs, 1, "one object in the result set");
79
80     my $shredder = shredder_new();
81
82     ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder );
83     ok($status, "set conflicts resolver") or diag "error: $msg";
84
85     $shredder->PutObjects( Objects => \@objs );
86     $shredder->WipeoutAll;
87
88     $ticket->Load( $tid );
89     is($ticket->id, $tid, 'loaded ticket');
90
91     $transaction->Load($trid);
92     is ( $transaction->Creator, $uidA, "ticket creator is now user A" );
93
94     $shredder->Wipeout( Object => $ticket );
95     $shredder->Wipeout( Object => $userA );
96 }
97 cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");