package tests::ConfigReportConfigIndexTest;

use base qw/Lire::Test::TestCase/;

use Lire::Config::TypeSpec;
use Lire::Config::Index;
use Lire::Config::ReportConfigIndex;

sub set_up {
    my $self = $_[0];
    $self->SUPER::set_up();

    my $spec = new Lire::Config::ListSpec( 'name' => 'reports' );
    $spec->add( new Lire::Config::ReportSpec( 'name' => 'report' ) );

    $self->{'reports_list'} = $spec->instance();
    $self->{'reports_list'}->append( $spec->get( 'report' )->instance() );
    $self->{'reports_list'}->append( $spec->get( 'report' )->instance() );

    $self->{'reports_list'}->get( 0 )->get( 'id' )->set( 'test1' );
    $self->{'reports_list'}->get( 1 )->get( 'id' )->set( 'test2' );

    return;
}

sub tear_down {
    my $self = $_[0];
    $self->SUPER::tear_down();

    return;
}

sub test_new {
    my $self = $_[0];

    $self->assert_dies( qr/'list' spec should contain only one Lire::Config::ReportSpec component/,
                        sub { new Lire::Config::ReportConfigIndex( new Lire::Config::ListSpec( 'name' => 'test' )->instance() ) } );

    my $index = new Lire::Config::ReportConfigIndex( $self->{'reports_list'} );
    $self->assert_isa( 'Lire::Config::ReportConfigIndex', $index );
    $self->assert_str_equals( $self->{'reports_list'},
                              $index->{'_list'} );
}

sub test_has_entry {
    my $self = $_[0];

    my $index = new Lire::Config::ReportConfigIndex( $self->{'reports_list'} );
    $self->assert( $index->has_entry( 'test1' ) ? 1 : 0, 'test1' );
    $self->assert( $index->has_entry( 'test2' ) ? 1 : 0, 'test2' );
    $self->assert( !$index->has_entry( 'test3' ) ? 1 : 0, 'test3' );
}

sub test_entries {
    my $self = $_[0];

    my $index = new Lire::Config::ReportConfigIndex( $self->{'reports_list'} );
    $self->assert_deep_equals( [ 'test1', 'test2' ], $index->entries() );

}

sub test_get_ref {
    my $self = $_[0];

    my $index = new Lire::Config::ReportConfigIndex( $self->{'reports_list'} );
    $self->assert_dies( qr/no report configuration "test3"/,
                        sub { $index->get_ref( 'test3' ) } );
    $self->assert_isa( 'Lire::ReportConfig', $index->get_ref( 'test1' ) );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1