#!perl -w
# $Id: /local/CPAN/Mango/t/provider.t 1644 2008-06-02T01:46:53.055259Z claco  $
use strict;
use warnings;

BEGIN {
    use lib 't/lib';
    use Test::More;
    use Mango::Test ();

    eval 'require DBD::SQLite';
    if($@) {
        plan skip_all => 'DBD::SQLite not installed';
    } else {
        plan tests => 15;
    };

    use_ok('Mango::Provider');
    use_ok('Mango::Exception', ':try');
};

my $schema = Mango::Test->init_schema;
my $provider = Mango::Provider->new({
    result_class => 'Mango::Cart'
});

isa_ok($provider, 'Mango::Provider');
is($provider->result_class, 'Mango::Cart');


$provider->setup([
    result_class => 'Mango::Order'
]);
is($provider->result_class, 'Mango::Cart');


## create type not implemented
{
    try {
        local $ENV{'LANG'} = 'en';
        $provider->create;

        fail('no exception thrown');
    } catch Mango::Exception with {
        pass('Argument exception thrown');
        like(shift, qr/overriden/i, 'must be overriden');
    } otherwise {
        fail('Other exception thrown');
    };
};


## delete type not implemented
{
    try {
        local $ENV{'LANG'} = 'en';
        $provider->delete;

        fail('no exception thrown');
    } catch Mango::Exception with {
        pass('Argument exception thrown');
        like(shift, qr/overriden/i, 'must be overriden');
    } otherwise {
        fail('Other exception thrown');
    };
};


## search type not implemented
{
    try {
        local $ENV{'LANG'} = 'en';
        $provider->search;

        fail('no exception thrown');
    } catch Mango::Exception with {
        pass('Argument exception thrown');
        like(shift, qr/overriden/i, 'must be overriden');
    } otherwise {
        fail('Other exception thrown');
    };
};


## update type not implemented
{
    try {
        local $ENV{'LANG'} = 'en';
        $provider->update;

        fail('no exception thrown');
    } catch Mango::Exception with {
        pass('Argument exception thrown');
        like(shift, qr/overriden/i, 'must be overriden');
    } otherwise {
        fail('Other exception thrown');
    };
};


## set_component_class goes boom if class can't be loaded
{
    try {
        local $ENV{'LANG'} = 'en';
        $provider->result_class('Foo');

        fail('no exception thrown');
    } catch Mango::Exception with {
        pass('Argument exception thrown');
        like(shift, qr/loaded/i, 'class cant be loaded');
    } otherwise {
        fail('Other exception thrown');
    };
};
