# test for loading additional methods from file-defined packages
# by Mark Hedges ( hedges -at| scriptdolphin.com )
use strict;
use Test::More tests => 7 * 5;
use Test::Exception;
use lib 't/lib';
use make_dbictest_db;
use DBIx::Class::Schema::Loader;
$ENV{SCHEMA_LOADER_BACKCOMPAT} = 1;
# In the first test run, then, Foo should be a DBICTestMethods::Namespaces::Schema::Result::Foo
run_test_sequence(
testname => "naming => 'current'",
schema_class => 'DBICTestMethods::Namespaces::Schema',
foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo',
schema_opts => {
naming => 'current',
},
);
# In the second test run with use_namespaces => 0 (backcompat), Foo should be a DBICTestMethods::Backcompat::Schema
run_test_sequence(
testname => "naming => 'current', use_namespaces => 0",
schema_class => 'DBICTestMethods::Backcompat::Schema',
foo_class => 'DBICTestMethods::Backcompat::Schema::Foo',
schema_opts => {
naming => 'current',
use_namespaces => 0,
},
);
# In the third test, with use_namespaces => 1, Foo gets the explicit Result class again
run_test_sequence(
testname => "naming => 'current', use_namespaces => 1",
schema_class => 'DBICTestMethods::Namespaces::Schema',
foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo',
schema_opts => {
naming => 'current',
use_namespaces => 1,
},
);
# try it in full backcompat 0.04006 mode with no schema options
run_test_sequence(
testname => "no naming or namespaces options (0.04006 mode)",
schema_class => 'DBICTestMethods::Backcompat::Schema',
foo_class => 'DBICTestMethods::Backcompat::Schema::Foo',
schema_opts => {
},
);
# try it in backcompat mode (no naming option) but with use_namespaces => 1
run_test_sequence(
testname => "no naming, but with use_namespaces options (0.04006 mode)",
schema_class => 'DBICTestMethods::Namespaces::Schema',
foo_class => 'DBICTestMethods::Namespaces::Schema::Result::Foo',
schema_opts => {
use_namespaces => 1,
},
);
sub run_test_sequence {
my %p = @_;
die "specify a $_ test param" for grep !$p{$_},
qw( testname schema_opts schema_class foo_class );
my $schema;
lives_ok { $schema = make_schema_with(%p) } "($p{testname}) get schema";
SKIP: {
skip 'no point in checking if schema could not be connected', 6 unless defined $schema;
# well, if that worked, try to get a ResultSet
my $foo_rs;
lives_ok {
$foo_rs = $schema->resultset('Foo')->search();
} "($p{testname}) get a ResultSet for Foo";
# get a foo
my $foo;
lives_ok {
$foo = $foo_rs->first();
} "($p{testname}) get the first foo";
ok(defined $foo, "($p{testname}) \$foo is defined");
SKIP: {
skip 'foo is not defined', 3 unless defined $foo;
isa_ok $foo, $p{foo_class};
# call the file-defined method
my $biz;
lives_ok {
$biz = $foo->biz();
} "($p{testname}) call the file-defined Foo->biz method";
SKIP: {
skip 'no point in checking value if method was not found', 1 unless defined $biz;
ok(
$biz eq 'foo bar biz baz boz noz schnozz',
"($p{testname}) biz() method returns correct string"
);
}
}
}
}
sub make_schema_with {
my %p = @_;
return DBIx::Class::Schema::Loader::make_schema_at(
$p{schema_class},
$p{schema_opts},
[ $make_dbictest_db::dsn ],
);
}