Add strict/warnings test, adjust all offenders (wow, that was a lot)
[dbsrgits/DBIx-Class.git] / t / cdbi / 12-filter.t
CommitLineData
9bc6db13 1use strict;
4a233f30 2use warnings;
9bc6db13 3use Test::More;
4
50891152 5use lib 't/cdbi/testlib';
9bc6db13 6use Actor;
7use Film;
8Film->has_many(actors => 'Actor');
9Actor->has_a('film' => 'Film');
10Actor->add_constructor(double_search => 'name = ? AND salary = ?');
11
12my $film = Film->create({ Title => 'MY Film' });
13my $film2 = Film->create({ Title => 'Another Film' });
14
15my @act = (
6a3bf251 16 Actor->create(
17 {
18 name => 'Actor 1',
19 film => $film,
20 salary => 10,
21 }
22 ),
23 Actor->create(
24 {
25 name => 'Actor 2',
26 film => $film,
27 salary => 20,
28 }
29 ),
30 Actor->create(
31 {
32 name => 'Actor 3',
33 film => $film,
34 salary => 30,
35 }
36 ),
37 Actor->create(
38 {
39 name => 'Actor 4',
40 film => $film2,
41 salary => 50,
42 }
43 ),
9bc6db13 44);
45
46eval {
6a3bf251 47 my @actors = $film->actors(name => 'Actor 1');
48 is @actors, 1, "Got one actor from restricted has_many";
49 is $actors[0]->name, "Actor 1", "Correct name";
9bc6db13 50};
51is $@, '', "No errors";
52
53{
6a3bf251 54 my @actors = Actor->double_search("Actor 1", 10);
55 is @actors, 1, "Got one actor";
56 is $actors[0]->name, "Actor 1", "Correct name";
9bc6db13 57}
58
59{
6a3bf251 60 ok my @actors = Actor->salary_between(0, 100), "Range 0 - 100";
61 is @actors, 4, "Got all";
9bc6db13 62}
63
64{
6a3bf251 65 my @actors = Actor->salary_between(100, 200);
66 is @actors, 0, "None in Range 100 - 200";
9bc6db13 67}
68
69{
6a3bf251 70 ok my @actors = Actor->salary_between(0, 10), "Range 0 - 10";
71 is @actors, 1, "Got 1";
72 is $actors[0]->name, $act[0]->name, "Actor 1";
9bc6db13 73}
74
75{
6a3bf251 76 ok my @actors = Actor->salary_between(20, 30), "Range 20 - 20";
77 @actors = sort { $a->salary <=> $b->salary } @actors;
78 is @actors, 2, "Got 2";
79 is $actors[0]->name, $act[1]->name, "Actor 2";
80 is $actors[1]->name, $act[2]->name, "and Actor 3";
9bc6db13 81}
82
83{
6a3bf251 84 ok my @actors = Actor->search(Film => $film), "Search by object";
85 is @actors, 3, "3 actors in film 1";
9bc6db13 86}
87
88#----------------------------------------------------------------------
89# Iterators
90#----------------------------------------------------------------------
91
223b8fe3 92my $it_class = 'DBIx::Class::ResultSet';
9bc6db13 93
94sub test_normal_iterator {
6a3bf251 95 my $it = $film->actors;
96 isa_ok $it, $it_class;
97 is $it->count, 3, " - with 3 elements";
98 my $i = 0;
99 while (my $film = $it->next) {
100 is $film->name, $act[ $i++ ]->name, "Get $i";
101 }
102 ok !$it->next, "No more";
103 is $it->first->name, $act[0]->name, "Get first";
9bc6db13 104}
105
106test_normal_iterator;
107{
6a3bf251 108 Film->has_many(actor_ids => [ Actor => 'id' ]);
109 my $it = $film->actor_ids;
110 isa_ok $it, $it_class;
111 is $it->count, 3, " - with 3 elements";
112 my $i = 0;
113 while (my $film_id = $it->next) {
114 is $film_id, $act[ $i++ ]->id, "Get id $i";
115 }
116 ok !$it->next, "No more";
117 is $it->first, $act[0]->id, "Get first";
9bc6db13 118}
119
120# make sure nothing gets clobbered;
121test_normal_iterator;
122
123{
6a3bf251 124 my @acts = $film->actors->slice(1, 2);
125 is @acts, 2, "Slice gives 2 actor";
126 is $acts[0]->name, "Actor 2", "Actor 2";
127 is $acts[1]->name, "Actor 3", "and actor 3";
9bc6db13 128}
129
130{
6a3bf251 131 my @acts = $film->actors->slice(1);
132 is @acts, 1, "Slice of 1 actor";
133 is $acts[0]->name, "Actor 2", "Actor 2";
9bc6db13 134}
135
136{
6a3bf251 137 my @acts = $film->actors->slice(2, 8);
138 is @acts, 1, "Slice off the end";
139 is $acts[0]->name, "Actor 3", "Gets last actor only";
9bc6db13 140}
141
142package Class::DBI::My::Iterator;
143
f9cc85ce 144our @ISA;
525035fb 145
146@ISA = ($it_class);
9bc6db13 147
148sub slice { qw/fred barney/ }
149
150package main;
151
152Actor->iterator_class('Class::DBI::My::Iterator');
153
fefe2816 154delete $film->{related_resultsets};
155
9bc6db13 156{
6a3bf251 157 my @acts = $film->actors->slice(1, 2);
158 is @acts, 2, "Slice gives 2 results";
159 ok eq_set(\@acts, [qw/fred barney/]), "Fred and Barney";
9bc6db13 160
6a3bf251 161 ok $film->actors->delete_all, "Can delete via iterator";
162 is $film->actors, 0, "no actors left";
9bc6db13 163
6a3bf251 164 eval { $film->actors->delete_all };
165 is $@, '', "Deleting again does no harm";
9bc6db13 166}
d9bd5195 167
168done_testing;