The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -wT
# $Id$
use strict;
use warnings;

BEGIN {
    use lib 't/lib';
    use Handel::Test tests => 11;

    use_ok('Handel::Storage::RDBO');
    use_ok('Handel::Exception', ':try');
};

my $storage = Handel::Storage::RDBO->new;
$storage->setup({
    connection_info => {
        driver => 'sqlite',
        type => 'bogus',
        domain => 'handel',
        dsn => 'dbi:SQLite:dbname=F:\CPAN\handel.db'
    },
    item_relationship    => 'myitems',
    schema_class         => 'Handel::Base',
    schema_instance      => 'FakeSchemaInstance',
    table_name           => 'mytable'
});

is_deeply($storage->connection_info, {
        driver => 'sqlite',
        type => 'bogus',
        domain => 'handel',
        dsn => 'dbi:SQLite:dbname=F:\CPAN\handel.db'
    }, 'connection was set');
is($storage->item_relationship, 'myitems', 'item relationship was set');
is($storage->schema_class, 'Handel::Base', 'schema class was set');
is($storage->schema_instance, 'FakeSchemaInstance', 'schema instance was set');
is($storage->table_name, 'mytable', 'table name was set');


## throw exception if no result is passed
try {
    local $ENV{'LANG'} = 'en';
    $storage->setup;

    fail('no exception thrown');
} catch Handel::Exception::Argument with {
    pass('argument exception caught');
    like(shift, qr/not a HASH/i, 'not a hash in message');
} otherwise {
    fail('other exception caught');
};


## throw exception if no result is passed
try {
    local $ENV{'LANG'} = 'en';
    $storage->setup({});

    fail('no exception thrown');
} catch Handel::Exception::Storage with {
    pass('storage exception caught');
    like(shift, qr/schema instance/i, 'existing schema instance in message');
} otherwise {
    fail('other exception thrown');
};