d4f397e1f227ca7c93bb18a45d559e6fedf854bb
[dbsrgits/DBIx-Class.git] / t / cdbi / 21-iterator.t
1 use strict;
2 use Test::More;
3
4 use lib 't/cdbi/testlib';
5 use Film;
6
7 my $it_class = "DBIx::Class::ResultSet";
8
9 my @film  = (
10   Film->create({ Title => 'Film 1' }),
11   Film->create({ Title => 'Film 2' }),
12   Film->create({ Title => 'Film 3' }),
13   Film->create({ Title => 'Film 4' }),
14   Film->create({ Title => 'Film 5' }),
15   Film->create({ Title => 'Film 6' }),
16 );
17
18 {
19   my $it1 = Film->retrieve_all;
20   isa_ok $it1, $it_class;
21
22   my $it2 = Film->retrieve_all;
23   isa_ok $it2, $it_class;
24
25   while (my $from1 = $it1->next) {
26     my $from2 = $it2->next;
27     is $from1->id, $from2->id, "Both iterators get $from1";
28   }
29 }
30
31 {
32   my $it = Film->retrieve_all;
33   is $it->first->title, "Film 1", "Film 1 first";
34   is $it->next->title, "Film 2", "Film 2 next";
35   is $it->first->title, "Film 1", "First goes back to 1";
36   is $it->next->title, "Film 2", "With 2 still next";
37   $it->reset;
38   is $it->next->title, "Film 1", "Reset brings us to film 1 again";
39   is $it->next->title, "Film 2", "And 2 is still next";
40 }
41
42
43 {
44   my $it = Film->retrieve_all;
45   my @slice = $it->slice(2,4);
46   is @slice, 3, "correct slice size (array)";
47   is $slice[0]->title, "Film 3", "Film 3 first";
48   is $slice[2]->title, "Film 5", "Film 5 last";
49 }
50
51 {
52   my $it = Film->retrieve_all;
53   my $slice = $it->slice(2,4);
54   isa_ok $slice, $it_class, "slice as iterator";
55   is $slice->count, 3,"correct slice size (array)";
56   is $slice->first->title, "Film 3", "Film 3 first";
57   is $slice->next->title, "Film 4", "Film 4 next";
58   is $slice->first->title, "Film 3", "First goes back to 3";
59   is $slice->next->title, "Film 4", "With 4 still next";
60   $slice->reset;
61   is $slice->next->title, "Film 3", "Reset brings us to film 3 again";
62   is $slice->next->title, "Film 4", "And 4 is still next";
63
64   # check if the original iterator still works
65   is $it->count, 6, "back to the original iterator, is of right size";
66   is $it->first->title, "Film 1", "Film 1 first";
67   is $it->next->title, "Film 2", "Film 2 next";
68   is $it->first->title, "Film 1", "First goes back to 1";
69   is $it->next->title, "Film 2", "With 2 still next";
70   is $it->next->title, "Film 3", "Film 3 is still in original Iterator";
71   $it->reset;
72   is $it->next->title, "Film 1", "Reset brings us to film 1 again";
73   is $it->next->title, "Film 2", "And 2 is still next";
74 }
75
76 {
77   my $it = Film->retrieve_all;
78   is $it, $it->count, "iterator returns count as a scalar";
79   ok $it, "iterator returns true when there are results";
80 }
81
82 {
83   my $it = Film->search( Title => "something which does not exist" );
84   is $it, 0;
85   ok !$it, "iterator returns false when no results";
86 }
87
88 done_testing;