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