package tests::UIReportConfigListWidgetTest;

use strict;

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

use Lire::Config::TypeSpec;
use Lire::Test::CursesUIDriver;
use Lire::UI::ReportConfigListWidget;
use Lire::ReportConfig;
use Curses::UI;

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

    $self->{'driver'} = new Lire::Test::CursesUIDriver();
    $self->{'driver'}->setup_curses_ui();

    $self->{'ui'} = new Curses::UI();
    $self->{'driver'}->set_curses_ui( $self->{'ui'} );
    $self->{'window'} = $self->{'ui'}->add( 'window', 'Window' );

    $self->{'_old_templates'} = \%Lire::ReportConfig::TEMPLATES;

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

    $self->{'ftp_default'} =
      new Lire::Config::ReportSpec( 'name' => 'ftp_default' )->instance();
    $self->{'www_default'} =
      new Lire::Config::ReportSpec( 'name' => 'www_default' )->instance();
    *Lire::ReportConfig::TEMPLATES =
      { 'ftp_default' => $self->{'ftp_default'},
        'www_default' => $self->{'www_default'},
      };
    $self->{'ftp_default'}->get( 'id' )->set( 'ftp_default' );
    $self->{'www_default'}->get( 'id' )->set( 'www_default' );

    $self->{'cfg'}{'lr_templates_path'} = [];
    $self->{'reports'} = $spec->instance();

    return;
}

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

    *Lire::ReportConfig::TEMPLATES = $self->{'_old_templates'};
    $self->{'driver'}->teardown_curses_ui();

    return;
}

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

    my $widget = $self->{'window'}->add( 'list_widget',
                                         'Lire::UI::ReportConfigListWidget',
                                         'value' => $self->{'reports'} );
    $self->assert_isa( 'Lire::UI::ReportConfigListWidget', $widget );
    $self->assert_deep_equals( [ 'ftp_default', 'www_default' ],
                               $widget->getobj( 'type_widget' )->{'-values'} );
    $self->assert_deep_equals( {},
                               $widget->getobj( 'type_widget' )->{'-labels'} );
}

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

    my $widget = $self->{'window'}->add( 'list_widget',
                                         'Lire::UI::ReportConfigListWidget',
                                         'value' => $self->{'reports'} );
    my $popup = $widget->getobj( 'type_widget' );
    $self->assert_null( $widget->new_value(), 'new_value() != undef' );

    $popup->{'-selected'} = 0;
    my $value = $widget->new_value();
    $self->assert_isa( 'Lire::Config::Object', $value );
    $self->assert_str_not_equals( $self->{'ftp_default'}, $value );
    $self->assert_str_equals( 'ftp_default', $value->get( 'id' )->get() );
    $self->assert_str_equals( $self->{'reports'}->spec()->get( 'report' ),
                              $value->spec() );

    $popup->{'-selected'} = 1;
    $value = $widget->new_value();
    $self->assert_str_equals( 'www_default', $value->get( 'id' )->get() );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1