2 use RT::Test nodata => 1, tests => 52;
11 #########################################################
12 # Test sorting by Owner, Creator and LastUpdatedBy
13 # we sort by user name
14 #########################################################
16 diag "Create a queue to test with.";
17 my $queue_name = "OwnerSortQueue$$";
20 $queue = RT::Queue->new( RT->SystemUser );
21 my ($ret, $msg) = $queue->Create(
23 Description => 'queue for custom field sort testing'
25 ok($ret, "$queue test queue creation. $msg");
30 # create them in reverse order to avoid false positives
31 foreach my $u (qw(Z A)) {
32 my $name = $u ."-user-to-test-ordering-$$";
33 my $user = RT::User->new( RT->SystemUser );
34 my ($uid) = $user->Create(
38 ok $uid, "created user #$uid";
40 my ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
41 ok $status, "granted right";
42 ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'CreateTicket', Object => $queue );
43 ok $status, "granted right";
46 push @uids, $user->id;
49 my (@data, @tickets, @test) = (0, ());
53 my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
54 foreach my $test ( @test ) {
55 my $query = join " AND ", map "( $_ )", grep defined && length,
56 $query_prefix, $test->{'Query'};
58 foreach my $order (qw(ASC DESC)) {
60 my $tix = RT::Tickets->new( RT->SystemUser );
61 $tix->FromSQL( $query );
62 $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
64 ok($tix->Count, "found ticket(s)")
67 my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
68 while ( my $t = $tix->Next ) {
70 if ( $order eq 'ASC' ) {
71 $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
73 $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
81 ok( $order_ok, "$order order of tickets is good" )
85 diag "Wrong SQL query:". $tix->BuildSelectQuery;
87 while ( my $t = $tix->Next ) {
88 diag sprintf "%02d - %s", $t->id, $t->Subject;
96 { Subject => 'Nobody' },
97 { Subject => 'Z', Owner => $uids[0] },
98 { Subject => 'A', Owner => $uids[1] },
101 @tickets = RT::Test->create_tickets( { Queue => $queue->id }, @data );
104 { Order => "Owner" },
110 { Subject => 'Z', Creator => $uids[0] },
111 { Subject => 'A', Creator => $uids[1] },
113 @tickets = RT::Test->create_tickets( { Queue => $queue->id }, @data );
115 { Order => "Creator" },
121 { Subject => 'Z', LastUpdatedBy => $uids[0] },
122 { Subject => 'A', LastUpdatedBy => $uids[1] },
124 @tickets = RT::Test->create_tickets( { Queue => $queue->id }, @data );
126 { Order => "LastUpdatedBy" },