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