Trailing WS crusade - got to save them bits
[dbsrgits/DBIx-Class.git] / t / resultset / is_ordered.t
1 use strict;
2 use warnings;
3
4 use lib qw(t/lib);
5 use Test::More;
6 use Test::Exception;
7 use DBICTest;
8
9 my $schema = DBICTest->init_schema();
10 my $rs = $schema->resultset('Artist');
11
12 ok !$rs->is_ordered, 'vanilla resultset is not ordered';
13
14 # Simple ordering with a single column
15 {
16   my $ordered = $rs->search(undef, { order_by => 'artistid' });
17   ok $ordered->is_ordered, 'Simple column ordering detected by is_ordered';
18 }
19
20 # Hashref order direction
21 {
22   my $ordered = $rs->search(undef, { order_by => { -desc => 'artistid' } });
23   ok $ordered->is_ordered, 'resultset with order direction is_ordered';
24 }
25
26 # Column ordering with literal SQL
27 {
28   my $ordered = $rs->search(undef, { order_by => \'artistid DESC' });
29   ok $ordered->is_ordered, 'resultset with literal SQL is_ordered';
30 }
31
32 # Multiple column ordering
33 {
34   my $ordered = $rs->search(undef, { order_by => ['artistid', 'name'] });
35   ok $ordered->is_ordered, 'ordering with multiple columns as arrayref is ordered';
36 }
37
38 # More complicated ordering
39 {
40   my $ordered = $rs->search(undef, {
41     order_by => [
42       { -asc => 'artistid' },
43       { -desc => 'name' },
44     ]
45   });
46   ok $ordered->is_ordered, 'more complicated resultset ordering is_ordered';
47 }
48
49 # Empty multi-column ordering arrayref
50 {
51   my $ordered = $rs->search(undef, { order_by => [] });
52   ok !$ordered->is_ordered, 'ordering with empty arrayref is not ordered';
53 }
54
55 # Multi-column ordering syntax with empty hashref
56 {
57   my $ordered = $rs->search(undef, { order_by => [{}] });
58   ok !$ordered->is_ordered, 'ordering with [{}] is not ordered';
59 }
60
61 # Remove ordering after being set
62 {
63   my $ordered = $rs->search(undef, { order_by => 'artistid' });
64   ok $ordered->is_ordered, 'resultset with ordering applied works..';
65   my $unordered = $ordered->search(undef, { order_by => undef });
66   ok !$unordered->is_ordered, '..and is not ordered with ordering removed';
67 }
68
69 # Search without ordering
70 {
71   my $ordered = $rs->search({ name => 'We Are Goth' }, { join => 'cds' });
72   ok !$ordered->is_ordered, 'WHERE clause but no order_by is not ordered';
73 }
74
75 # Other functions without ordering
76 {
77   # Join
78   my $joined = $rs->search(undef, { join => 'cds' });
79   ok !$joined->is_ordered, 'join but no order_by is not ordered';
80
81   # Group By
82   my $grouped = $rs->search(undef, { group_by => 'rank' });
83   ok !$grouped->is_ordered, 'group_by but no order_by is not ordered';
84
85   # Paging
86   my $paged = $rs->search(undef, { page=> 5 });
87   ok !$paged->is_ordered, 'paging but no order_by is not ordered';
88 }
89
90 done_testing;