X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fstorage%2Fon_connect_call.t;h=bea50850f4345c9c5185d645a86b5073b9006122;hb=64ae166780d0cb2b9577e506da9b9b240c146d20;hp=09befcd2cccd92c5e77135b9c22e7c3928c4cefa;hpb=2dc8d9618fd296ecdd4484d3686832de0592e747;p=dbsrgits%2FDBIx-Class.git diff --git a/t/storage/on_connect_call.t b/t/storage/on_connect_call.t index 09befcd..bea5085 100644 --- a/t/storage/on_connect_call.t +++ b/t/storage/on_connect_call.t @@ -3,66 +3,96 @@ use warnings; no warnings qw/once redefine/; use lib qw(t/lib); +use DBI; use DBICTest; +use DBICTest::Schema; +use DBIx::Class::Storage::DBI; -use Test::More tests => 9; - -my $schema = DBICTest->init_schema( - no_connect => 1, - no_deploy => 1, -); - -local *DBIx::Class::Storage::DBI::connect_call_foo = sub { - isa_ok $_[0], 'DBIx::Class::Storage::DBI', - 'got storage in connect_call method'; - is $_[1], 'bar', 'got param in connect_call method'; -}; - -local *DBIx::Class::Storage::DBI::disconnect_call_foo = sub { - isa_ok $_[0], 'DBIx::Class::Storage::DBI', - 'got storage in disconnect_call method'; -}; - -ok $schema->connection( - DBICTest->_database, - { - on_connect_call => [ - [ do_sql => 'create table test1 (id integer)' ], - [ do_sql => [ 'insert into test1 values (?)', {}, 1 ] ], - [ do_sql => sub { ['insert into test1 values (2)'] } ], - [ sub { $_[0]->dbh->do($_[1]) }, 'insert into test1 values (3)' ], - # this invokes $storage->connect_call_foo('bar') (above) - [ foo => 'bar' ], - ], - on_connect_do => 'insert into test1 values (4)', - on_disconnect_call => 'foo', - }, -), 'connection()'; - -is_deeply ( - $schema->storage->dbh->selectall_arrayref('select * from test1'), - [ [ 1 ], [ 2 ], [ 3 ], [ 4 ] ], - 'on_connect_call/do actions worked' -); - -local *DBIx::Class::Storage::DBI::connect_call_foo = sub { - isa_ok $_[0], 'DBIx::Class::Storage::DBI', - 'got storage in connect_call method'; -}; - -local *DBIx::Class::Storage::DBI::connect_call_bar = sub { - isa_ok $_[0], 'DBIx::Class::Storage::DBI', - 'got storage in connect_call method'; -}; - -$schema->storage->disconnect; - -ok $schema->connection( - DBICTest->_database, - { - # method list form - on_connect_call => [ 'foo', sub { ok 1, "coderef in list form" }, 'bar' ], - }, -), 'connection()'; - -$schema->storage->ensure_connected; +# !!! do not replace this with done_testing - tests reside in the callbacks +# !!! number of calls is important +use Test::More tests => 16; +# !!! + +my $schema = DBICTest::Schema->clone; + +{ + *DBIx::Class::Storage::DBI::connect_call_foo = sub { + isa_ok $_[0], 'DBIx::Class::Storage::DBI', + 'got storage in connect_call method'; + is $_[1], 'bar', 'got param in connect_call method'; + }; + + *DBIx::Class::Storage::DBI::disconnect_call_foo = sub { + isa_ok $_[0], 'DBIx::Class::Storage::DBI', + 'got storage in disconnect_call method'; + }; + + ok $schema->connection( + DBICTest->_database, + { + on_connect_call => [ + [ do_sql => 'create table test1 (id integer)' ], + [ do_sql => [ 'insert into test1 values (?)', {}, 1 ] ], + [ do_sql => sub { ['insert into test1 values (2)'] } ], + [ sub { $_[0]->dbh->do($_[1]) }, 'insert into test1 values (3)' ], + # this invokes $storage->connect_call_foo('bar') (above) + [ foo => 'bar' ], + ], + on_connect_do => 'insert into test1 values (4)', + on_disconnect_call => 'foo', + }, + ), 'connection()'; + + ok (! $schema->storage->connected, 'start disconnected'); + + is_deeply ( + $schema->storage->dbh->selectall_arrayref('select * from test1'), + [ [ 1 ], [ 2 ], [ 3 ], [ 4 ] ], + 'on_connect_call/do actions worked' + ); + + $schema->storage->disconnect; +} + +{ + *DBIx::Class::Storage::DBI::connect_call_foo = sub { + isa_ok $_[0], 'DBIx::Class::Storage::DBI', + 'got storage in connect_call method'; + }; + + *DBIx::Class::Storage::DBI::connect_call_bar = sub { + isa_ok $_[0], 'DBIx::Class::Storage::DBI', + 'got storage in connect_call method'; + }; + + + ok $schema->connection( + DBICTest->_database, + { + # method list form + on_connect_call => [ 'foo', sub { ok 1, "coderef in list form" }, 'bar' ], + }, + ), 'connection()'; + + ok (! $schema->storage->connected, 'start disconnected'); + $schema->storage->ensure_connected; + $schema->storage->disconnect; # this should not fire any tests +} + +{ + ok $schema->connection( + sub { DBI->connect(DBICTest->_database) }, + { + # method list form + on_connect_call => [ sub { ok 1, "on_connect_call after DT parser" }, ], + on_disconnect_call => [ sub { ok 1, "on_disconnect_call after DT parser" }, ], + }, + ), 'connection()'; + + ok (! $schema->storage->connected, 'start disconnected'); + + $schema->storage->_determine_driver; # this should connect due to the coderef + + ok ($schema->storage->connected, 'determine driver connects'); + $schema->storage->disconnect; +}