multilev_single_PKeqFK.t [plain text]
use strict;
use warnings;
use Test::More;
use Test::Exception;
use lib qw(t/lib);
use DBICTest;
sub mc_diag { diag (@_) if $ENV{DBIC_MULTICREATE_DEBUG} };
my $schema = DBICTest->init_schema();
mc_diag (<<'DG');
* Test a multilevel might-have/has_one with a PK == FK in the mid-table
CD -> might have -> Artwork
\- has_one -/ \
\
\-> has_many \
--> Artwork_to_Artist
/-> has_many /
/
Artist
DG
my $rels = {
has_one => 'mandatory_artwork',
might_have => 'artwork',
};
for my $type (qw/has_one might_have/) {
lives_ok (sub {
my $rel = $rels->{$type};
my $cd_title = "Simple test $type cd";
my $cd = $schema->resultset('CD')->create ({
artist => 1,
title => $cd_title,
year => 2008,
$rel => {},
});
isa_ok ($cd, 'DBICTest::CD', 'Main CD object created');
is ($cd->title, $cd_title, 'Correct CD title');
isa_ok ($cd->$rel, 'DBICTest::Artwork', 'Related artwork present');
ok ($cd->$rel->in_storage, 'And in storage');
}, "Simple $type creation");
}
my $artist_rs = $schema->resultset('Artist');
for my $type (qw/has_one might_have/) {
my $rel = $rels->{$type};
my $cd_title = "Test $type cd";
my $artist_names = [ map { "Artist via $type $_" } (1, 2) ];
my $someartist = $artist_rs->next;
lives_ok (sub {
my $cd = $schema->resultset('CD')->create ({
artist => $someartist,
title => $cd_title,
year => 2008,
$rel => {
artwork_to_artist => [ map {
{ artist => { name => $_ } }
} (@$artist_names)
]
},
});
isa_ok ($cd, 'DBICTest::CD', 'Main CD object created');
is ($cd->title, $cd_title, 'Correct CD title');
my $art_obj = $cd->$rel;
ok ($art_obj->has_column_loaded ('cd_id'), 'PK/FK present on artwork object');
is ($art_obj->artists->count, 2, 'Correct artwork creator count via the new object');
is_deeply (
[ sort $art_obj->artists->get_column ('name')->all ],
$artist_names,
'Artists named correctly when queried via object',
);
my $artwork = $schema->resultset('Artwork')->search (
{ 'cd.title' => $cd_title },
{ join => 'cd' },
)->single;
is ($artwork->artists->count, 2, 'Correct artwork creator count via a new search');
is_deeply (
[ sort $artwork->artists->get_column ('name')->all ],
$artist_names,
'Artists named correctly queried via a new search',
);
}, "multilevel $type with a PK == FK in the $type/has_many table ok");
}
done_testing;