File: 21-iterator.t

package info (click to toggle)
libdbix-class-perl 0.082841-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 5,236 kB
  • sloc: perl: 26,763; sql: 322; makefile: 10
file content (89 lines) | stat: -rw-r--r-- 2,605 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use strict;
use warnings;
use Test::More;

use lib 't/cdbi/testlib';
use Film;

my $it_class = "DBIx::Class::ResultSet";

my @film  = (
  Film->create({ Title => 'Film 1' }),
  Film->create({ Title => 'Film 2' }),
  Film->create({ Title => 'Film 3' }),
  Film->create({ Title => 'Film 4' }),
  Film->create({ Title => 'Film 5' }),
  Film->create({ Title => 'Film 6' }),
);

{
  my $it1 = Film->retrieve_all;
  isa_ok $it1, $it_class;

  my $it2 = Film->retrieve_all;
  isa_ok $it2, $it_class;

  while (my $from1 = $it1->next) {
    my $from2 = $it2->next;
    is $from1->id, $from2->id, "Both iterators get $from1";
  }
}

{
  my $it = Film->retrieve_all;
  is $it->first->title, "Film 1", "Film 1 first";
  is $it->next->title, "Film 2", "Film 2 next";
  is $it->first->title, "Film 1", "First goes back to 1";
  is $it->next->title, "Film 2", "With 2 still next";
  $it->reset;
  is $it->next->title, "Film 1", "Reset brings us to film 1 again";
  is $it->next->title, "Film 2", "And 2 is still next";
}


{
  my $it = Film->retrieve_all;
  my @slice = $it->slice(2,4);
  is @slice, 3, "correct slice size (array)";
  is $slice[0]->title, "Film 3", "Film 3 first";
  is $slice[2]->title, "Film 5", "Film 5 last";
}

{
  my $it = Film->retrieve_all;
  my $slice = $it->slice(2,4);
  isa_ok $slice, $it_class, "slice as iterator";
  is $slice->count, 3,"correct slice size (array)";
  is $slice->first->title, "Film 3", "Film 3 first";
  is $slice->next->title, "Film 4", "Film 4 next";
  is $slice->first->title, "Film 3", "First goes back to 3";
  is $slice->next->title, "Film 4", "With 4 still next";
  $slice->reset;
  is $slice->next->title, "Film 3", "Reset brings us to film 3 again";
  is $slice->next->title, "Film 4", "And 4 is still next";

  # check if the original iterator still works
  is $it->count, 6, "back to the original iterator, is of right size";
  is $it->first->title, "Film 1", "Film 1 first";
  is $it->next->title, "Film 2", "Film 2 next";
  is $it->first->title, "Film 1", "First goes back to 1";
  is $it->next->title, "Film 2", "With 2 still next";
  is $it->next->title, "Film 3", "Film 3 is still in original Iterator";
  $it->reset;
  is $it->next->title, "Film 1", "Reset brings us to film 1 again";
  is $it->next->title, "Film 2", "And 2 is still next";
}

{
  my $it = Film->retrieve_all;
  is $it, $it->count, "iterator returns count as a scalar";
  ok $it, "iterator returns true when there are results";
}

{
  my $it = Film->search( Title => "something which does not exist" );
  is $it, 0;
  ok !$it, "iterator returns false when no results";
}

done_testing;