1 contributor
use Test::More 'no_plan';
use strict;
use warnings;
use DBI::Custom;
use Scalar::Util qw/blessed/;
# user password database
our ($U, $P, $D) = connect_info();
{
my $dbi = DBI::Custom->new(
connect_info => {
user => 'a',
password => 'b',
data_source => 'c',
options => {d => 1, e => 2}
},
filters => {
f => 3,
},
bind_filter => 'f',
fetch_filter => 'g',
dbh => 'e',
);
is_deeply($dbi,{connect_info => {user => 'a', password => 'b', data_source => 'c', options => {d => 1, e => 2}} ,filters => {f => 3}, bind_filter => 'f', fetch_filter => 'g', dbh => 'e'}, 'new');
isa_ok($dbi, 'DBI::Custom');
}
{
package DBI::Custom::T1;
use base 'DBI::Custom';
__PACKAGE__->initialize_model(sub {
my $model = shift;
$model
->connect_info(
user => 'a',
password => 'b',
data_source => 'c',
options => {d => 1, e => 2}
)
->filters(
f => 3
)
->bind_filter('f')
->fetch_filter('g')
->dbh('e')
});
}
{
my $dbi = DBI::Custom::T1->new(
connect_info => {
user => 'ao',
password => 'bo',
data_source => 'co',
options => {do => 10, eo => 20}
},
filters => {
fo => 30,
},
bind_filter => 'fo',
fetch_filter => 'go',
);
is_deeply($dbi,{connect_info => {user => 'ao', password => 'bo', data_source => 'co', options => {do => 10, eo => 20}} ,filters => {fo => 30}, bind_filter => 'fo', fetch_filter => 'go'}, 'new arguments');
isa_ok($dbi, 'DBI::Custom::T1');
}
{
my $dbi = DBI::Custom::T1->new;
is_deeply($dbi,{connect_info => {user => 'a', password => 'b', data_source => 'c', options => {d => 1, e => 2}} ,filters => {f => 3}, bind_filter => 'f', fetch_filter => 'g'}, 'new custom class');
isa_ok($dbi, 'DBI::Custom::T1');
}
{
package DBI::Custom::T1_2;
use base 'DBI::Custom::T1';
}
{
my $dbi = DBI::Custom::T1_2->new;
is_deeply($dbi,{connect_info => {user => 'a', password => 'b', data_source => 'c', options => {d => 1, e => 2}} ,filters => {f => 3}, bind_filter => 'f', fetch_filter => 'g'}, 'new custom class inherit');
isa_ok($dbi, 'DBI::Custom::T1_2');
}
{
package DBI::Custom::T1_3;
use base 'DBI::Custom::T1';
__PACKAGE__->initialize_model(sub {
my $model = shift;
$model
->connect_info(
user => 'ao',
password => 'bo',
data_source => 'co',
options => {do => 10, eo => 20}
)
->filters(
fo => 30
)
->bind_filter('fo')
->fetch_filter('go')
->dbh('eo')
});
}
{
my $dbi = DBI::Custom::T1_3->new;
is_deeply($dbi,{connect_info => {user => 'ao', password => 'bo', data_source => 'co', options => {do => 10, eo => 20}} ,filters => {fo => 30}, bind_filter => 'fo', fetch_filter => 'go'}, 'new custom class');
isa_ok($dbi, 'DBI::Custom::T1_3');
}
{
my $dbi = DBI::Custom::T1_3->new(
connect_info => {
user => 'a',
password => 'b',
data_source => 'c',
options => {d => 1, e => 2}
},
filters => {
f => 3,
},
bind_filter => 'f',
fetch_filter => 'g',
dbh => 'e',
);
is_deeply($dbi,{connect_info => {user => 'a', password => 'b', data_source => 'c', options => {d => 1, e => 2}} ,filters => {f => 3}, bind_filter => 'f', fetch_filter => 'g', dbh => 'e'}, 'new');
isa_ok($dbi, 'DBI::Custom');
}
{
my $dbi = DBI::Custom->new(
connect_info => {
user => $U,
password => $P,
data_source => "dbi:mysql:$D"
}
);
$dbi->connect;
ok(blessed $dbi->dbh);
can_ok($dbi->dbh, qw/prepare/);
}
{
my $dbi = DBI::Custom->new(
connect_info => {
no_exist => 1,
}
);
eval{$dbi->connect};
like($@, qr/connect_info 'no_exist' is invald/, 'no exist');
}
sub connect_info {
my $file = 'password.tmp';
open my $fh, '<', $file
or return;
my ($user, $password, $database) = split(/\s/, (<$fh>)[0]);
close $fh;
return ($user, $password, $database);
}