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