RT 4.0.13
[freeside.git] / rt / t / shredder / 02group_member.t
1
2 use strict;
3 use warnings;
4
5 use Test::Deep;
6 use File::Spec;
7 use Test::More tests => 22 + 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 ### nested membership check
18 {
19         create_savepoint('clean');
20         my $pgroup = RT::Group->new( RT->SystemUser );
21         my ($pgid) = $pgroup->CreateUserDefinedGroup( Name => 'Parent group' );
22         ok( $pgid, "created parent group" );
23         is( $pgroup->id, $pgid, "id is correct" );
24         
25         my $cgroup = RT::Group->new( RT->SystemUser );
26         my ($cgid) = $cgroup->CreateUserDefinedGroup( Name => 'Child group' );
27         ok( $cgid, "created child group" );
28         is( $cgroup->id, $cgid, "id is correct" );
29         
30         my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
31         ok( $status, "added child group to parent") or diag "error: $msg";
32         
33         create_savepoint('bucreate'); # before user create
34         my $user = RT::User->new( RT->SystemUser );
35         my $uid;
36         ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
37         ok( $uid, "created new user" ) or diag "error: $msg";
38         is( $user->id, $uid, "id is correct" );
39         
40         create_savepoint('buadd'); # before group add
41         ($status, $msg) = $cgroup->AddMember( $user->id );
42         ok( $status, "added user to child group") or diag "error: $msg";
43         
44         my $members = RT::GroupMembers->new( RT->SystemUser );
45         $members->Limit( FIELD => 'MemberId', VALUE => $uid );
46         $members->Limit( FIELD => 'GroupId', VALUE => $cgid );
47         is( $members->Count, 1, "find membership record" );
48         
49         my $shredder = shredder_new();
50         $shredder->PutObjects( Objects => $members );
51         $shredder->WipeoutAll();
52         cmp_deeply( dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
53         
54         $shredder->PutObjects( Objects => $user );
55         $shredder->WipeoutAll();
56         cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
57         
58         $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
59         $shredder->WipeoutAll();
60         cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
61 }
62
63 ### deleting member of the ticket Owner role group
64 {
65         restore_savepoint('clean');
66
67         my $user = RT::User->new( RT->SystemUser );
68         my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
69         ok( $uid, "created new user" ) or diag "error: $msg";
70         is( $user->id, $uid, "id is correct" );
71
72         use RT::Queue;
73         my $queue = RT::Queue->new( RT->SystemUser );
74         $queue->Load('general');
75         ok( $queue->id, "queue loaded succesfully" );
76
77         $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
78
79         use RT::Tickets;
80         my $ticket = RT::Ticket->new( RT->SystemUser );
81         my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
82         ok( $id, "created new ticket" );
83         $ticket = RT::Ticket->new( RT->SystemUser );
84         my $status;
85         ($status, $msg) = $ticket->Load( $id );
86         ok( $id, "load ticket" ) or diag( "error: $msg" );
87
88         ($status, $msg) = $ticket->SetOwner( $user->id );
89         ok( $status, "owner successfuly set") or diag( "error: $msg" );
90         is( $ticket->Owner, $user->id, "owner successfuly set") or diag( "error: $msg" );
91
92         my $member = $ticket->OwnerGroup->MembersObj->First;
93         my $shredder = shredder_new();
94         $shredder->PutObjects( Objects => $member );
95         $shredder->WipeoutAll();
96
97         $ticket = RT::Ticket->new( RT->SystemUser );
98         ($status, $msg) = $ticket->Load( $id );
99         ok( $id, "load ticket" ) or diag( "error: $msg" );
100         is( $ticket->Owner, RT->Nobody->id, "owner switched back to nobody" );
101         is( $ticket->OwnerGroup->MembersObj->First->MemberId, RT->Nobody->id, "and owner role group member is nobody");
102 }