Make sure array-relconds edge case is handled properly
[dbsrgits/DBIx-Class.git] / t / relationship / core.t
index 504993d..e0e243c 100644 (file)
@@ -4,8 +4,7 @@ use warnings;
 use Test::More;
 use Test::Exception;
 use lib qw(t/lib);
-use DBICTest;
-use DBIC::SqlMakerTest;
+use DBICTest ':DiffSQL';
 
 my $schema = DBICTest->init_schema();
 
@@ -228,7 +227,7 @@ is( $twokey->fourkeys_to_twokeys->count, 0,
 
 
 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'});
@@ -263,6 +262,22 @@ is_same_sql_bind (
 $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;