use FindBin '$Bin';
use lib "$Bin/lib";
-use Test::More tests => 37;
+use Test::More;
use Test::Exception;
use Catalyst::Helper::Model::DBIC::Schema;
-use Catalyst::Helper;
use Storable 'dclone';
+use Test::Requires qw(Catalyst::Helper DBIx::Class::Schema::Loader);
my $helper = Catalyst::Helper->new;
$helper->{base} = $Bin;
$i = instance(schema_class => 'ASchemaClass');
is $i->old_schema, 1, '->load_classes detected correctly';
-$i = instance(args => ['roles=Caching']);
-is_deeply $i->roles, ['Caching'], 'one role';
-is $i->helper->{roles}, "['Caching']", 'one role as string';
+throws_ok { $i = instance(args => [$static, 'DbI:SQLite:myapp.db']) }
+ qr/case matters/i, "wrong case for 'dbi:' DSN part";
-$i = instance(args => ['roles=Caching,Replicated']);
-is_deeply $i->roles, ['Caching', 'Replicated'], 'two roles';
-is $i->helper->{roles}, "['Caching','Replicated']", 'two roles as string';
+$i = instance(args => ['traits=Caching']);
+is_deeply $i->traits, ['Caching'], 'one trait';
+is $i->helper->{traits}, "['Caching']", 'one trait as string';
+
+$i = instance(args => ['traits=Caching,Replicated']);
+is_deeply $i->traits, ['Caching', 'Replicated'], 'two traits';
+is $i->helper->{traits}, "['Caching','Replicated']", 'two traits as string';
$i = instance(args => [$static]);
is $i->create, 'static', 'create=static';
is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp', 'Foo'],
'two extra components';
+my $flags = qr// =~ /\^/ ? '^' : "-xism";
$i = instance(args => [$static, q{constraint=^(foo|bar)$}]);
is $i->loader_args->{constraint}, qr/^(foo|bar)$/,
'constraint loader arg';
is $i->helper->{loader_args}{constraint},
- q{qr/(?-xism:^(foo|bar)$)/},
+ qq{qr/(?$flags:^(foo|bar)\$)/},
'constraint loader arg as string';
$i = instance(args => [$static, q{exclude=^(foo|bar)$}]);
is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
'exclude loader arg';
+$i = instance(args => [$static, q{db_schema=foo;bar::baz/quux}]);
+is $i->loader_args->{db_schema}, q{foo;bar::baz/quux},
+ 'simple value loader arg';
+
$i = instance(args => [
$static, 'components=TimeStamp', $sqlite, $on_connect_do,
$quote_char, $name_sep
'connect_info name_sep as string';
$i = instance(args => [
+ $static, $sqlite, 'on_connect_do=PRAGMA foreign_keys = ON'
+]);
+
+is $i->connect_info->{on_connect_do},
+ 'PRAGMA foreign_keys = ON', 'on_connect_do string';
+
+is $i->helper->{connect_info}{on_connect_do},
+ 'q{PRAGMA foreign_keys = ON}', 'on_connect_do string as string';
+
+$i = instance(args => [
$static, 'components=TimeStamp', $sqlite, '', $on_connect_do,
$quote_char, $name_sep
]);
is $i->connect_info->{password}, 'pass', 'password';
$i = instance(args => [
+ $static, $pg, 'user', 'pass', 'quote_char=[]', $name_sep
+]);
+
+is_deeply $i->connect_info->{quote_char}, ['[', ']'],
+ '2 character quote_char';
+is $i->helper->{connect_info}{quote_char}, '["[","]"]',
+ '2 character quote_char as string';
+
+$i = instance(args => [
$static, 'components=TimeStamp', $sqlite, $on_connect_do,
$quote_char, $name_sep, '{ auto_savepoint => 1, AutoCommit => 0 }'
]);
is $i->helper->{connect_info}{AutoCommit}, 'q{0}',
'connect_info arg from extra hash as string';
+$i = instance(args => [
+ $static, 'components=TimeStamp', $sqlite, $on_connect_do,
+ $quote_char, $name_sep, 'auto_savepoint=1', 'AutoCommit=0',
+ 'db_schema=myschema',
+]);
+
+is $i->loader_args->{db_schema}, 'myschema',
+ 'loader arg after connect_info';
+
+ok ((not exists $i->helper->{connect_info}{db_schema}),
+ 'loader args removed from connect_info');
+
+done_testing;
+
sub instance {
Catalyst::Helper::Model::DBIC::Schema->new(
schema_class => 'AnotherSchemaClass',