1use strict;
2use Test::More;
3
4BEGIN {
5	eval "use DBD::SQLite";
6	plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 33);
7}
8
9use lib 't/testlib';
10use Film;
11
12Film->retrieve_all->delete_all;
13
14my @film  = (
15	Film->insert({ Title => 'Film 1' }),
16	Film->insert({ Title => 'Film 2' }),
17	Film->insert({ Title => 'Film 3' }),
18	Film->insert({ Title => 'Film 4' }),
19	Film->insert({ Title => 'Film 5' }),
20	Film->insert({ Title => 'Film 6' }),
21);
22
23{
24	my $it1 = Film->retrieve_all;
25	isa_ok $it1, "Class::DBI::Iterator";
26
27	my $it2 = Film->retrieve_all;
28	isa_ok $it2, "Class::DBI::Iterator";
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, "Class::DBI::Iterator", "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