Commit | Line | Data |
c0329273 |
1 | BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) } |
2 | |
d1f542db |
3 | use strict; |
4 | use warnings; |
5 | |
c0329273 |
6 | |
d1f542db |
7 | use Test::More; |
d1f542db |
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 | { |
8273e845 |
41 | my $ordered = $rs->search(undef, { |
d1f542db |
42 | order_by => [ |
8273e845 |
43 | { -asc => 'artistid' }, |
d1f542db |
44 | { -desc => 'name' }, |
8273e845 |
45 | ] |
d1f542db |
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; |