Add strict/warnings test, adjust all offenders (wow, that was a lot)
[dbsrgits/DBIx-Class.git] / t / cdbi / 06-hasa.t
CommitLineData
ccee4390 1use strict;
4a233f30 2use warnings;
ccee4390 3use Test::More;
4
ccee4390 5@YA::Film::ISA = 'Film';
6
7#local $SIG{__WARN__} = sub { };
8
9INIT {
6a3bf251 10 use lib 't/cdbi/testlib';
11 use Film;
12 use Director;
ccee4390 13}
14
15Film->create_test_film;
16ok(my $btaste = Film->retrieve('Bad Taste'), "We have Bad Taste");
17ok(my $pj = $btaste->Director, "Bad taste has_a() director");
18ok(!ref($pj), ' ... which is not an object');
19
20ok(Film->has_a('Director' => 'Director'), "Link Director table");
21ok(
6a3bf251 22 Director->create(
23 {
24 Name => 'Peter Jackson',
25 Birthday => -300000000,
26 IsInsane => 1
27 }
28 ),
29 'create Director'
ccee4390 30);
31
32$btaste = Film->retrieve('Bad Taste');
33
34ok($pj = $btaste->Director, "Bad taste now has_a() director");
35isa_ok($pj => 'Director');
36is($pj->id, 'Peter Jackson', ' ... and is the correct director');
37
38# Oh no! Its Peter Jacksons even twin, Skippy! Born one minute after him.
39my $sj = Director->create(
6a3bf251 40 {
41 Name => 'Skippy Jackson',
42 Birthday => (-300000000 + 60),
43 IsInsane => 1,
44 }
ccee4390 45);
46
47is($sj->id, 'Skippy Jackson', 'We have a new director');
48
49Film->has_a(CoDirector => 'Director');
50
51$btaste->CoDirector($sj);
52$btaste->update;
53is($btaste->CoDirector->Name, 'Skippy Jackson', 'He co-directed');
54is(
6a3bf251 55 $btaste->Director->Name,
56 'Peter Jackson',
57 "Didnt interfere with each other"
ccee4390 58);
59
60{ # Ensure search can take an object
6a3bf251 61 my @films = Film->search(Director => $pj);
62 is @films, 1, "1 Film directed by $pj";
63 is $films[0]->id, "Bad Taste", "Bad Taste";
ccee4390 64}
65
66inheriting_hasa();
67
68{
69
6a3bf251 70 # Skippy directs a film and Peter helps!
71 $sj = Director->retrieve('Skippy Jackson');
72 $pj = Director->retrieve('Peter Jackson');
ccee4390 73
6a3bf251 74 fail_with_bad_object($sj, $btaste);
75 taste_bad($sj, $pj);
ccee4390 76}
77
78sub inheriting_hasa {
6a3bf251 79 my $btaste = YA::Film->retrieve('Bad Taste');
80 is(ref($btaste->Director), 'Director', 'inheriting has_a()');
81 is(ref($btaste->CoDirector), 'Director', 'inheriting has_a()');
82 is($btaste->CoDirector->Name, 'Skippy Jackson', ' ... correctly');
ccee4390 83}
84
85sub taste_bad {
6a3bf251 86 my ($dir, $codir) = @_;
87 my $tastes_bad = YA::Film->create(
88 {
89 Title => 'Tastes Bad',
90 Director => $dir,
91 CoDirector => $codir,
92 Rating => 'R',
93 NumExplodingSheep => 23
94 }
95 );
96 is($tastes_bad->_Director_accessor, 'Skippy Jackson', 'Director_accessor');
97 is($tastes_bad->Director->Name, 'Skippy Jackson', 'Director');
98 is($tastes_bad->CoDirector->Name, 'Peter Jackson', 'CoDirector');
99 is(
100 $tastes_bad->_CoDirector_accessor,
101 'Peter Jackson',
102 'CoDirector_accessor'
103 );
ccee4390 104}
105
106sub fail_with_bad_object {
6a3bf251 107 my ($dir, $codir) = @_;
108 eval {
109 YA::Film->create(
110 {
111 Title => 'Tastes Bad',
112 Director => $dir,
113 CoDirector => $codir,
114 Rating => 'R',
115 NumExplodingSheep => 23
116 }
117 );
118 };
119 ok $@, $@;
ccee4390 120}
121
122package Foo;
123use base 'CDBase';
124__PACKAGE__->table('foo');
125__PACKAGE__->columns('All' => qw/ id fav /);
126# fav is a film
127__PACKAGE__->db_Main->do( qq{
128 CREATE TABLE foo (
6a3bf251 129 id INTEGER,
130 fav VARCHAR(255)
ccee4390 131 )
132});
133
134
135package Bar;
136use base 'CDBase';
137__PACKAGE__->table('bar');
138__PACKAGE__->columns('All' => qw/ id fav /);
139# fav is a foo
140__PACKAGE__->db_Main->do( qq{
141 CREATE TABLE bar (
6a3bf251 142 id INTEGER,
143 fav INTEGER
ccee4390 144 )
145});
146
147package main;
148Foo->has_a("fav" => "Film");
149Bar->has_a("fav" => "Foo");
150my $foo = Foo->create({ id => 6, fav => 'Bad Taste' });
151my $bar = Bar->create({ id => 2, fav => 6 });
152isa_ok($bar->fav, "Foo");
153isa_ok($foo->fav, "Film");
154
8273e845 155{
6a3bf251 156 my $foo;
157 Foo->add_trigger(after_create => sub { $foo = shift->fav });
158 my $gwh = Foo->create({ id => 93, fav => 'Good Will Hunting' });
159 isa_ok $foo, "Film", "Object in after_create trigger";
ccee4390 160}
161
d9bd5195 162done_testing;