6 use RT::Test::Shredder tests => 35;
7 my $test = "RT::Test::Shredder";
9 ### nested membership check
11 $test->create_savepoint('clean');
12 my $pgroup = RT::Group->new( RT->SystemUser );
13 my ($pgid) = $pgroup->CreateUserDefinedGroup( Name => 'Parent group' );
14 ok( $pgid, "created parent group" );
15 is( $pgroup->id, $pgid, "id is correct" );
17 my $cgroup = RT::Group->new( RT->SystemUser );
18 my ($cgid) = $cgroup->CreateUserDefinedGroup( Name => 'Child group' );
19 ok( $cgid, "created child group" );
20 is( $cgroup->id, $cgid, "id is correct" );
22 my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
23 ok( $status, "added child group to parent") or diag "error: $msg";
25 $test->create_savepoint('bucreate'); # before user create
26 my $user = RT::User->new( RT->SystemUser );
28 ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
29 ok( $uid, "created new user" ) or diag "error: $msg";
30 is( $user->id, $uid, "id is correct" );
32 $test->create_savepoint('buadd'); # before group add
33 ($status, $msg) = $cgroup->AddMember( $user->id );
34 ok( $status, "added user to child group") or diag "error: $msg";
36 my $members = RT::GroupMembers->new( RT->SystemUser );
37 $members->Limit( FIELD => 'MemberId', VALUE => $uid );
38 $members->Limit( FIELD => 'GroupId', VALUE => $cgid );
39 is( $members->Count, 1, "find membership record" );
41 my $transactions = RT::Transactions->new(RT->SystemUser);
42 $transactions->_OpenParen('member');
43 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'Type', VALUE => 'AddMember');
44 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'Field', VALUE => $user->PrincipalObj->id, ENTRYAGGREGATOR => 'AND' );
45 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'ObjectId', VALUE => $cgroup->id, ENTRYAGGREGATOR => 'AND' );
46 $transactions->_CloseParen('member');
47 $transactions->_OpenParen('member');
48 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'Type', VALUE => 'AddMembership');
49 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'Field', VALUE => $cgroup->PrincipalObj->id, ENTRYAGGREGATOR => 'AND' );
50 $transactions->Limit( SUBCLAUSE => 'member', FIELD => 'ObjectId', VALUE => $user->id, ENTRYAGGREGATOR => 'AND' );
51 $transactions->_CloseParen('member');
52 is( $transactions->Count, 2, "find membership transaction records" );
54 my $shredder = $test->shredder_new();
55 $shredder->PutObjects( Objects => [$members, $transactions] );
56 $shredder->WipeoutAll();
58 cmp_deeply( $test->dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
60 $shredder->PutObjects( Objects => $user );
61 $shredder->WipeoutAll();
63 cmp_deeply( $test->dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
65 $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
66 $shredder->WipeoutAll();
68 cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
71 ### deleting member of the ticket AdminCc role group
73 $test->restore_savepoint('clean');
75 my $user = RT::User->new( RT->SystemUser );
76 my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
77 ok( $uid, "created new user" ) or diag "error: $msg";
78 is( $user->id, $uid, "id is correct" );
81 my $queue = RT::Queue->new( RT->SystemUser );
82 $queue->Load('general');
83 ok( $queue->id, "queue loaded succesfully" );
86 my $ticket = RT::Ticket->new( RT->SystemUser );
87 my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
88 ok( $id, "created new ticket" );
89 $ticket = RT::Ticket->new( RT->SystemUser );
91 ($status, $msg) = $ticket->Load( $id );
92 ok( $id, "load ticket" ) or diag( "error: $msg" );
94 ($status, $msg) = $ticket->AddWatcher( Type => "AdminCc", PrincipalId => $user->id );
95 ok( $status, "AdminCC successfuly added") or diag( "error: $msg" );
97 my $member = $ticket->AdminCc->MembersObj->First;
98 my $shredder = $test->shredder_new();
99 $shredder->PutObjects( Objects => $member );
100 $shredder->WipeoutAll();
103 $shredder->PutObjects( Objects => $user );
104 $shredder->WipeoutAll();
108 ### deleting member of the ticket Owner role group
110 $test->restore_savepoint('clean');
112 my $user = RT::User->new( RT->SystemUser );
113 my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
114 ok( $uid, "created new user" ) or diag "error: $msg";
115 is( $user->id, $uid, "id is correct" );
118 my $queue = RT::Queue->new( RT->SystemUser );
119 $queue->Load('general');
120 ok( $queue->id, "queue loaded succesfully" );
122 $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
125 my $ticket = RT::Ticket->new( RT->SystemUser );
126 my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
127 ok( $id, "created new ticket" );
128 $ticket = RT::Ticket->new( RT->SystemUser );
130 ($status, $msg) = $ticket->Load( $id );
131 ok( $id, "load ticket" ) or diag( "error: $msg" );
133 ($status, $msg) = $ticket->SetOwner( $user->id );
134 ok( $status, "owner successfuly set") or diag( "error: $msg" );
135 is( $ticket->Owner, $user->id, "owner successfuly set") or diag( "error: $msg" );
137 my $member = $ticket->OwnerGroup->MembersObj->First;
138 my $shredder = $test->shredder_new();
139 $shredder->PutObjects( Objects => $member );
140 $shredder->WipeoutAll();
143 $ticket = RT::Ticket->new( RT->SystemUser );
144 ($status, $msg) = $ticket->Load( $id );
145 ok( $id, "load ticket" ) or diag( "error: $msg" );
146 is( $ticket->Owner, RT->Nobody->id, "owner switched back to nobody" );
147 is( $ticket->OwnerGroup->MembersObj->First->MemberId, RT->Nobody->id, "and owner role group member is nobody");