The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 4;

use File::Basename;
use lib File::Basename::dirname(__FILE__)."/../../../lib";
use lib File::Basename::dirname(__FILE__)."/../..";
use URT; # dummy namespace

use File::Temp;
use File::Spec;

my $sqlite_dir = File::Temp::tempdir( CLEANUP => 1 );

create_dir_with_schema_files($sqlite_dir);
define_datasource($sqlite_dir);

my $ds = URT::DataSource::SQLiteDir->get();
my $person_index = $ds->get_unique_index_details_from_data_dictionary('main','person');
my $other_index = $ds->get_unique_index_details_from_data_dictionary('other','person');

is(scalar(keys(%$person_index)), 1, 'found only the index for main schema');
is(scalar(keys(%$other_index)), 1, 'found only the index for other schema');

is((keys(%$person_index))[0], 'main_person_name_idx', 'found proper index for person table');
is((keys(%$other_index))[0], 'other_person_name_idx', 'found proper index for other table');

sub create_dir_with_schema_files {
    my $sqlite_dir = shift;
    my $main_schema_file = File::Spec->catfile($sqlite_dir, 'main.sqlite3');
    my $main_dbh = DBI->connect("dbi:SQLite:dbname=$main_schema_file",'','')
            || die "Can't create main schema file in dir $sqlite_dir: ".$DBI::errstr;
    $main_dbh->do('create table person (person_id integer primary key, name varchar)');
    $main_dbh->do("create unique index main_person_name_idx ON person (name)");

    my $other_schema_file = File::Spec->catfile($sqlite_dir, 'other.sqlite3');
    my $other_dbh = DBI->connect("dbi:SQLite:dbname=$other_schema_file",'','')
            || die "Can't create other schema file in dir $sqlite_dir: ".$DBI::errstr;
    $other_dbh->do('create table person (person_id integer primary_key, name varchar)');
    $other_dbh->do("create unique index other_person_name_idx ON person (name)");
}

sub define_datasource {
    my $sqlite_dir = shift;

    UR::Object::Type->define(
        class_name => 'URT::DataSource::SQLiteDir',
        is => 'UR::DataSource::SQLite',
        has_constant => [
            server => { value => $sqlite_dir },
        ],
    );
}