use strict;
use warnings;
use lib 't/lib';
use Test::More;
use Test::Exception;
use Test::Fixture::DBI;
use Test::Fixture::DBI::Connector::SQLite;
my $connector = 'Test::Fixture::DBI::Connector::SQLite';
sub test_database {
my ( $dbh, $type, $expected_types ) = @_;
my $expected_type_map = +{
map { ( $_ => +{ name => $_ }, ) }
sort { $a cmp $b } @$expected_types
};
my $got_type_map = $dbh->selectall_hashref(
'SELECT name FROM sqlite_master WHERE type = ? AND sql IS NOT NULL ORDER BY name ASC',
'name', +{ Slice => +{} }, $type,
);
is_deeply( $got_type_map, $expected_type_map,
sprintf( 'exists %s (%s)', $type, join( ', ', @$expected_types ) ) );
}
subtest 'default' => sub {
my $dbh = $connector->dbh;
my $database;
lives_ok(
sub {
$database = construct_database(
dbh => $dbh,
database => 't/sqlite/schema.yaml'
);
},
'construct_database() will be success',
);
test_database( $dbh, 'table',
[qw/friend friend_counter people people_counter/] );
test_database(
$dbh, 'index',
[
qw/idx_people_on_id_and_created_on idx_people_on_id_and_updated_on idx_people_on_nickname/
]
);
$dbh->disconnect;
done_testing;
};
subtest 'with schema' => sub {
my $dbh = $connector->dbh;
my $database;
lives_ok(
sub {
$database = construct_database(
dbh => $dbh,
database => 't/sqlite/schema.yaml',
schema => [qw/friend friend_counter/],
);
},
'construct_database() will be success',
);
test_database( $dbh, 'table', [qw/friend friend_counter/] );
test_database( $dbh, 'index', [] );
$dbh->disconnect;
done_testing;
};
done_testing;
# Local Variables:
# mode: perl
# perl-indent-level: 4
# indent-tabs-mode: nil
# coding: utf-8-unix
# End:
#
# vim: expandtab shiftwidth=4: