RT 4.0.13
[freeside.git] / rt / t / shredder / 02user.t
1
2 use strict;
3 use warnings;
4
5 use Test::Deep;
6 use File::Spec;
7 use Test::More tests => 8 + 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 init_db();
15
16
17 create_savepoint('clean');
18
19 my $queue = RT::Queue->new( RT->SystemUser );
20 my ($qid) = $queue->Load( 'General' );
21 ok( $qid, "loaded queue" );
22
23 my $ticket = RT::Ticket->new( RT->SystemUser );
24 my ($tid) = $ticket->Create( Queue => $qid, Subject => 'test' );
25 ok( $tid, "ticket created" );
26
27 create_savepoint('bucreate'); # berfore user create
28 my $user = RT::User->new( RT->SystemUser );
29 my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
30 ok( $uid, "created new user" ) or diag "error: $msg";
31 is( $user->id, $uid, "id is correct" );
32 # HACK: set ticket props to enable VARIABLE dependencies
33 $ticket->__Set( Field => 'LastUpdatedBy', Value => $uid );
34 create_savepoint('aucreate'); # after user create
35
36 {
37     my $resolver = sub {
38         my %args = (@_);
39         my $t = $args{'TargetObject'};
40         my $resolver_uid = RT->SystemUser->id;
41         foreach my $method ( qw(Creator LastUpdatedBy) ) {
42             next unless $t->_Accessible( $method => 'read' );
43             $t->__Set( Field => $method, Value => $resolver_uid );
44         }
45     };
46     my $shredder = shredder_new();
47     $shredder->PutResolver( BaseClass => 'RT::User', Code => $resolver );
48     $shredder->Wipeout( Object => $user );
49     cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
50 }
51
52 {
53     restore_savepoint('aucreate');
54     my $user = RT::User->new( RT->SystemUser );
55     $user->Load($uid);
56     ok($user->id, "loaded user after restore");
57     my $shredder = shredder_new();
58     eval { $shredder->Wipeout( Object => $user ) };
59     ok($@, "wipeout throw exception if no resolvers");
60     cmp_deeply( dump_current_and_savepoint('aucreate'), "current DB equal to savepoint");
61 }