5 use RT::Test tests => undef;
10 my $group = RT::Test->load_or_create_group('test', Members => [] );
11 ok $group, "loaded or created a group";
13 RT::Test->db_is_valid;
18 my $group1 = RT::Test->load_or_create_group( 'test1', Members => [] );
19 ok $group1, "loaded or created a group";
21 my $group2 = RT::Test->load_or_create_group( 'test2', Members => [ $group1 ]);
22 ok $group2, "loaded or created a group";
24 ok $group2->HasMember( $group1->id ), "has member";
25 ok $group2->HasMemberRecursively( $group1->id ), "has member";
27 RT::Test->db_is_valid;
29 $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
30 DBIx::SearchBuilder::Record::Cachable->FlushCache;
31 ok !$group2->HasMemberRecursively( $group1->id ), "has no member, broken DB";
33 my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
34 isnt($ecode, 0, 'non-zero exit code');
36 ok $group2->HasMember( $group1->id ), "has member";
37 ok $group2->HasMemberRecursively( $group1->id ), "has member";
39 RT::Test->db_is_valid;
42 # G1 <- G2 <- G3 <- G4 <- G5
46 my $child = @groups? $groups[-1]: undef;
48 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $child? ($child): () ] );
49 ok $group, "loaded or created a group";
51 ok $group->HasMember( $child->id ), "has member"
53 ok $group->HasMemberRecursively( $_->id ), "has member"
59 RT::Test->db_is_valid;
61 $RT::Handle->dbh->do("DELETE FROM CachedGroupMembers");
62 DBIx::SearchBuilder::Record::Cachable->FlushCache;
64 ok !$groups[1]->HasMemberRecursively( $groups[0]->id ), "has no member, broken DB";
66 my ($ecode, $res) = RT::Test->run_validator(resolve => 1);
67 isnt($ecode, 0, 'non-zero exit code');
69 for ( my $i = 1; $i < @groups; $i++ ) {
70 ok $groups[$i]->HasMember( $groups[$i-1]->id ), "has member";
71 ok $groups[$i]->HasMemberRecursively( $groups[$_]->id ), "has member"
75 RT::Test->db_is_valid;
78 # G1 <- (G2, G3, G4, G5)
82 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [] );
83 ok $group, "loaded or created a group";
87 my $parent = RT::Test->load_or_create_group( 'test1', Members => \@groups );
88 ok $parent, "loaded or created a group";
90 RT::Test->db_is_valid;
93 # G1 <- (G2, G3, G4) <- G5
95 my $gchild = RT::Test->load_or_create_group( 'test5', Members => [] );
96 ok $gchild, "loaded or created a group";
100 my $group = RT::Test->load_or_create_group( 'test'. $_, Members => [ $gchild ] );
101 ok $group, "loaded or created a group";
102 push @groups, $group;
105 my $parent = RT::Test->load_or_create_group( 'test1', Members => \@groups );
106 ok $parent, "loaded or created a group";
108 RT::Test->db_is_valid;
111 # group without principal record and cgm records
112 # was causing infinite loop as principal was not created
114 my $group = RT::Test->load_or_create_group('Test');
115 ok $group && $group->id, 'loaded or created group';
117 my $dbh = $group->_Handle->dbh;
118 $dbh->do('DELETE FROM Principals WHERE id = ?', {RaiseError => 1}, $group->id);
119 $dbh->do('DELETE FROM CachedGroupMembers WHERE GroupId = ?', {RaiseError => 1}, $group->id);
120 DBIx::SearchBuilder::Record::Cachable->FlushCache;
122 my ($ecode, $res) = RT::Test->run_validator(resolve => 1, timeout => 30);
123 isnt($ecode, 0, 'non-zero exit code');
125 RT::Test->db_is_valid;