8 use Test::More tests => 22;
11 my $shredder_utils = RT::Test::get_relocatable_file('utils.pl',
12 File::Spec->curdir());
13 require $shredder_utils;
18 ### nested membership check
20 create_savepoint('clean');
21 my $pgroup = RT::Group->new( $RT::SystemUser );
22 my ($pgid) = $pgroup->CreateUserDefinedGroup( Name => 'Parent group' );
23 ok( $pgid, "created parent group" );
24 is( $pgroup->id, $pgid, "id is correct" );
26 my $cgroup = RT::Group->new( $RT::SystemUser );
27 my ($cgid) = $cgroup->CreateUserDefinedGroup( Name => 'Child group' );
28 ok( $cgid, "created child group" );
29 is( $cgroup->id, $cgid, "id is correct" );
31 my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
32 ok( $status, "added child group to parent") or diag "error: $msg";
34 create_savepoint('bucreate'); # before user create
35 my $user = RT::User->new( $RT::SystemUser );
37 ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
38 ok( $uid, "created new user" ) or diag "error: $msg";
39 is( $user->id, $uid, "id is correct" );
41 create_savepoint('buadd'); # before group add
42 ($status, $msg) = $cgroup->AddMember( $user->id );
43 ok( $status, "added user to child group") or diag "error: $msg";
45 my $members = RT::GroupMembers->new( $RT::SystemUser );
46 $members->Limit( FIELD => 'MemberId', VALUE => $uid );
47 $members->Limit( FIELD => 'GroupId', VALUE => $cgid );
48 is( $members->Count, 1, "find membership record" );
50 my $shredder = shredder_new();
51 $shredder->PutObjects( Objects => $members );
52 $shredder->WipeoutAll();
53 cmp_deeply( dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
55 $shredder->PutObjects( Objects => $user );
56 $shredder->WipeoutAll();
57 cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
59 $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
60 $shredder->WipeoutAll();
61 cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
64 ### deleting member of the ticket Owner role group
66 restore_savepoint('clean');
68 my $user = RT::User->new( $RT::SystemUser );
69 my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
70 ok( $uid, "created new user" ) or diag "error: $msg";
71 is( $user->id, $uid, "id is correct" );
74 my $queue = new RT::Queue( $RT::SystemUser );
75 $queue->Load('general');
76 ok( $queue->id, "queue loaded succesfully" );
78 $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
81 my $ticket = RT::Ticket->new( $RT::SystemUser );
82 my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
83 ok( $id, "created new ticket" );
84 $ticket = RT::Ticket->new( $RT::SystemUser );
86 ($status, $msg) = $ticket->Load( $id );
87 ok( $id, "load ticket" ) or diag( "error: $msg" );
89 ($status, $msg) = $ticket->SetOwner( $user->id );
90 ok( $status, "owner successfuly set") or diag( "error: $msg" );
91 is( $ticket->Owner, $user->id, "owner successfuly set") or diag( "error: $msg" );
93 my $member = $ticket->OwnerGroup->MembersObj->First;
94 my $shredder = shredder_new();
95 $shredder->PutObjects( Objects => $member );
96 $shredder->WipeoutAll();
98 $ticket = RT::Ticket->new( $RT::SystemUser );
99 ($status, $msg) = $ticket->Load( $id );
100 ok( $id, "load ticket" ) or diag( "error: $msg" );
101 is( $ticket->Owner, $RT::Nobody->id, "owner switched back to nobody" );
102 is( $ticket->OwnerGroup->MembersObj->First->MemberId, $RT::Nobody->id, "and owner role group member is nobody");