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