use Test::More;
use Test::Exception;
+use Test::Warn;
use lib qw(t/lib);
-use DBICTest;
-use DBIC::SqlMakerTest;
+use DBICTest ':DiffSQL';
my $schema = DBICTest->init_schema();
'many_to_many add_to_$rel($hash) ok' );
$cd->add_to_producers({ name => 'Jack Black' });
is( $prod_rs->count(), 2, 'many_to_many add_to_$rel($hash) count ok' );
-$cd->set_producers($schema->resultset('Producer')->all);
-is( $cd->producers->count(), $prod_before_count+2,
- 'many_to_many set_$rel(@objs) count ok' );
-$cd->set_producers($schema->resultset('Producer')->find(1));
-is( $cd->producers->count(), 1, 'many_to_many set_$rel($obj) count ok' );
+
+warnings_like {
+ $cd->set_producers($schema->resultset('Producer')->all);
+ is( $cd->producers->count(), $prod_before_count+2,
+ 'many_to_many set_$rel(@objs) count ok' );
+
+ $cd->set_producers($schema->resultset('Producer')->find(1));
+ is( $cd->producers->count(), 1, 'many_to_many set_$rel($obj) count ok' );
+} [
+ ( qr/\QCalling 'set_producers' with a list of items to link to is deprecated, use an arrayref instead/ ) x 2
+], 'Warnings on deprecated invocation of set_* found';
+
$cd->set_producers([$schema->resultset('Producer')->all]);
is( $cd->producers->count(), $prod_before_count+2,
'many_to_many set_$rel(\@objs) count ok' );
my $undef_artist_cd = $schema->resultset("CD")->new_result({ 'title' => 'badgers', 'year' => 2007 });
-is($undef_artist_cd->has_column_loaded('artist'), '', 'FK not loaded');
+ok(! $undef_artist_cd->has_column_loaded('artist'), 'FK not loaded');
is($undef_artist_cd->search_related('artist')->count, 0, '0=1 search when FK does not exist and object not yet in db');
lives_ok {
$undef_artist_cd->related_resultset('artist')->new({name => 'foo'});
$undir_maps = $schema->resultset("Artist")->find(2)->artist_undirected_maps;
is($undir_maps->count, 1, 'found 1 undirected map for artist 2');
+{
+ my $artist_to_mangle = $schema->resultset('Artist')->find(2);
+
+ $artist_to_mangle->set_from_related( artist_undirected_maps => { id1 => 42 } );
+
+ ok( ! $artist_to_mangle->is_changed, 'Unresolvable set_from_related did not alter object' );
+
+ $artist_to_mangle->set_from_related( artist_undirected_maps => {} );
+ ok( $artist_to_mangle->is_changed, 'Definitive set_from_related did alter object' );
+ is (
+ $artist_to_mangle->id,
+ undef,
+ 'Correctly unset id on definitive outcome of OR condition',
+ );
+}
+
my $mapped_rs = $undir_maps->search_related('mapped_artists');
my @art = $mapped_rs->all;