use strict; use warnings; use lib 't/lib'; use Test::More; use Test::Exception; use Test::Fixture::DBI; use Test::Fixture::DBI::Connector::mysql; sub setup_test { my $dbh = shift; $dbh->do('DROP DATABASE test'); $dbh->do('CREATE DATABASE test'); $dbh->do('USE test'); } sub test_tables { my ( $dbh, $expected_tables ) = @_; my $expected_table_map = +{ map { ( $_ => +{ Tables_in_test => $_ } ) } @$expected_tables }; my $got_table_map = $dbh->selectall_hashref( 'SHOW TABLES', 'Tables_in_test', +{ Slice => +{} } ); is_deeply( $got_table_map, $expected_table_map, sprintf( 'exists tables (%s)', join( ', ', @$expected_tables ) ) ); } sub test_procedures { my ( $dbh, $expected_procedures ) = @_; $expected_procedures = [ sort { $a cmp $b } @$expected_procedures ]; my $rows = $dbh->selectall_arrayref( 'SHOW PROCEDURE STATUS', +{ Slice => +{ Name => undef, }, } ); my $got_procedures = [ sort { $a cmp $b } map { $_->{Name} } @$rows ]; is_deeply( $got_procedures, $expected_procedures, sprintf( 'exists procedures (%s)', join( ', ', @$expected_procedures ) ) ); } sub test_functions { my ( $dbh, $expected_functions ) = @_; $expected_functions = [ sort { $a cmp $b } @$expected_functions ]; my $rows = $dbh->selectall_arrayref( 'SHOW FUNCTION STATUS', +{ Slice => +{ Name => undef, }, } ); my $got_functions = [ sort { $a cmp $b } map { $_->{Name} } @$rows ]; is_deeply( $got_functions, $expected_functions, sprintf( 'exists functions (%s)', join( ', ', @$expected_functions ) ) ); } sub test_events { my ( $dbh, $expected_events ) = @_; $expected_events = [ sort { $a cmp $b } @$expected_events ]; my $rows = $dbh->selectall_arrayref( 'SHOW EVENTS', +{ Slice => +{ Name => undef, }, } ); my $got_events = [ sort { $a cmp $b } map { $_->{Name} } @$rows ]; is_deeply( $got_events, $expected_events, sprintf( 'exists events (%s)', join( ', ', @$expected_events ) ) ); } my $connector = 'Test::Fixture::DBI::Connector::mysql'; my ( $dbh, $mysqld ) = $connector->dbh; subtest 'default' => sub { setup_test($dbh); my $database; lives_ok( sub { $database = construct_database( dbh => $dbh, database => 't/mysql/schema.yaml', ); }, 'construct_database() will be success', ); test_tables( $dbh, [qw/people people_counter friend friend_counter/] ); test_procedures( $dbh, [qw/proc_get_friend_counter proc_get_people_counter/] ); test_functions( $dbh, [qw/func_hello_world func_hello_world2/] ); done_testing; }; subtest 'using schama, function, procedure, event option' => sub { setup_test($dbh); my $database; lives_ok( sub { $database = construct_database( dbh => $dbh, database => 't/mysql/schema.yaml', schema => [qw/people/], procedure => [qw/proc_get_people_counter/], function => [qw/func_hello_world2/], event => [qw/event_hello/], ); }, 'construct_database() will be success', ); test_tables( $dbh, [qw/people/] ); test_procedures( $dbh, [qw/proc_get_people_counter/] ); test_functions( $dbh, [qw/func_hello_world2/] ); test_events( $dbh, [qw/event_hello/] ); done_testing; }; $dbh->disconnect; done_testing; # Local Variables: # mode: perl # perl-indent-level: 4 # indent-tabs-mode: nil # coding: utf-8-unix # End: # # vim: expandtab shiftwidth=4: