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