2f34c1152df5c57abb5fc65a2b58e9d8217b9d9d
[dbsrgits/DBIx-Class.git] / t / cdbi-t / 21-iterator.t
1 use strict;
2 use Test::More;
3
4 BEGIN {
5         eval "use DBD::SQLite";
6         plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 33);
7 }
8
9 use lib 't/testlib';
10 use Film;
11
12 my $it_class = "DBIx::Class::ResultSet";
13
14 my @film  = (
15         Film->create({ Title => 'Film 1' }),
16         Film->create({ Title => 'Film 2' }),
17         Film->create({ Title => 'Film 3' }),
18         Film->create({ Title => 'Film 4' }),
19         Film->create({ Title => 'Film 5' }),
20         Film->create({ Title => 'Film 6' }),
21 );
22
23 {
24         my $it1 = Film->retrieve_all;
25         isa_ok $it1, $it_class;
26
27         my $it2 = Film->retrieve_all;
28         isa_ok $it2, $it_class;
29
30         while (my $from1 = $it1->next) {
31                 my $from2 = $it2->next;
32                 is $from1->id, $from2->id, "Both iterators get $from1";
33         }
34 }
35
36 {
37         my $it = Film->retrieve_all;
38         is $it->first->title, "Film 1", "Film 1 first";
39         is $it->next->title, "Film 2", "Film 2 next";
40         is $it->first->title, "Film 1", "First goes back to 1";
41         is $it->next->title, "Film 2", "With 2 still next";
42         $it->reset;
43         is $it->next->title, "Film 1", "Reset brings us to film 1 again";
44         is $it->next->title, "Film 2", "And 2 is still next";
45 }
46
47 SKIP: {
48   #skip "Iterator doesn't yet have slice support", 19;
49
50 {
51         my $it = Film->retrieve_all;
52         my @slice = $it->slice(2,4);
53         is @slice, 3, "correct slice size (array)";
54         is $slice[0]->title, "Film 3", "Film 3 first";
55         is $slice[2]->title, "Film 5", "Film 5 last";
56 }
57
58 {
59         my $it = Film->retrieve_all;
60         my $slice = $it->slice(2,4);
61         isa_ok $slice, $it_class, "slice as iterator";
62         is $slice->count, 3,"correct slice size (array)";
63         is $slice->first->title, "Film 3", "Film 3 first";
64         is $slice->next->title, "Film 4", "Film 4 next";
65         is $slice->first->title, "Film 3", "First goes back to 3";
66         is $slice->next->title, "Film 4", "With 4 still next";
67         $slice->reset;
68         is $slice->next->title, "Film 3", "Reset brings us to film 3 again";
69         is $slice->next->title, "Film 4", "And 4 is still next";
70
71         # check if the original iterator still works
72         is $it->count, 6, "back to the original iterator, is of right size";
73         is $it->first->title, "Film 1", "Film 1 first";
74         is $it->next->title, "Film 2", "Film 2 next";
75         is $it->first->title, "Film 1", "First goes back to 1";
76         is $it->next->title, "Film 2", "With 2 still next";
77         is $it->next->title, "Film 3", "Film 3 is still in original Iterator";
78         $it->reset;
79         is $it->next->title, "Film 1", "Reset brings us to film 1 again";
80         is $it->next->title, "Film 2", "And 2 is still next";
81 }
82
83 } # End SKIP