Fix for => 'shared' on MySQL (RT#64590)
[dbsrgits/DBIx-Class.git] / t / 103many_to_many_warning.t
index ff48590..36d41a8 100644 (file)
@@ -4,37 +4,48 @@ use Test::More;
 
 use lib qw(t/lib);
 
+plan tests => 4;
+my $exp_warn = qr/The many-to-many relationship 'bars' is trying to create/;
 
-our $no_warn = "";
-
-plan tests => 2;
 {
-  local $@; 
-  local $SIG{__WARN__} = sub { die @_ };
-  eval "@{[code()]}";
-  ok($@, "Warning triggered without relevant 'no warnings'");
+  my @w; 
+  local $SIG{__WARN__} = sub { $_[0] =~ $exp_warn ? push @w, $_[0] : warn $_[0] };
+  my $code = gen_code ( suffix => 1 );
+  eval "$code";
+  ok (! $@, 'Eval code without warnings suppression')
+    || diag $@;
+
+  ok (@w, "Warning triggered without DBIC_OVERWRITE_HELPER_METHODS_OK");
 }
 
 {
-  # Clean up the packages
-  delete $INC{'DBICTest/ManyToManyWarning.pm'};
-  delete $DBICTest::{"Schema::"};
-
-  $no_warn = "no warnings 'DBIx::Class::Relationship::ManyToMany';";
-  local $SIG{__WARN__} = sub { die @_ };
-  eval "@{[code()]}";
-  ok(!$@, "No Warning triggered with relevant 'no warnings'");
+  my @w; 
+  local $SIG{__WARN__} = sub { $_[0] =~ $exp_warn ? push @w, $_[0] : warn $_[0] };
+
+  my $code = gen_code ( suffix => 2 );
+
+  local $ENV{DBIC_OVERWRITE_HELPER_METHODS_OK} = 1;
+  eval "$code";
+  ok (! $@, 'Eval code with warnings suppression')
+    || diag $@;
+
+  ok (! @w, "No warning triggered with DBIC_OVERWRITE_HELPER_METHODS_OK");
 }
 
-sub code {
-my $file = << "EOF";
+sub gen_code {
+
+  my $args = { @_ };
+  my $suffix = $args->{suffix};
+
+  return <<EOF;
 use strict;
 use warnings;
 
 {
   package #
-    DBICTest::Schema::Foo;
+    DBICTest::Schema::Foo${suffix};
   use base 'DBIx::Class::Core';
+
   __PACKAGE__->table('foo');
   __PACKAGE__->add_columns(
     'fooid' => {
@@ -45,13 +56,12 @@ use warnings;
   __PACKAGE__->set_primary_key('fooid');
 
 
-  __PACKAGE__->has_many('foo_to_bar' => 'DBICTest::Schema::FooToBar' => 'bar');
+  __PACKAGE__->has_many('foo_to_bar' => 'DBICTest::Schema::FooToBar${suffix}' => 'bar');
   __PACKAGE__->many_to_many( foos => foo_to_bar => 'bar' );
-
 }
 {
   package #
-    DBICTest::Schema::FooToBar;
+    DBICTest::Schema::FooToBar${suffix};
 
   use base 'DBIx::Class::Core';
   __PACKAGE__->table('foo_to_bar');
@@ -63,13 +73,15 @@ use warnings;
       data_type => 'integer',
     },
   );
-  __PACKAGE__->belongs_to('foo' => 'DBICTest::Schema::Foo');
-  __PACKAGE__->belongs_to('bar' => 'DBICTest::Schema::Foo');
+  __PACKAGE__->belongs_to('foo' => 'DBICTest::Schema::Foo${suffix}');
+  __PACKAGE__->belongs_to('bar' => 'DBICTest::Schema::Foo${suffix}');
 }
 {
   package #
-    DBICTest::Schema::Bar;
+    DBICTest::Schema::Bar${suffix};
+
   use base 'DBIx::Class::Core';
+
   __PACKAGE__->table('bar');
   __PACKAGE__->add_columns(
     'barid' => {
@@ -78,14 +90,13 @@ use warnings;
     },
   );
 
-  use DBIx::Class::Relationship::ManyToMany;
-  $main::no_warn
   __PACKAGE__->set_primary_key('barid');
-  __PACKAGE__->has_many('foo_to_bar' => 'DBICTest::Schema::FooToBar' => 'foo');
+  __PACKAGE__->has_many('foo_to_bar' => 'DBICTest::Schema::FooToBar${suffix}' => 'foo');
+
   __PACKAGE__->many_to_many( bars => foo_to_bar => 'foo' );
 
   sub add_to_bars {}
 }
 EOF
-  return $file;
+
 }