use t::Utils;
use Test::More;
{
package Mock::BasicOnConnectDo;
our $CONNECTION_COUNTER;
use parent qw/Teng/;
sub setup_test_db {
shift->do(q{
CREATE TABLE mock_basic_on_connect_do (
id integer,
name text,
primary key ( id )
)
});
}
package Mock::BasicOnConnectDo::Schema;
use utf8;
use Teng::Schema::Declare;
table {
name 'mock_basic';
pk 'id';
columns qw/
id
name
/;
};
}
subtest 'global level on_connect_do / coderef' => sub {
local $Mock::BasicOnConnectDo::CONNECTION_COUNTER = 0;
my $db = Mock::BasicOnConnectDo->new(
{
dbh => t::Utils->setup_dbh,
on_connect_do => sub { $Mock::BasicOnConnectDo::CONNECTION_COUNTER++ }
}
);
is($Mock::BasicOnConnectDo::CONNECTION_COUNTER, 0, "counter should called");
$db->reconnect; # for do connection.
is($Mock::BasicOnConnectDo::CONNECTION_COUNTER, 1, "called after reconnect");
};
subtest 'instance level on_connect_do / coderef' => sub {
my $counter = 0;
my $db = Mock::BasicOnConnectDo->new(
{
dbh => t::Utils->setup_dbh,
on_connect_do => sub { $counter++ },
}
);
is($counter, 0, "counter should called");
$db->reconnect; # for do connection.
is($counter, 1, "called after reconnect");
};
subtest 'instance level on_connect_do / scalar' => sub {
my $query = '';
local *Mock::BasicOnConnectDo::do = sub {
my ($self, $sql, ) = @_;
$self->dbh; # ca be use dbh handler
$query = $sql;
};
my $db = Mock::BasicOnConnectDo->new(
+{
dbh => t::Utils->setup_dbh,
on_connect_do => 'select * from sqlite_master',
}
);
is $query, '';
$query='';
$db->reconnect;
is $query, 'select * from sqlite_master', 'called after reconnect';
};
subtest 'instance level on_connect_do / array' => sub {
my @query = ();
local *Mock::BasicOnConnectDo::do = sub {
my ($self, $sql, ) = @_;
$self->dbh; # ca be use dbh handler
push @query, $sql;
};
my $db = Mock::BasicOnConnectDo->new(
{
dbh => t::Utils->setup_dbh,
on_connect_do => ['select * from sqlite_master', 'select * from sqlite_master'],
}
);
is_deeply \@query, [];
@query = ();
$db->reconnect;
is_deeply \@query, ['select * from sqlite_master', 'select * from sqlite_master'], 'called after reconnect';
};
done_testing();