use strict;
use warnings;
use Test::More;
use Test::Exception;
use DBIx::Table::TestDataGenerator;
use DBIx::Table::TestDataGenerator::TableProbe;
use DBIx::Table::TestDataGenerator::DBDriverUtils;
plan tests => 9;
my $db_driver_utils = DBIx::Table::TestDataGenerator::DBDriverUtils->new();
my $table = 'test_TDG';
my $dsn = $db_driver_utils->get_in_memory_dsn();
my $user = my $password = q{};
my $probe = DBIx::Table::TestDataGenerator::TableProbe->new(
dsn => $dsn,
user => q{},
password => q{},
table => $table,
on_the_fly_schema_sql => 't/db/schema.sql',
);
$probe->dump_schema();
#test unique_columns_with_max
my %unique_constraints = %{ $probe->unique_columns_with_max(0) };
#test num_records
my $initial_num_records = $probe->num_records();
is( $initial_num_records, 5, 'check initial number of records' );
#test column_names
my @column_names_sorted = sort( @{ $probe->column_names() } );
is_deeply(
\@column_names_sorted,
[ 'dt', 'id', 'j', 'refid', 'ud' ],
'correct column names'
);
#test random_record
my %ids;
my $num_samples = 2**31-2;
my $cols = [ 'dt', 'id', 'j', 'refid', 'ud' ];
for ( 1 .. $num_samples ) {
my %r = %{ $probe->random_record( $table, $cols ) };
$ids{ $r{id} }++;
last if keys %ids == $initial_num_records;
}
#by choice of $num_samples, the probability of one of those pkeys
#missing is $num_samples / $max_signed_int
is( keys %ids, $initial_num_records, 'all pkeys found in random samples' );
#test num_roots
is( $probe->num_roots(), 2, 'checking number of roots' );
#test fkey_name_to_source
my $fkey_to_src = $probe->fkey_name_to_source();
is_deeply(
$fkey_to_src,
{
'j' => 'TestTdgRef',
'refid' => 'TestTdg'
},
'foreign keys correctly determined'
);
#test fkey_referenced_cols_to_referencing_cols
my $refd_to_refng = $probe->fkey_referenced_cols_to_referencing_cols();
is_deeply(
$refd_to_refng,
{
'refid' => { 'id' => 'refid' },
'j' => { 'i' => 'j' }
},
'referenced to referencing foreign key constrained columns determined'
);
#test fkey_referenced_cols
my $fkey_refd_cols = $probe->fkey_referenced_cols();
is_deeply(
$fkey_refd_cols,
{
'refid' => ['id'],
'j' => ['i']
},
'fkeys to lists of referenced constrained columns determined'
);
#test get_self_reference
my $self_ref_info = $probe->get_self_reference('id');
is_deeply(
$self_ref_info,
[ 'refid', 'refid' ],
'self reference correctly determined'
);
#test selfref_tree
my $tree_ref = $probe->selfref_tree( 'id', 'refid' );
is_deeply(
$tree_ref,
{ 1 => [ 1, 2, 3 ], 4 => [ 4, 5 ] },
'self reference tree correctly determined'
);