Merge the relationship resolution rework
[dbsrgits/DBIx-Class.git] / t / cdbi / 21-iterator.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2 use DBIx::Class::Optional::Dependencies -skip_all_without => 'cdbicompat';
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8
9 use lib 't/cdbi/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
48 {
49   my $it = Film->retrieve_all;
50   my @slice = $it->slice(2,4);
51   is @slice, 3, "correct slice size (array)";
52   is $slice[0]->title, "Film 3", "Film 3 first";
53   is $slice[2]->title, "Film 5", "Film 5 last";
54 }
55
56 {
57   my $it = Film->retrieve_all;
58   my $slice = $it->slice(2,4);
59   isa_ok $slice, $it_class, "slice as iterator";
60   is $slice->count, 3,"correct slice size (array)";
61   is $slice->first->title, "Film 3", "Film 3 first";
62   is $slice->next->title, "Film 4", "Film 4 next";
63   is $slice->first->title, "Film 3", "First goes back to 3";
64   is $slice->next->title, "Film 4", "With 4 still next";
65   $slice->reset;
66   is $slice->next->title, "Film 3", "Reset brings us to film 3 again";
67   is $slice->next->title, "Film 4", "And 4 is still next";
68
69   # check if the original iterator still works
70   is $it->count, 6, "back to the original iterator, is of right size";
71   is $it->first->title, "Film 1", "Film 1 first";
72   is $it->next->title, "Film 2", "Film 2 next";
73   is $it->first->title, "Film 1", "First goes back to 1";
74   is $it->next->title, "Film 2", "With 2 still next";
75   is $it->next->title, "Film 3", "Film 3 is still in original Iterator";
76   $it->reset;
77   is $it->next->title, "Film 1", "Reset brings us to film 1 again";
78   is $it->next->title, "Film 2", "And 2 is still next";
79 }
80
81 {
82   my $it = Film->retrieve_all;
83   is $it, $it->count, "iterator returns count as a scalar";
84   ok $it, "iterator returns true when there are results";
85 }
86
87 {
88   my $it = Film->search( Title => "something which does not exist" );
89   is $it, 0;
90   ok !$it, "iterator returns false when no results";
91 }
92
93 done_testing;