X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F20invocations.t;h=059eda1bb625fbc5eba67ad6abca4096fb6dcf7d;hb=6d358d5830e93cbb969f4fec62d499d15f9a23e8;hp=49d16af63bfa158974b3412eeb8fa6c23fe95ed1;hpb=23e88965d9a70c89c26e54c731aeb9573f03d640;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/20invocations.t b/t/20invocations.t index 49d16af..059eda1 100644 --- a/t/20invocations.t +++ b/t/20invocations.t @@ -1,116 +1,108 @@ use strict; use Test::More; +use Test::Warn; +use DBIx::Class::Schema::Loader::Optional::Dependencies; use lib qw(t/lib); use make_dbictest_db; -$SIG{__WARN__} = sub { }; # Suppress warnings, as we test a lot of deprecated stuff here - # Takes a $schema as input, runs 4 basic tests sub test_schema { - my ($testname, $schema) = @_; + my ($testname, $schema) = @_; + warnings_are ( sub { $schema = $schema->clone if !ref $schema; isa_ok($schema, 'DBIx::Class::Schema', $testname); - my $foo_rs = $schema->resultset('Bar')->search({ barid => 3})->search_related('fooref'); - isa_ok($foo_rs, 'DBIx::Class::ResultSet', $testname); + my $rel_foo_rs = $schema->resultset('Bar')->search({ barid => 3})->search_related('fooref'); + isa_ok($rel_foo_rs, 'DBIx::Class::ResultSet', $testname); + + my $rel_foo = $rel_foo_rs->next; + isa_ok($rel_foo, "DBICTest::Schema::_${testname}::Foo", $testname); - my $foo_first = $foo_rs->first; - like(ref $foo_first, qr/DBICTest::Schema::\d+::Foo/, $testname); + is($rel_foo->footext, 'Foo record associated with the Bar with barid 3', "$testname correct object"); - my $foo_first_text = $foo_first->footext; - is($foo_first_text, 'Foo record associated with the Bar with barid 3'); + my $foo_rs = $schema->resultset('Foo'); + my $foo_new = $foo_rs->create({footext => "${testname}_foo"}); + is ($foo_rs->search({footext => "${testname}_foo"})->count, 1, "$testname object created") || die; + }, [], "No warnings during $testname invocations"); } my @invocations = ( - 'deprecated_one' => sub { - package DBICTest::Schema::1; - use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->connection($make_dbictest_db::dsn); - __PACKAGE__->load_from_connection( relationships => 1 ); - __PACKAGE__; - }, - 'deprecated_two' => sub { - package DBICTest::Schema::2; - use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->load_from_connection( - relationships => 1, - connect_info => [ $make_dbictest_db::dsn ], - ); - __PACKAGE__; - }, - 'deprecated_three' => sub { - package DBICTest::Schema::3; - use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->load_from_connection( - relationships => 1, - dsn => $make_dbictest_db::dsn, - ); - __PACKAGE__; - }, - 'deprecated_four' => sub { - package DBICTest::Schema::4; - use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->connection($make_dbictest_db::dsn); - __PACKAGE__->loader_options( relationships => 1 ); - __PACKAGE__; - }, 'hardcode' => sub { - package DBICTest::Schema::5; + package DBICTest::Schema::_hardcode; use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->loader_options( relationships => 1 ); + __PACKAGE__->naming('current'); + __PACKAGE__->use_namespaces(0); __PACKAGE__->connection($make_dbictest_db::dsn); __PACKAGE__; }, 'normal' => sub { - package DBICTest::Schema::6; + package DBICTest::Schema::_normal; use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->loader_options( relationships => 1 ); + __PACKAGE__->loader_options(); + __PACKAGE__->naming('current'); + __PACKAGE__->use_namespaces(0); __PACKAGE__->connect($make_dbictest_db::dsn); }, 'make_schema_at' => sub { use DBIx::Class::Schema::Loader qw/ make_schema_at /; make_schema_at( - 'DBICTest::Schema::7', - { relationships => 1 }, + 'DBICTest::Schema::_make_schema_at', + { + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0 + }, [ $make_dbictest_db::dsn ], ); - DBICTest::Schema::7->clone; + DBICTest::Schema::_make_schema_at->clone; }, 'embedded_options' => sub { - package DBICTest::Schema::8; + package DBICTest::Schema::_embedded_options; use base qw/ DBIx::Class::Schema::Loader /; + __PACKAGE__->naming('current'); + __PACKAGE__->use_namespaces(0); __PACKAGE__->connect( $make_dbictest_db::dsn, - { loader_options => { relationships => 1 } } + { loader_options => { really_erase_my_files => 1 } } ); }, 'embedded_options_in_attrs' => sub { - package DBICTest::Schema::9; + package DBICTest::Schema::_embedded_options_in_attrs; use base qw/ DBIx::Class::Schema::Loader /; + __PACKAGE__->naming('current'); + __PACKAGE__->use_namespaces(0); __PACKAGE__->connect( $make_dbictest_db::dsn, undef, undef, - { AutoCommit => 1, loader_options => { relationships => 1 } } + { AutoCommit => 1, loader_options => { really_erase_my_files => 1 } } ); }, 'embedded_options_make_schema_at' => sub { use DBIx::Class::Schema::Loader qw/ make_schema_at /; make_schema_at( - 'DBICTest::Schema::10', + 'DBICTest::Schema::_embedded_options_make_schema_at', { }, [ $make_dbictest_db::dsn, - { loader_options => { relationships => 1 } }, + { loader_options => { + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0, + } }, ], ); - "DBICTest::Schema::10"; + "DBICTest::Schema::_embedded_options_make_schema_at"; }, 'almost_embedded' => sub { - package DBICTest::Schema::11; + package DBICTest::Schema::_almost_embedded; use base qw/ DBIx::Class::Schema::Loader /; - __PACKAGE__->loader_options( relationships => 1 ); + __PACKAGE__->loader_options( + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0, + ); __PACKAGE__->connect( $make_dbictest_db::dsn, undef, undef, { AutoCommit => 1 } @@ -119,19 +111,82 @@ my @invocations = ( 'make_schema_at_explicit' => sub { use DBIx::Class::Schema::Loader; DBIx::Class::Schema::Loader::make_schema_at( - 'DBICTest::Schema::12', - { relationships => 1 }, + 'DBICTest::Schema::_make_schema_at_explicit', + { + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0, + }, + [ $make_dbictest_db::dsn ], + ); + DBICTest::Schema::_make_schema_at_explicit->clone; + }, + 'no_skip_load_external' => sub { + # By default we should pull in t/lib/DBICTest/Schema/_no_skip_load_external/Foo.pm $skip_me since t/lib is in @INC + use DBIx::Class::Schema::Loader; + DBIx::Class::Schema::Loader::make_schema_at( + 'DBICTest::Schema::_no_skip_load_external', + { + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0, + }, + [ $make_dbictest_db::dsn ], + ); + DBICTest::Schema::_no_skip_load_external->clone; + }, + 'skip_load_external' => sub { + # When we explicitly skip_load_external t/lib/DBICTest/Schema/_skip_load_external/Foo.pm should be ignored + use DBIx::Class::Schema::Loader; + DBIx::Class::Schema::Loader::make_schema_at( + 'DBICTest::Schema::_skip_load_external', + { + really_erase_my_files => 1, + naming => 'current', + use_namespaces => 0, + skip_load_external => 1, + }, [ $make_dbictest_db::dsn ], ); - DBICTest::Schema::12->clone; - } + DBICTest::Schema::_skip_load_external->clone; + }, + (DBIx::Class::Schema::Loader::Optional::Dependencies->req_ok_for('use_moose') ? + ('use_moose' => sub { + package DBICTest::Schema::_use_moose; + use base qw/ DBIx::Class::Schema::Loader /; + __PACKAGE__->naming('current'); + __PACKAGE__->use_namespaces(0); + __PACKAGE__->connect( + $make_dbictest_db::dsn, + { loader_options => { use_moose => 1 } } + ); + }) + : () + ), ); -# 4 tests per k/v pair -plan tests => 2 * @invocations; +# 6 tests per k/v pair +plan tests => 6 * (@invocations/2) + 2; # + 2 more manual ones below. -while(@invocations >= 2) { +while(@invocations) { my $style = shift @invocations; - my $subref = shift @invocations; - test_schema($style, &$subref); + my $cref = shift @invocations; + + my $schema = do { + local $SIG{__WARN__} = sub { + warn $_[0] unless $_[0] =~ /Deleting existing file .+ due to 'really_erase_my_files' setting/ + }; + $cref->(); + }; + + test_schema($style, $schema); +} + +{ + no warnings 'once'; + + is($DBICTest::Schema::_no_skip_load_external::Foo::skip_me, "bad mojo", + "external content loaded"); + is($DBICTest::Schema::_skip_load_external::Foo::skip_me, undef, + "external content not loaded with skip_load_external => 1"); }