import rt 3.8.7
[freeside.git] / rt / t / shredder / 02group_member.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 => 22;
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 ### nested membership check
19 {
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" );
25         
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" );
30         
31         my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
32         ok( $status, "added child group to parent") or diag "error: $msg";
33         
34         create_savepoint('bucreate'); # before user create
35         my $user = RT::User->new( $RT::SystemUser );
36         my $uid;
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" );
40         
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";
44         
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" );
49         
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");
54         
55         $shredder->PutObjects( Objects => $user );
56         $shredder->WipeoutAll();
57         cmp_deeply( dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
58         
59         $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
60         $shredder->WipeoutAll();
61         cmp_deeply( dump_current_and_savepoint('clean'), "current DB equal to savepoint");
62 }
63
64 ### deleting member of the ticket Owner role group
65 {
66         restore_savepoint('clean');
67
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" );
72
73         use RT::Queue;
74         my $queue = new RT::Queue( $RT::SystemUser );
75         $queue->Load('general');
76         ok( $queue->id, "queue loaded succesfully" );
77
78         $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
79
80         use RT::Tickets;
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 );
85         my $status;
86         ($status, $msg) = $ticket->Load( $id );
87         ok( $id, "load ticket" ) or diag( "error: $msg" );
88
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" );
92
93         my $member = $ticket->OwnerGroup->MembersObj->First;
94         my $shredder = shredder_new();
95         $shredder->PutObjects( Objects => $member );
96         $shredder->WipeoutAll();
97
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");
103 }