fix ticketing system error on bootstrap of new install
[freeside.git] / rt / t / shredder / 02group_member.t
1
2 use strict;
3 use warnings;
4
5 use Test::Deep;
6 use RT::Test::Shredder tests => 34;
7 my $test = "RT::Test::Shredder";
8
9 ### nested membership check
10 {
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" );
16
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" );
21
22         my ($status, $msg) = $pgroup->AddMember( $cgroup->id );
23         ok( $status, "added child group to parent") or diag "error: $msg";
24
25         $test->create_savepoint('bucreate'); # before user create
26         my $user = RT::User->new( RT->SystemUser );
27         my $uid;
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" );
31
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";
35
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" );
40
41         my $shredder = $test->shredder_new();
42         $shredder->PutObjects( Objects => $members );
43         $shredder->WipeoutAll();
44         $test->db_is_valid;
45         cmp_deeply( $test->dump_current_and_savepoint('buadd'), "current DB equal to savepoint");
46
47         $shredder->PutObjects( Objects => $user );
48         $shredder->WipeoutAll();
49         $test->db_is_valid;
50         cmp_deeply( $test->dump_current_and_savepoint('bucreate'), "current DB equal to savepoint");
51
52         $shredder->PutObjects( Objects => [$pgroup, $cgroup] );
53         $shredder->WipeoutAll();
54         $test->db_is_valid;
55         cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
56 }
57
58 ### deleting member of the ticket AdminCc role group
59 {
60         $test->restore_savepoint('clean');
61
62         my $user = RT::User->new( RT->SystemUser );
63         my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
64         ok( $uid, "created new user" ) or diag "error: $msg";
65         is( $user->id, $uid, "id is correct" );
66
67         use RT::Queue;
68         my $queue = RT::Queue->new( RT->SystemUser );
69         $queue->Load('general');
70         ok( $queue->id, "queue loaded succesfully" );
71
72         use RT::Tickets;
73         my $ticket = RT::Ticket->new( RT->SystemUser );
74         my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
75         ok( $id, "created new ticket" );
76         $ticket = RT::Ticket->new( RT->SystemUser );
77         my $status;
78         ($status, $msg) = $ticket->Load( $id );
79         ok( $id, "load ticket" ) or diag( "error: $msg" );
80
81         ($status, $msg) = $ticket->AddWatcher( Type => "AdminCc", PrincipalId => $user->id );
82         ok( $status, "AdminCC successfuly added") or diag( "error: $msg" );
83
84         my $member = $ticket->AdminCc->MembersObj->First;
85         my $shredder = $test->shredder_new();
86         $shredder->PutObjects( Objects => $member );
87         $shredder->WipeoutAll();
88         $test->db_is_valid;
89
90         $shredder->PutObjects( Objects => $user );
91         $shredder->WipeoutAll();
92         $test->db_is_valid;
93 }
94
95 ### deleting member of the ticket Owner role group
96 {
97         $test->restore_savepoint('clean');
98
99         my $user = RT::User->new( RT->SystemUser );
100         my ($uid, $msg) = $user->Create( Name => 'new user', Privileged => 1, Disabled => 0 );
101         ok( $uid, "created new user" ) or diag "error: $msg";
102         is( $user->id, $uid, "id is correct" );
103
104         use RT::Queue;
105         my $queue = RT::Queue->new( RT->SystemUser );
106         $queue->Load('general');
107         ok( $queue->id, "queue loaded succesfully" );
108
109         $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
110
111         use RT::Tickets;
112         my $ticket = RT::Ticket->new( RT->SystemUser );
113         my ($id) = $ticket->Create( Subject => 'test', Queue => $queue->id );
114         ok( $id, "created new ticket" );
115         $ticket = RT::Ticket->new( RT->SystemUser );
116         my $status;
117         ($status, $msg) = $ticket->Load( $id );
118         ok( $id, "load ticket" ) or diag( "error: $msg" );
119
120         ($status, $msg) = $ticket->SetOwner( $user->id );
121         ok( $status, "owner successfuly set") or diag( "error: $msg" );
122         is( $ticket->Owner, $user->id, "owner successfuly set") or diag( "error: $msg" );
123
124         my $member = $ticket->OwnerGroup->MembersObj->First;
125         my $shredder = $test->shredder_new();
126         $shredder->PutObjects( Objects => $member );
127         $shredder->WipeoutAll();
128         $test->db_is_valid;
129
130         $ticket = RT::Ticket->new( RT->SystemUser );
131         ($status, $msg) = $ticket->Load( $id );
132         ok( $id, "load ticket" ) or diag( "error: $msg" );
133         is( $ticket->Owner, RT->Nobody->id, "owner switched back to nobody" );
134         is( $ticket->OwnerGroup->MembersObj->First->MemberId, RT->Nobody->id, "and owner role group member is nobody");
135 }