Commit | Line | Data |
d1f542db |
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; |