5 use RT::Test tests => 63;
8 my ($ecode, $res) = RT::Test->run_validator();
9 is $res, '', 'empty result';
13 my $group = RT::Test->load_or_create_group('test', Members => [] );
14 ok $group, "loaded or created a group";
16 my ($ecode, $res) = RT::Test->run_validator();
17 is $res, '', 'empty result';
22 my $group1 = RT::Test->load_or_create_group( 'test1', Members => [] );
23 ok $group1, "loaded or created a group";
25 my $group2 = RT::Test->load_or_create_group( 'test2', Members => [ $group1 ]);
26 ok $group2, "loaded or created a group";
28 ok $group2->HasMember( $group1->id ), "has member";
29 ok $group2->HasMemberRecursively( $group1->id ), "has member";
31 my ($ecode, $res) = RT::Test->run_validator();
32 is $res, '', 'empty result';
34 $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
35 DBIx::SearchBuilder::Record::Cachable->FlushCache;
36 ok !$group2->HasMemberRecursively( $group1->id ), "has no member, broken DB";
38 ($ecode, $res) = RT::Test->run_validator(resolve => 1);
40 ok $group2->HasMember( $group1->id ), "has member";
41 ok $group2->HasMemberRecursively( $group1->id ), "has member";
43 ($ecode, $res) = RT::Test->run_validator();
44 is $res, '', 'empty result';
47 # G1 <- G2 <- G3 <- G4 <- G5
51 my $child = @groups? $groups[-1]: undef;
53 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $child? ($child): () ] );
54 ok $group, "loaded or created a group";
56 ok $group->HasMember( $child->id ), "has member"
58 ok $group->HasMemberRecursively( $_->id ), "has member"
64 my ($ecode, $res) = RT::Test->run_validator();
65 is $res, '', 'empty result';
67 $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
68 DBIx::SearchBuilder::Record::Cachable->FlushCache;
70 ok !$groups[1]->HasMemberRecursively( $groups[0]->id ), "has no member, broken DB";
72 ($ecode, $res) = RT::Test->run_validator(resolve => 1);
74 for ( my $i = 1; $i < @groups; $i++ ) {
75 ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member";
76 ok $groups[$i]->HasMemberRecursively( $groups[$_]->id ), "has member"
80 ($ecode, $res) = RT::Test->run_validator();
81 is $res, '', 'empty result';
84 # G1 <- (G2, G3, G4, G5)
88 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [] );
89 ok $group, "loaded or created a group";
93 my $parent = RT::Test->load_or_create_group( 'test1', Members => \@groups );
94 ok $parent, "loaded or created a group";
96 my ($ecode, $res) = RT::Test->run_validator();
97 is $res, '', 'empty result';
100 # G1 <- (G2, G3, G4) <- G5
102 my $gchild = RT::Test->load_or_create_group( 'test5', Members => [] );
103 ok $gchild, "loaded or created a group";
107 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $gchild ] );
108 ok $group, "loaded or created a group";
109 push @groups, $group;
112 my $parent = RT::Test->load_or_create_group( 'test1', Members => \@groups );
113 ok $parent, "loaded or created a group";
115 my ($ecode, $res) = RT::Test->run_validator();
116 is $res, '', 'empty result';
119 # group without principal record and cgm records
120 # was causing infinite loop as principal was not created
122 my $group = RT::Test->load_or_create_group('Test');
123 ok $group && $group->id, 'loaded or created group';
125 my $dbh = $group->_Handle->dbh;
126 $dbh->do('DELETE FROM Principals WHERE id = ?', {RaiseError => 1}, $group->id);
127 $dbh->do('DELETE FROM CachedGroupMembers WHERE GroupId = ?', {RaiseError => 1}, $group->id);
128 DBIx::SearchBuilder::Record::Cachable->FlushCache;
130 my ($ecode, $res) = RT::Test->run_validator(resolve => 1, timeout => 30);
133 ($ecode, $res) = RT::Test->run_validator();
134 is $res, '', 'empty result';