3 use Test::More tests => 32;
15 #########################################################
16 # Test sorting by Owner, Creator and LastUpdatedBy
17 # we sort by user name
18 #########################################################
20 diag "Create a queue to test with.";
21 my $queue_name = "OwnerSortQueue$$";
24 $queue = RT::Queue->new( $RT::SystemUser );
25 my ($ret, $msg) = $queue->Create(
27 Description => 'queue for custom field sort testing'
29 ok($ret, "$queue test queue creation. $msg");
34 # create them in reverse order to avoid false positives
35 foreach my $u (qw(Z A)) {
36 my $name = $u ."-user-to-test-ordering-$$";
37 my $user = RT::User->new( $RT::SystemUser );
38 my ($uid) = $user->Create(
42 ok $uid, "created user #$uid";
44 my ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $queue );
45 ok $status, "granted right";
46 ($status, $msg) = $user->PrincipalObj->GrantRight( Right => 'CreateTicket', Object => $queue );
47 ok $status, "granted right";
50 push @uids, $user->id;
53 my ($total, @data, @tickets, @test) = (0, ());
55 sub add_tix_from_data {
57 @data = sort { rand(100) <=> rand(100) } @data;
59 my $t = RT::Ticket->new($RT::SystemUser);
60 my %args = %{ shift(@data) };
62 my ( $id, undef, $msg ) = $t->Create( %args, Queue => $queue->id );
63 if ( $args{'Owner'} ) {
64 is $t->Owner, $args{'Owner'}, "owner is correct";
66 if ( $args{'Creator'} ) {
67 is $t->Creator, $args{'Creator'}, "creator is correct";
69 # hackish, but simpler
70 if ( $args{'LastUpdatedBy'} ) {
71 $t->__Set( Field => 'LastUpdatedBy', Value => $args{'LastUpdatedBy'} );
73 ok( $id, "ticket created" ) or diag("error: $msg");
81 my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
82 foreach my $test ( @test ) {
83 my $query = join " AND ", map "( $_ )", grep defined && length,
84 $query_prefix, $test->{'Query'};
86 foreach my $order (qw(ASC DESC)) {
88 my $tix = RT::Tickets->new( $RT::SystemUser );
89 $tix->FromSQL( $query );
90 $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
92 ok($tix->Count, "found ticket(s)")
95 my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
96 while ( my $t = $tix->Next ) {
98 if ( $order eq 'ASC' ) {
99 $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
101 $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
109 ok( $order_ok, "$order order of tickets is good" )
113 diag "Wrong SQL query:". $tix->BuildSelectQuery;
115 while ( my $t = $tix->Next ) {
116 diag sprintf "%02d - %s", $t->id, $t->Subject;
124 { Subject => 'Nobody' },
125 { Subject => 'Z', Owner => $uids[0] },
126 { Subject => 'A', Owner => $uids[1] },
128 @tickets = add_tix_from_data();
130 { Order => "Owner" },
136 { Subject => 'Z', Creator => $uids[0] },
137 { Subject => 'A', Creator => $uids[1] },
139 @tickets = add_tix_from_data();
141 { Order => "Creator" },
147 { Subject => 'Z', LastUpdatedBy => $uids[0] },
148 { Subject => 'A', LastUpdatedBy => $uids[1] },
150 @tickets = add_tix_from_data();
152 { Order => "LastUpdatedBy" },