starting to work...
[freeside.git] / rt / t / ticket / sort-by-queue.t
1 #!/usr/bin/perl
2
3 use RT::Test nodata => 1, tests => 12;
4
5 use strict;
6 use warnings;
7
8 use RT::Tickets;
9 use RT::Queue;
10 use RT::CustomField;
11
12 #########################################################
13 # Test sorting by Queue, we sort by its name
14 #########################################################
15
16
17 diag "Create queues to test with.";
18 my @qids;
19 my @queues;
20 # create them in reverse order to avoid false positives
21 foreach my $name ( qw(sort-by-queue-Z sort-by-queue-A) ) {
22     my $queue = RT::Queue->new( RT->SystemUser );
23     my ($ret, $msg) = $queue->Create(
24         Name => $name ."-$$",
25         Description => 'queue to test sorting by queue'
26     );
27     ok($ret, "test queue creation. $msg");
28     push @queues, $queue;
29     push @qids, $queue->id;
30 }
31
32 my ($total, @tickets, @test) = (0, ());
33
34 sub run_tests {
35     my $query_prefix = join ' OR ', map 'id = '. $_->id, @tickets;
36     foreach my $test ( @test ) {
37         my $query = join " AND ", map "( $_ )", grep defined && length,
38             $query_prefix, $test->{'Query'};
39
40         foreach my $order (qw(ASC DESC)) {
41             my $error = 0;
42             my $tix = RT::Tickets->new( RT->SystemUser );
43             $tix->FromSQL( $query );
44             $tix->OrderBy( FIELD => $test->{'Order'}, ORDER => $order );
45
46             ok($tix->Count, "found ticket(s)")
47                 or $error = 1;
48
49             my ($order_ok, $last) = (1, $order eq 'ASC'? '-': 'zzzzzz');
50             while ( my $t = $tix->Next ) {
51                 my $tmp;
52                 if ( $order eq 'ASC' ) {
53                     $tmp = ((split( /,/, $last))[0] cmp (split( /,/, $t->Subject))[0]);
54                 } else {
55                     $tmp = -((split( /,/, $last))[-1] cmp (split( /,/, $t->Subject))[-1]);
56                 }
57                 if ( $tmp > 0 ) {
58                     $order_ok = 0; last;
59                 }
60                 $last = $t->Subject;
61             }
62
63             ok( $order_ok, "$order order of tickets is good" )
64                 or $error = 1;
65
66             if ( $error ) {
67                 diag "Wrong SQL query:". $tix->BuildSelectQuery;
68                 $tix->GotoFirstItem;
69                 while ( my $t = $tix->Next ) {
70                     diag sprintf "%02d - %s", $t->id, $t->Subject;
71                 }
72             }
73         }
74     }
75 }
76
77 @tickets = RT::Test->create_tickets(
78     { RandomOrder => 1 },
79     { Queue => $qids[0], Subject => 'z' },
80     { Queue => $qids[1], Subject => 'a' },
81 );
82 @test = (
83     { Order => "Queue" },
84 );
85 run_tests();
86
87 @tickets = ();