1 contributor
use Test::More tests => 11;
use strict;
use warnings;
use DBIx::Custom;
use DBIx::Custom::QueryBuilder;
# Function for test name
my $test;
sub test {
$test = shift;
}
# Variables for test
my $dbi;
my $query_builder;
test 'Constructor';
$query_builder = DBIx::Custom::QueryBuilder->new;
$dbi = DBIx::Custom->new(
user => 'a',
database => 'a',
password => 'b',
data_source => 'c',
filters => {
f => 3,
},
default_bind_filter => 'f',
default_fetch_filter => 'g',
result_class => 'g',
query_builder => $query_builder,
);
is_deeply($dbi,{user => 'a', database => 'a', password => 'b', data_source => 'c',
filters => {f => 3}, default_bind_filter => 'f',
default_fetch_filter => 'g', result_class => 'g',
query_builder => $query_builder}, $test);
isa_ok($dbi, 'DBIx::Custom');
test 'Sub class constructor';
{
package DBIx::Custom::T1;
use base 'DBIx::Custom';
}
$dbi = DBIx::Custom::T1->new(
filters => {
fo => 30,
},
);
is_deeply(scalar $dbi->filters, {fo => 30}, "$test : filters");
test 'Sub sub class constructor default';
{
package DBIx::Custom::T1_2;
use base 'DBIx::Custom::T1';
}
$dbi = DBIx::Custom::T1_2->new;
isa_ok($dbi, 'DBIx::Custom::T1_2');
test 'Customized sub class constructor default';
{
package DBIx::Custom::T1_3;
use base 'DBIx::Custom::T1';
}
$dbi = DBIx::Custom::T1_3->new;
isa_ok($dbi, 'DBIx::Custom::T1_3');
test 'Customized sub class constructor';
$dbi = DBIx::Custom::T1_3->new(
filters => {
f => 3,
},
);
is_deeply($dbi->filters, {f => 3}, "$test : filters");
isa_ok($dbi, 'DBIx::Custom');
test 'register_filters';
$dbi = DBIx::Custom->new;
$dbi->register_filter(a => sub {1});
is($dbi->filters->{a}->(), 1, $test);
$dbi->register_filter({b => sub {2}});
is($dbi->filters->{b}->(), 2, $test);
test 'expand';
{
$dbi = DBIx::Custom->new;
my $source = {books => {title => 'Perl', author => 'Ken'}};
is_deeply({$dbi->expand($source)},
{'books.title' => 'Perl', 'books.author' => 'Ken'});
}
{
$dbi = DBIx::Custom->new;
my %source = (books => {title => 'Perl', author => 'Ken'});
is_deeply({$dbi->expand(%source)},
{'books.title' => 'Perl', 'books.author' => 'Ken'});
}